{"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 os\nimport pandas as pd\nimport numpy as np\nimport time\nimport sklearn\nimport matplotlib as mpl\nimport matplotlib.pyplot as plt\nimport keras\nimport tensorflow as tf\nfrom tensorflow import keras\nfrom sklearn.model_selection import train_test_split\nimport pydicom\nfrom functools import partial\nimport gc\n\n%matplotlib inline\nprint('mission complete')","metadata":{"execution":{"iopub.status.busy":"2023-09-28T08:22:18.812773Z","iopub.execute_input":"2023-09-28T08:22:18.813675Z","iopub.status.idle":"2023-09-28T08:22:18.82594Z","shell.execute_reply.started":"2023-09-28T08:22:18.813633Z","shell.execute_reply":"2023-09-28T08:22:18.824514Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Import library","metadata":{}},{"cell_type":"code","source":"#dcm形式\npath = '/kaggle/input/rsna-2023-abdominal-trauma-detection'\n\ntrain = pd.read_csv(path + '/' + 'train.csv')\ntrain_series_meta = pd.read_csv(path + '/' + 'train_series_meta.csv') \n\ntrain_series_meta.head(2)","metadata":{"execution":{"iopub.status.busy":"2023-09-28T08:22:30.987709Z","iopub.execute_input":"2023-09-28T08:22:30.988136Z","iopub.status.idle":"2023-09-28T08:22:31.032659Z","shell.execute_reply.started":"2023-09-28T08:22:30.988102Z","shell.execute_reply":"2023-09-28T08:22:31.031325Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"patient_id_list = train_series_meta['patient_id'].unique()","metadata":{"execution":{"iopub.status.busy":"2023-09-28T08:22:39.141124Z","iopub.execute_input":"2023-09-28T08:22:39.141754Z","iopub.status.idle":"2023-09-28T08:22:39.155374Z","shell.execute_reply.started":"2023-09-28T08:22:39.141708Z","shell.execute_reply":"2023-09-28T08:22:39.1535Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"temp = train_series_meta[['patient_id', 'aortic_hu']]","metadata":{"execution":{"iopub.status.busy":"2023-09-28T08:22:39.911873Z","iopub.execute_input":"2023-09-28T08:22:39.912898Z","iopub.status.idle":"2023-09-28T08:22:39.927883Z","shell.execute_reply.started":"2023-09-28T08:22:39.912857Z","shell.execute_reply":"2023-09-28T08:22:39.926525Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"index_list = []\nfor patient_id in patient_id_list:\n    temp_1 = temp[temp['patient_id'] == patient_id]['aortic_hu']\n    zero_or_one = np.argmin(temp_1)\n    index = temp_1.index[zero_or_one]\n    index_list.append(index)","metadata":{"execution":{"iopub.status.busy":"2023-09-28T08:22:40.700153Z","iopub.execute_input":"2023-09-28T08:22:40.701515Z","iopub.status.idle":"2023-09-28T08:22:42.298783Z","shell.execute_reply.started":"2023-09-28T08:22:40.701441Z","shell.execute_reply":"2023-09-28T08:22:42.297807Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_series_meta = train_series_meta.iloc[index_list, :]","metadata":{"execution":{"iopub.status.busy":"2023-09-28T08:22:44.753618Z","iopub.execute_input":"2023-09-28T08:22:44.754033Z","iopub.status.idle":"2023-09-28T08:22:44.762681Z","shell.execute_reply.started":"2023-09-28T08:22:44.753997Z","shell.execute_reply":"2023-09-28T08:22:44.761084Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df = pd.merge(train_series_meta, train,\n              how='inner', on='patient_id')\ndf.head(2)","metadata":{"execution":{"iopub.status.busy":"2023-09-28T08:22:48.214229Z","iopub.execute_input":"2023-09-28T08:22:48.214649Z","iopub.status.idle":"2023-09-28T08:22:48.247477Z","shell.execute_reply.started":"2023-09-28T08:22:48.214618Z","shell.execute_reply":"2023-09-28T08:22:48.245843Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"path = '/kaggle/input/rsna-abdominal-trauma-detection-png-pt1/'","metadata":{"execution":{"iopub.status.busy":"2023-09-28T08:22:50.671557Z","iopub.execute_input":"2023-09-28T08:22:50.672042Z","iopub.status.idle":"2023-09-28T08:22:50.67798Z","shell.execute_reply.started":"2023-09-28T08:22:50.672005Z","shell.execute_reply":"2023-09-28T08:22:50.676728Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.hist(df['aortic_hu'], bins = [10 * i for i in np.arange(60)])\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2023-09-28T08:22:53.831557Z","iopub.execute_input":"2023-09-28T08:22:53.831953Z","iopub.status.idle":"2023-09-28T08:22:54.227076Z","shell.execute_reply.started":"2023-09-28T08:22:53.831924Z","shell.execute_reply":"2023-09-28T08:22:54.225911Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(df['aortic_hu'].mean(), '+-', df['aortic_hu'].std())","metadata":{"execution":{"iopub.status.busy":"2023-09-28T08:37:14.930861Z","iopub.execute_input":"2023-09-28T08:37:14.931351Z","iopub.status.idle":"2023-09-28T08:37:14.940171Z","shell.execute_reply.started":"2023-09-28T08:37:14.931314Z","shell.execute_reply":"2023-09-28T08:37:14.939184Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#dcm用\ndir_path = '/kaggle/input/rsna-2023-abdominal-trauma-detection/train_images/'\n\n\ntrain_image_path_list = []\n\n\ntime_sta = time.time()\n\nfor patient_id, series_id in zip(df['patient_id'], df['series_id']):\n    sub_dir_path = dir_path + f'{patient_id}/{series_id}'\n    list_object = os.listdir(sub_dir_path)\n    list_1 = map(lambda x: int(x.split('.')[0]), list_object)\n    list_2 = list(list_1)\n    num = np.min(list_2) + (np.max(list_2) - np.min(list_2))/4\n    image_path = sub_dir_path + f'/{int(num)}.dcm'\n    train_image_path_list.append(image_path)\n            \n\n\n\n#dcm形式用\ndicom_image_data_list = []\nfor image_path in train_image_path_list:\n    image_dicom_data = pydicom.read_file(image_path)\n    dicom_image_data_list.append(image_dicom_data.pixel_array)\n    \n    del image_dicom_data\n\ndicom_image_arrays = []\nindex_list = []\nindex = 0\nfor image_array in dicom_image_data_list:\n    if image_array.shape == (512, 512):\n        dicom_image_arrays.append(image_array)\n        index_list.append(index)\n    index = index + 1\n    \n\ntime_end = time.time()\n\ntim = time_end- time_sta\n\nprint('Process Complete', '\\n', 'PROCESSING TIME :', tim)","metadata":{"execution":{"iopub.status.busy":"2023-09-28T08:39:04.435822Z","iopub.execute_input":"2023-09-28T08:39:04.436343Z","iopub.status.idle":"2023-09-28T08:39:06.223855Z","shell.execute_reply.started":"2023-09-28T08:39:04.4363Z","shell.execute_reply":"2023-09-28T08:39:06.221765Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"len(index_list)","metadata":{"execution":{"iopub.status.busy":"2023-09-28T08:39:11.967067Z","iopub.execute_input":"2023-09-28T08:39:11.968493Z","iopub.status.idle":"2023-09-28T08:39:11.97662Z","shell.execute_reply.started":"2023-09-28T08:39:11.968426Z","shell.execute_reply":"2023-09-28T08:39:11.975198Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_copy = df.copy()\nlabel_data = df_copy.iloc[index_list, :]\nlabel_data.drop(['patient_id', 'series_id', 'aortic_hu', 'incomplete_organ', 'any_injury'], axis = 1, inplace = True)","metadata":{"execution":{"iopub.status.busy":"2023-09-28T08:39:14.151761Z","iopub.execute_input":"2023-09-28T08:39:14.152283Z","iopub.status.idle":"2023-09-28T08:39:14.164188Z","shell.execute_reply.started":"2023-09-28T08:39:14.152224Z","shell.execute_reply":"2023-09-28T08:39:14.162903Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def damage_reviser(organ):\n    temp = label_data[[f'{organ}_healthy', f'{organ}_injury']]\n    list_organ = [0 for _ in range(temp.shape[0])]\n    for index in range(len(list_organ)):\n        series = temp.iloc[index, :]\n        if series[1] == 1:\n            list_organ[index] = 1\n        else:\n            None\n    return list_organ\n\ndef drop_damage_columns(organ):\n    label_data.drop([f'{organ}_healthy', f'{organ}_injury'], axis = 1, inplace = True)","metadata":{"execution":{"iopub.status.busy":"2023-09-28T08:39:19.247141Z","iopub.execute_input":"2023-09-28T08:39:19.24768Z","iopub.status.idle":"2023-09-28T08:39:19.258563Z","shell.execute_reply.started":"2023-09-28T08:39:19.247634Z","shell.execute_reply":"2023-09-28T08:39:19.256764Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"list_bowel = damage_reviser('bowel')\nlist_extravasation = damage_reviser('extravasation')\n\nlabel_data['bowel'] = list_bowel\nlabel_data['extravasation'] = list_extravasation\n\ndrop_damage_columns('bowel')\ndrop_damage_columns('extravasation')","metadata":{"execution":{"iopub.status.busy":"2023-09-28T08:39:21.425194Z","iopub.execute_input":"2023-09-28T08:39:21.425624Z","iopub.status.idle":"2023-09-28T08:39:21.928017Z","shell.execute_reply.started":"2023-09-28T08:39:21.425592Z","shell.execute_reply":"2023-09-28T08:39:21.926753Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"label_data.to_csv('label_data')\nlabel_data.head(3)","metadata":{"execution":{"iopub.status.busy":"2023-09-28T08:39:24.29132Z","iopub.execute_input":"2023-09-28T08:39:24.292785Z","iopub.status.idle":"2023-09-28T08:39:24.32595Z","shell.execute_reply.started":"2023-09-28T08:39:24.292734Z","shell.execute_reply":"2023-09-28T08:39:24.324385Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Resize data from (512, 512) to (256, 256)","metadata":{}},{"cell_type":"code","source":"X_train, X_valid, y_train, y_valid = train_test_split(dicom_image_arrays, label_data, test_size = 0.2, random_state = 89)","metadata":{"execution":{"iopub.status.busy":"2023-09-28T08:48:46.724174Z","iopub.execute_input":"2023-09-28T08:48:46.724704Z","iopub.status.idle":"2023-09-28T08:48:46.736125Z","shell.execute_reply.started":"2023-09-28T08:48:46.724668Z","shell.execute_reply":"2023-09-28T08:48:46.734539Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_train_256 = []\n\ntime_start = time.time()\nfor array in X_train:\n    array = np.array(array)\n    array = array[..., np.newaxis]\n    input_array = tf.image.resize_with_pad(array, 256, 256, antialias = True)\n    input_array = input_array.numpy()\n    X_train_256.append(input_array)\n    del array\n    del input_array\ntime_end = time.time()\nprint('time : ', time_end - time_start)","metadata":{"execution":{"iopub.status.busy":"2023-09-28T08:53:28.042501Z","iopub.execute_input":"2023-09-28T08:53:28.042955Z","iopub.status.idle":"2023-09-28T08:53:44.416733Z","shell.execute_reply.started":"2023-09-28T08:53:28.042923Z","shell.execute_reply":"2023-09-28T08:53:44.415207Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"np.array(X_train_256).shape","metadata":{"execution":{"iopub.status.busy":"2023-09-28T08:53:50.968475Z","iopub.execute_input":"2023-09-28T08:53:50.968866Z","iopub.status.idle":"2023-09-28T08:53:51.311268Z","shell.execute_reply.started":"2023-09-28T08:53:50.968835Z","shell.execute_reply":"2023-09-28T08:53:51.310346Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_train = np.array(X_train)\nX_valid = np.array(X_valid)\nX_train_256 = np.array(X_train_256)\n\nX_train = X_train[..., np.newaxis]\nX_valid = X_valid[..., np.newaxis]\n\ny_train = np.array(y_train)\ny_valid = np.array(y_valid)\n\ny_train_1 = y_train[:, -1].reshape(-1, 1)\ny_train_2 = y_train[:, -2].reshape(-1, 1)\ny_train_3 = y_train[:, 0:3].reshape(-1, 3)\ny_train_4 = y_train[:, 3:6].reshape(-1, 3)\ny_train_5 = y_train[:, 6:9].reshape(-1, 3)","metadata":{"execution":{"iopub.status.busy":"2023-09-28T08:54:01.827433Z","iopub.execute_input":"2023-09-28T08:54:01.827836Z","iopub.status.idle":"2023-09-28T08:54:03.243687Z","shell.execute_reply.started":"2023-09-28T08:54:01.827806Z","shell.execute_reply":"2023-09-28T08:54:03.24245Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"np.save('X_train', X_train)\nnp.save('X_valid', X_valid)\nnp.save('y_train', y_train)\nnp.save('y_valid', y_valid)\nnp.save('X_train_256', X_train_256)","metadata":{"execution":{"iopub.status.busy":"2023-09-28T08:54:10.414439Z","iopub.execute_input":"2023-09-28T08:54:10.414948Z","iopub.status.idle":"2023-09-28T08:54:14.579572Z","shell.execute_reply.started":"2023-09-28T08:54:10.414911Z","shell.execute_reply":"2023-09-28T08:54:14.577613Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Build Metrics","metadata":{}},{"cell_type":"markdown","source":"# Build Model","metadata":{}},{"cell_type":"code","source":"input = keras.layers.Input(shape=(X_train.shape[1:]))\n\nconv_layer = partial(keras.layers.Conv2D, \n                     kernel_size = 3, activation = 'relu', padding = 'SAME')\ndense_layer = partial(keras.layers.Dense,\n                     activation = 'elu', kernel_initializer = 'he_normal')\n\n# Encoder\nconv1 = conv_layer(filters=32)(input)\nconv2 = conv_layer(filters=32)(conv1)\npool1 = keras.layers.MaxPooling2D(2)(conv2)\ndropout1 = keras.layers.Dropout(0.25)(pool1)\n\nconv3 = conv_layer(filters=64)(dropout1)\nconv4 = conv_layer(filters=64)(conv3)\npool2 = keras.layers.MaxPooling2D(2)(conv4)\ndropout2 = keras.layers.Dropout(0.25)(pool2)\n\nflat = keras.layers.Flatten()(dropout2)\ndense = dense_layer(units=128)(flat)\nbn = keras.layers.BatchNormalization()(dense)\ndropout = keras.layers.Dropout(0.5)(bn)\n\n# Output\noutput_bowel = keras.layers.Dense(1, activation='sigmoid', name='output_bowel')(dropout)\noutput_extravasation = keras.layers.Dense(1, activation='sigmoid', name='output_extravasation')(dropout)\noutput_kidney = keras.layers.Dense(3, activation='softmax', name='output_kidney')(dropout)\noutput_liver = keras.layers.Dense(3, activation='softmax', name='output_liver')(dropout)\noutput_spleen = keras.layers.Dense(3, activation='softmax', name='output_spleen')(dropout)\n\nmodel = keras.models.Model(input, [output_bowel, output_extravasation, output_kidney, output_liver, output_spleen])\n\noptimizer = keras.optimizers.Nadam(learning_rate=0.00014)\nloss = {\n    'output_bowel':tf.keras.losses.BinaryCrossentropy(label_smoothing=0.05),\n    'output_extravasation':tf.keras.losses.BinaryCrossentropy(label_smoothing=0.05),\n    'output_liver':tf.keras.losses.CategoricalCrossentropy(label_smoothing=0.05),\n    'output_kidney':tf.keras.losses.CategoricalCrossentropy(label_smoothing=0.05),\n    'output_spleen':tf.keras.losses.CategoricalCrossentropy(label_smoothing=0.05),\n        }\nmodel.compile(loss=loss, optimizer=optimizer)","metadata":{"execution":{"iopub.status.busy":"2023-09-28T08:54:42.286333Z","iopub.execute_input":"2023-09-28T08:54:42.286815Z","iopub.status.idle":"2023-09-28T08:54:45.43412Z","shell.execute_reply.started":"2023-09-28T08:54:42.286782Z","shell.execute_reply":"2023-09-28T08:54:45.43248Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.summary()","metadata":{"execution":{"iopub.status.busy":"2023-09-28T08:20:52.965791Z","iopub.status.idle":"2023-09-28T08:20:52.96636Z","shell.execute_reply.started":"2023-09-28T08:20:52.966151Z","shell.execute_reply":"2023-09-28T08:20:52.96617Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"early_stopping_cb = keras.callbacks.EarlyStopping(patience = 10)\nmodel_checkpoint_cb = keras.callbacks.ModelCheckpoint('my_model.h5', save_best_only = True)\nrun_index = 1\nrun_logdir = os.path.join(os.curdir, 'my_classifier',  \"run_{:03d}\".format(run_index))\ntensorboard_cb = keras.callbacks.TensorBoard(run_logdir)\n\ncallbacks = [early_stopping_cb, tensorboard_cb, model_checkpoint_cb]","metadata":{"execution":{"iopub.status.busy":"2023-09-28T08:54:49.9515Z","iopub.execute_input":"2023-09-28T08:54:49.951909Z","iopub.status.idle":"2023-09-28T08:54:49.959985Z","shell.execute_reply.started":"2023-09-28T08:54:49.951878Z","shell.execute_reply":"2023-09-28T08:54:49.958537Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.fit(X_train, \n          {'output_bowel':y_train_1,\n           'output_extravasation':y_train_2,\n           'output_kidney':y_train_3,\n           'output_liver':y_train_4,\n           'output_spleen':y_train_5},\n          epochs = 1,\n          callbacks = callbacks)","metadata":{"execution":{"iopub.status.busy":"2023-09-28T08:54:56.227339Z","iopub.execute_input":"2023-09-28T08:54:56.227755Z","iopub.status.idle":"2023-09-28T09:34:29.600418Z","shell.execute_reply.started":"2023-09-28T08:54:56.227724Z","shell.execute_reply":"2023-09-28T09:34:29.598594Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.save('Unet.keras')","metadata":{"execution":{"iopub.status.busy":"2023-09-28T09:34:29.60386Z","iopub.execute_input":"2023-09-28T09:34:29.604939Z","iopub.status.idle":"2023-09-28T09:34:32.843815Z","shell.execute_reply.started":"2023-09-28T09:34:29.604897Z","shell.execute_reply":"2023-09-28T09:34:32.842333Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = keras.models.load_model('/kaggle/working/Unet.keras')","metadata":{"execution":{"iopub.status.busy":"2023-09-28T09:35:36.180335Z","iopub.execute_input":"2023-09-28T09:35:36.181909Z","iopub.status.idle":"2023-09-28T09:35:46.582985Z","shell.execute_reply.started":"2023-09-28T09:35:36.181864Z","shell.execute_reply":"2023-09-28T09:35:46.581749Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_train_256.shape[1:]","metadata":{"execution":{"iopub.status.busy":"2023-09-28T09:49:40.54152Z","iopub.execute_input":"2023-09-28T09:49:40.542458Z","iopub.status.idle":"2023-09-28T09:49:40.551404Z","shell.execute_reply.started":"2023-09-28T09:49:40.542409Z","shell.execute_reply":"2023-09-28T09:49:40.550075Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"input_256 = keras.layers.Input(shape=(X_train_256.shape[1:]))\n\nconv_layer = partial(keras.layers.Conv2D, \n                     kernel_size = 3, activation = 'relu', padding = 'SAME')\ndense_layer = partial(keras.layers.Dense,\n                     activation = 'elu', kernel_initializer = 'he_normal')\n\n# Encoder\nconv1 = conv_layer(filters=32)(input_256)\nconv2 = conv_layer(filters=32)(conv1)\npool1 = keras.layers.MaxPooling2D(2)(conv2)\ndropout1 = keras.layers.Dropout(0.25)(pool1)\n\nconv3 = conv_layer(filters=64)(dropout1)\nconv4 = conv_layer(filters=64)(conv3)\npool2 = keras.layers.MaxPooling2D(2)(conv4)\ndropout2 = keras.layers.Dropout(0.25)(pool2)\n\nflat = keras.layers.Flatten()(dropout2)\ndense = dense_layer(units=128)(flat)\nbn = keras.layers.BatchNormalization()(dense)\ndropout = keras.layers.Dropout(0.5)(bn)\n\n# Output\noutput_bowel = keras.layers.Dense(1, activation='sigmoid', name='output_bowel')(dropout)\noutput_extravasation = keras.layers.Dense(1, activation='sigmoid', name='output_extravasation')(dropout)\noutput_kidney = keras.layers.Dense(3, activation='softmax', name='output_kidney')(dropout)\noutput_liver = keras.layers.Dense(3, activation='softmax', name='output_liver')(dropout)\noutput_spleen = keras.layers.Dense(3, activation='softmax', name='output_spleen')(dropout)\n\nmodel_256 = keras.models.Model(input_256, [output_bowel, output_extravasation, output_kidney, output_liver, output_spleen])\n\noptimizer = keras.optimizers.Nadam(learning_rate=0.00014)\nloss = {\n    'output_bowel':tf.keras.losses.BinaryCrossentropy(label_smoothing=0.05),\n    'output_extravasation':tf.keras.losses.BinaryCrossentropy(label_smoothing=0.05),\n    'output_liver':tf.keras.losses.CategoricalCrossentropy(label_smoothing=0.05),\n    'output_kidney':tf.keras.losses.CategoricalCrossentropy(label_smoothing=0.05),\n    'output_spleen':tf.keras.losses.CategoricalCrossentropy(label_smoothing=0.05),\n        }\nmodel_256.compile(loss=loss, optimizer=optimizer)","metadata":{"execution":{"iopub.status.busy":"2023-09-28T09:50:52.714994Z","iopub.execute_input":"2023-09-28T09:50:52.715484Z","iopub.status.idle":"2023-09-28T09:50:53.689113Z","shell.execute_reply.started":"2023-09-28T09:50:52.715448Z","shell.execute_reply":"2023-09-28T09:50:53.687957Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.summary()","metadata":{"execution":{"iopub.status.busy":"2023-09-28T08:20:52.974983Z","iopub.status.idle":"2023-09-28T08:20:52.97562Z","shell.execute_reply.started":"2023-09-28T08:20:52.97542Z","shell.execute_reply":"2023-09-28T08:20:52.97544Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model_256.fit(X_train_256, \n          {'output_bowel':y_train_1,\n           'output_extravasation':y_train_2,\n           'output_kidney':y_train_3,\n           'output_liver':y_train_4,\n           'output_spleen':y_train_5},\n          epochs = 1,\n          callbacks = callbacks)","metadata":{"execution":{"iopub.status.busy":"2023-09-28T09:50:56.158444Z","iopub.execute_input":"2023-09-28T09:50:56.158984Z","iopub.status.idle":"2023-09-28T10:01:25.357155Z","shell.execute_reply.started":"2023-09-28T09:50:56.15894Z","shell.execute_reply":"2023-09-28T10:01:25.355905Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.save('Unet_256')","metadata":{"execution":{"iopub.status.busy":"2023-09-28T10:01:38.877345Z","iopub.execute_input":"2023-09-28T10:01:38.877994Z","iopub.status.idle":"2023-09-28T10:01:43.198437Z","shell.execute_reply.started":"2023-09-28T10:01:38.877943Z","shell.execute_reply":"2023-09-28T10:01:43.19712Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.subplot(1, 2, 1)\nplt.imshow(X_train[0])\nplt.subplot(1, 2, 2)\nplt.imshow(X_train_256[0])","metadata":{"execution":{"iopub.status.busy":"2023-09-28T10:01:46.243911Z","iopub.execute_input":"2023-09-28T10:01:46.244455Z","iopub.status.idle":"2023-09-28T10:01:46.772937Z","shell.execute_reply.started":"2023-09-28T10:01:46.244413Z","shell.execute_reply":"2023-09-28T10:01:46.771089Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Prediction","metadata":{}},{"cell_type":"code","source":"test_path = '/kaggle/input/rsna-2023-abdominal-trauma-detection/test_images'\nnum_list = os.listdir(test_path)\nnum_list = sorted(num_list)\n\ntest_image_path_list = []\n\n\nfor patient_id in num_list:\n    test_dir_path = test_path + f'/{patient_id}'\n    list_object = os.listdir(test_dir_path)\n    list_object = sorted(list_object)\n    for sub_dir_id in list_object:\n        sub_dir_path = test_dir_path + f'/{sub_dir_id}'\n        dicom_num_list = os.listdir(sub_dir_path)\n        dicom_num_list = sorted(dicom_num_list)\n        for dicom_id in dicom_num_list:\n            image_path = sub_dir_path + f'/{dicom_id}'\n            test_image_path_list.append(image_path)","metadata":{"execution":{"iopub.status.busy":"2023-09-28T10:03:45.371302Z","iopub.execute_input":"2023-09-28T10:03:45.371901Z","iopub.status.idle":"2023-09-28T10:03:45.401191Z","shell.execute_reply.started":"2023-09-28T10:03:45.371857Z","shell.execute_reply":"2023-09-28T10:03:45.400183Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import gc\n\ndicom_image_test_list = []\nfor image_path in test_image_path_list:\n    image_dicom_data = pydicom.read_file(image_path)\n    array = image_dicom_data.pixel_array\n    array = array[..., np.newaxis]\n    if array.shape == (512, 512, 1):\n        dicom_image_test_list.append(array)\n    else:\n        resized_array = tf.image.resize_with_pad(array, 512, 512, antialias=True)\n        dicom_image_test_list.append(resized_array)\n\n    # image_dicom_data と array のメモリ解放\n    del image_dicom_data\n    del array\n\n    # ガベージコレクションの実行\n    gc.collect()","metadata":{"execution":{"iopub.status.busy":"2023-09-28T10:03:46.015831Z","iopub.execute_input":"2023-09-28T10:03:46.016399Z","iopub.status.idle":"2023-09-28T10:03:49.045754Z","shell.execute_reply.started":"2023-09-28T10:03:46.016356Z","shell.execute_reply":"2023-09-28T10:03:49.044719Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.summary()","metadata":{"execution":{"iopub.status.busy":"2023-09-28T10:03:49.047979Z","iopub.execute_input":"2023-09-28T10:03:49.048748Z","iopub.status.idle":"2023-09-28T10:03:49.133007Z","shell.execute_reply.started":"2023-09-28T10:03:49.048705Z","shell.execute_reply":"2023-09-28T10:03:49.131801Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_image_path_list","metadata":{"execution":{"iopub.status.busy":"2023-09-28T10:03:49.134605Z","iopub.execute_input":"2023-09-28T10:03:49.135075Z","iopub.status.idle":"2023-09-28T10:03:49.14731Z","shell.execute_reply.started":"2023-09-28T10:03:49.135031Z","shell.execute_reply":"2023-09-28T10:03:49.145785Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"dicom_image_test_list = []\nfor image_path in test_image_path_list:\n    image_dicom_data = pydicom.read_file(image_path)\n    array = image_dicom_data.pixel_array\n    array = array[..., np.newaxis]\n    if array.shape == (512, 512, 1):\n        dicom_image_test_list.append(array)\n    else:\n        resized_array = tf.image.resize_with_pad(array, 512, 512, antialias = True)\n        dicom_image_test_list.append(resized_array)\n\nX_test = np.array(dicom_image_test_list)\n\nanswer = model.predict(X_test)","metadata":{"execution":{"iopub.status.busy":"2023-09-28T10:03:49.150788Z","iopub.execute_input":"2023-09-28T10:03:49.151312Z","iopub.status.idle":"2023-09-28T10:03:50.13303Z","shell.execute_reply.started":"2023-09-28T10:03:49.151259Z","shell.execute_reply":"2023-09-28T10:03:50.131646Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission =pd.DataFrame({})\n\nsubmission['patient_id'] = num_list\nsubmission['bowel_healthy'] = 1 - answer[0]\nsubmission['bowel_injury'] = answer[0]\nsubmission['extravasation_healthy'] = 1 - answer[1]\nsubmission['extravasation_injury'] = answer[1]\nsubmission[['kidney_healthy', 'kidney_low', 'kidney_high']] = answer[2]\nsubmission[['liver_healthy', 'liver_low', 'liver_high']] = answer[3]\nsubmission[['spleen_healthy', 'spleen_low', 'spleen_high']] = answer[4]","metadata":{"execution":{"iopub.status.busy":"2023-09-28T10:03:50.135736Z","iopub.execute_input":"2023-09-28T10:03:50.136135Z","iopub.status.idle":"2023-09-28T10:03:50.153677Z","shell.execute_reply.started":"2023-09-28T10:03:50.136099Z","shell.execute_reply":"2023-09-28T10:03:50.152077Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission = pd.DataFrame(submission)","metadata":{"execution":{"iopub.status.busy":"2023-09-28T10:03:52.372481Z","iopub.execute_input":"2023-09-28T10:03:52.373515Z","iopub.status.idle":"2023-09-28T10:03:52.380672Z","shell.execute_reply.started":"2023-09-28T10:03:52.373474Z","shell.execute_reply":"2023-09-28T10:03:52.379099Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission","metadata":{"execution":{"iopub.status.busy":"2023-09-28T10:03:52.60774Z","iopub.execute_input":"2023-09-28T10:03:52.608195Z","iopub.status.idle":"2023-09-28T10:03:52.629215Z","shell.execute_reply.started":"2023-09-28T10:03:52.608163Z","shell.execute_reply":"2023-09-28T10:03:52.628316Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission.to_csv('submission.csv', index = False)","metadata":{"execution":{"iopub.status.busy":"2023-09-28T10:03:53.320296Z","iopub.execute_input":"2023-09-28T10:03:53.320703Z","iopub.status.idle":"2023-09-28T10:03:53.328939Z","shell.execute_reply.started":"2023-09-28T10:03:53.320673Z","shell.execute_reply":"2023-09-28T10:03:53.327419Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}