{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import glob\nimport numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nimport os\nimport pydicom as dicom\n\nlabel_path = '/kaggle/input/rsna-2023-abdominal-trauma-detection/train.csv'\ndf = pd.read_csv(label_path)","metadata":{"execution":{"iopub.status.busy":"2023-08-03T12:27:34.406729Z","iopub.execute_input":"2023-08-03T12:27:34.407181Z","iopub.status.idle":"2023-08-03T12:27:34.515364Z","shell.execute_reply.started":"2023-08-03T12:27:34.407148Z","shell.execute_reply":"2023-08-03T12:27:34.514138Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df.drop(['patient_id'], axis=1).describe().round(2)","metadata":{"execution":{"iopub.status.busy":"2023-08-03T12:27:34.516628Z","iopub.execute_input":"2023-08-03T12:27:34.516977Z","iopub.status.idle":"2023-08-03T12:27:34.595588Z","shell.execute_reply.started":"2023-08-03T12:27:34.51695Z","shell.execute_reply":"2023-08-03T12:27:34.594153Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df.isnull().sum()","metadata":{"execution":{"iopub.status.busy":"2023-08-03T12:27:34.597015Z","iopub.execute_input":"2023-08-03T12:27:34.597358Z","iopub.status.idle":"2023-08-03T12:27:34.608252Z","shell.execute_reply.started":"2023-08-03T12:27:34.59733Z","shell.execute_reply":"2023-08-03T12:27:34.606756Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df.max()","metadata":{"execution":{"iopub.status.busy":"2023-08-03T12:27:34.611852Z","iopub.execute_input":"2023-08-03T12:27:34.612235Z","iopub.status.idle":"2023-08-03T12:27:34.630886Z","shell.execute_reply.started":"2023-08-03T12:27:34.612205Z","shell.execute_reply":"2023-08-03T12:27:34.629474Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df.min()","metadata":{"execution":{"iopub.status.busy":"2023-08-03T12:27:34.633014Z","iopub.execute_input":"2023-08-03T12:27:34.633511Z","iopub.status.idle":"2023-08-03T12:27:34.648701Z","shell.execute_reply.started":"2023-08-03T12:27:34.633475Z","shell.execute_reply":"2023-08-03T12:27:34.64727Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df.dtypes","metadata":{"execution":{"iopub.status.busy":"2023-08-03T12:27:34.650511Z","iopub.execute_input":"2023-08-03T12:27:34.650963Z","iopub.status.idle":"2023-08-03T12:27:34.667145Z","shell.execute_reply.started":"2023-08-03T12:27:34.65092Z","shell.execute_reply":"2023-08-03T12:27:34.666234Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df","metadata":{"execution":{"iopub.status.busy":"2023-08-03T12:27:34.669523Z","iopub.execute_input":"2023-08-03T12:27:34.67161Z","iopub.status.idle":"2023-08-03T12:27:34.695918Z","shell.execute_reply.started":"2023-08-03T12:27:34.671569Z","shell.execute_reply":"2023-08-03T12:27:34.694885Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import seaborn as sns\n\nf, ax = plt.subplots(figsize=(10, 8))\ncorr = df.drop(['patient_id'], axis=1).corr()\nsns.heatmap(corr,\n    cmap=sns.diverging_palette(220, 10, as_cmap=True),\n    vmin=-1.0, vmax=1.0,\n    square=True, ax=ax)","metadata":{"execution":{"iopub.status.busy":"2023-08-03T12:27:34.697463Z","iopub.execute_input":"2023-08-03T12:27:34.698887Z","iopub.status.idle":"2023-08-03T12:27:36.045771Z","shell.execute_reply.started":"2023-08-03T12:27:34.698847Z","shell.execute_reply":"2023-08-03T12:27:36.04444Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# [train/test]_images/[patient_id]/[series_id]/[image_instance_number].dcm\ntrain_path = '/kaggle/input/rsna-2023-abdominal-trauma-detection/train_images/10004/21057/1000.dcm'\n#test_path = '/kaggle/input/rsna-2023-abdominal-trauma-detection/test_images/10004/21057/1000.dcm'","metadata":{"execution":{"iopub.status.busy":"2023-08-03T12:27:36.047125Z","iopub.execute_input":"2023-08-03T12:27:36.04762Z","iopub.status.idle":"2023-08-03T12:27:36.053765Z","shell.execute_reply.started":"2023-08-03T12:27:36.047572Z","shell.execute_reply":"2023-08-03T12:27:36.052899Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"ds = dicom.dcmread(train_path)\nplt.imshow(ds.pixel_array)","metadata":{"execution":{"iopub.status.busy":"2023-08-03T12:27:36.055021Z","iopub.execute_input":"2023-08-03T12:27:36.055317Z","iopub.status.idle":"2023-08-03T12:27:36.410736Z","shell.execute_reply.started":"2023-08-03T12:27:36.055291Z","shell.execute_reply":"2023-08-03T12:27:36.409425Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"patient_id = df['patient_id'].to_numpy().astype(str)\ntrain_x = []\ntrain_y = []\nfor idx, pat_id in enumerate(patient_id[:3]):\n    dir_path = '/kaggle/input/rsna-2023-abdominal-trauma-detection/train_images/'+pat_id+'/'\n    lab = df.iloc[idx].to_numpy()[1:]\n    for file_path in glob.glob(dir_path+'*'):\n        for img_path in glob.glob(file_path+'/*'):\n            ds = dicom.dcmread(train_path).pixel_array\n            train_x.append(ds)\n            train_y.append(lab)","metadata":{"execution":{"iopub.status.busy":"2023-08-03T12:27:36.412231Z","iopub.execute_input":"2023-08-03T12:27:36.412598Z","iopub.status.idle":"2023-08-03T12:28:15.083893Z","shell.execute_reply.started":"2023-08-03T12:27:36.412567Z","shell.execute_reply":"2023-08-03T12:28:15.082629Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_x = []\ntest_pat_id = []\ntest_dir_path = '/kaggle/input/rsna-2023-abdominal-trauma-detection/test_images/'\nfor test_file_path in glob.glob(test_dir_path+'*'):\n    for test_path in glob.glob(test_file_path+'*'):\n        for test_file in glob.glob(test_path+'/*'):\n            for img_path in glob.glob(test_file+'/*'):\n                ds = dicom.dcmread(img_path).pixel_array\n                test_x.append(ds)\n                img_id = img_path.split('/')[5]\n                test_pat_id.append(img_id)\n                ","metadata":{"execution":{"iopub.status.busy":"2023-08-03T12:28:15.085853Z","iopub.execute_input":"2023-08-03T12:28:15.086426Z","iopub.status.idle":"2023-08-03T12:28:15.14342Z","shell.execute_reply.started":"2023-08-03T12:28:15.08636Z","shell.execute_reply":"2023-08-03T12:28:15.142123Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_x = np.array(train_x)\ntrain_y = np.array(train_y)\n\ntest_x = np.array(test_x)\ntest_pat_id = np.array(test_pat_id)\n\nprint(train_x.shape)\nprint(train_y.shape)\nprint(test_x.shape)\nprint(test_pat_id.shape)","metadata":{"execution":{"iopub.status.busy":"2023-08-03T12:28:15.147049Z","iopub.execute_input":"2023-08-03T12:28:15.147422Z","iopub.status.idle":"2023-08-03T12:28:15.537427Z","shell.execute_reply.started":"2023-08-03T12:28:15.147392Z","shell.execute_reply":"2023-08-03T12:28:15.536193Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.imshow(train_x[1]/np.max(train_x[1]))\nplt.title(train_y[1])","metadata":{"execution":{"iopub.status.busy":"2023-08-03T12:28:15.53892Z","iopub.execute_input":"2023-08-03T12:28:15.539981Z","iopub.status.idle":"2023-08-03T12:28:15.933431Z","shell.execute_reply.started":"2023-08-03T12:28:15.53994Z","shell.execute_reply":"2023-08-03T12:28:15.931732Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import tensorflow as tf\nfrom tensorflow.keras import layers, models","metadata":{"execution":{"iopub.status.busy":"2023-08-03T12:28:15.938519Z","iopub.execute_input":"2023-08-03T12:28:15.93934Z","iopub.status.idle":"2023-08-03T12:28:19.771551Z","shell.execute_reply.started":"2023-08-03T12:28:15.939292Z","shell.execute_reply":"2023-08-03T12:28:19.770339Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = models.Sequential()\nmodel.add(layers.Conv2D(2, (3,3), activation='relu', input_shape=(train_x.shape[1],train_x.shape[2],1)))\nmodel.add(layers.Conv2D(2, (3,3), activation='relu'))\nmodel.add(layers.BatchNormalization())\nmodel.add(layers.MaxPool2D(2))\nmodel.add(layers.Conv2D(4, (3,3), activation='relu'))\nmodel.add(layers.Conv2D(4, (3,3), activation='relu'))\nmodel.add(layers.BatchNormalization())\nmodel.add(layers.MaxPool2D(2))\nmodel.add(layers.Conv2D(4, (3,3), activation='relu'))\nmodel.add(layers.Conv2D(4, (3,3), activation='relu'))\nmodel.add(layers.BatchNormalization())\nmodel.add(layers.MaxPool2D(2))\nmodel.add(layers.Conv2D(8, (3,3), activation='relu'))\nmodel.add(layers.Conv2D(8, (3,3), activation='relu'))\nmodel.add(layers.BatchNormalization())\nmodel.add(layers.MaxPool2D(2))\nmodel.add(layers.Conv2D(8, (3,3), activation='relu'))\nmodel.add(layers.Conv2D(8, (3,3), activation='relu'))\nmodel.add(layers.BatchNormalization())\nmodel.add(layers.MaxPool2D(2))\n\nmodel.add(layers.Flatten())\nmodel.add(layers.Dense(train_y.shape[1], activation='sigmoid'))\nopt = tf.keras.optimizers.Adam(\n    learning_rate=0.0008,\n    beta_1=0.9,\n    beta_2=0.999,\n    epsilon=1e-07,\n    amsgrad=False,\n    weight_decay=None,\n)\nmodel.compile(optimizer=opt,\n             loss = 'mse',\n             metrics = 'mae')\nmodel.summary()","metadata":{"execution":{"iopub.status.busy":"2023-08-03T13:14:57.976837Z","iopub.execute_input":"2023-08-03T13:14:57.977506Z","iopub.status.idle":"2023-08-03T13:14:58.407132Z","shell.execute_reply.started":"2023-08-03T13:14:57.977428Z","shell.execute_reply":"2023-08-03T13:14:58.40546Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"history = model.fit(train_x, train_y, \n                    epochs=10,\n                    batch_size=512,\n                    validation_split=0.3, \n                    verbose=1,\n                    shuffle=True)","metadata":{"execution":{"iopub.status.busy":"2023-08-03T13:15:06.551533Z","iopub.execute_input":"2023-08-03T13:15:06.55211Z","iopub.status.idle":"2023-08-03T13:58:48.521233Z","shell.execute_reply.started":"2023-08-03T13:15:06.552066Z","shell.execute_reply":"2023-08-03T13:58:48.520001Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"predictions = model.predict(test_x, verbose=1)\n","metadata":{"execution":{"iopub.status.busy":"2023-08-03T14:04:15.275932Z","iopub.execute_input":"2023-08-03T14:04:15.276467Z","iopub.status.idle":"2023-08-03T14:04:15.768722Z","shell.execute_reply.started":"2023-08-03T14:04:15.27643Z","shell.execute_reply":"2023-08-03T14:04:15.766992Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"predictions","metadata":{"execution":{"iopub.status.busy":"2023-08-03T14:04:20.38796Z","iopub.execute_input":"2023-08-03T14:04:20.38879Z","iopub.status.idle":"2023-08-03T14:04:20.400006Z","shell.execute_reply.started":"2023-08-03T14:04:20.388747Z","shell.execute_reply":"2023-08-03T14:04:20.398265Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}