{"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 numpy as np\nimport pandas as pd \nimport matplotlib.pyplot as plt \nimport cv2 as cv\nfrom path import Path\nimport os \nimport glob\nimport tensorflow_hub as hub\nimport os \nimport pydicom as dicom\nfrom pydicom.pixel_data_handlers.util import apply_voi_lut\nimport tensorflow as tf\nfrom tensorflow import keras\nfrom keras import layers\nfrom tqdm import tqdm\nfrom tensorflow.keras.preprocessing.image import load_img, img_to_array\nfrom tensorflow.keras.utils import to_categorical\nfrom pydicom import dcmread\nimport nibabel as nib","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df = pd.read_csv(\"../input/rsna-2022-cervical-spine-fracture-detection/train.csv\")","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_dir='../input/rsna-2022-cervical-spine-fracture-detection/train_images'","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def load_dicom(path):\n    img=dicom.dcmread(path)\n    data=img.pixel_array\n    data=data-np.min(data)\n    if np.max(data) != 0:\n        data=data/np.max(data)\n    data=(data*255).astype(np.uint8)\n    return data","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"trainset=[]\ntrainlabel=[]\ntrainidt=[]\nlimit = 150\nfor i in tqdm(range(len(train_df))): #there are 2019 rows, need much times, so just process 10 rows to test\n    idt=train_df.loc[i,'StudyInstanceUID']\n    \n#     idt2=('00000'+str(idt))[-5:]\n    path=os.path.join(train_dir,idt)   \n    \n    for im in os.listdir(path):\n        \n        \n        dc = dicom.read_file(os.path.join(path,im))\n        if dc.file_meta.TransferSyntaxUID.name =='JPEG Lossless, Non-Hierarchical, First-Order Prediction (Process 14 [Selection Value 1])':\n            continue\n        \n        img=load_dicom(os.path.join(path,im)) \n#         ds = decode(os.path.join(path,im))\n#         print(ds)\n#         ds.decompress(\"pylibjpeg\")\n\n        img=cv.resize(img,(64,64)) \n        image=img_to_array(img)\n        image=image/255.0\n\n        trainset+=[image]\n        cur_label=[]\n        cur_label.append(train_df.loc[i, 'patient_overall'])\n        cur_label.append(train_df.loc[i,'C1'])\n        cur_label.append(train_df.loc[i,'C2'])\n        cur_label.append(train_df.loc[i,'C3'])\n        cur_label.append(train_df.loc[i,'C4'])\n        cur_label.append(train_df.loc[i,'C5'])\n        cur_label.append(train_df.loc[i,'C6'])\n        cur_label.append(train_df.loc[i,'C7'])\n        trainlabel+=[cur_label]\n        trainidt+=[idt]\n    i+=1\n    if i==limit:\n        break","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y=np.array(trainlabel)\nY_train=y\nX_train=np.array(trainset)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_df = ['1.2.826.0.1.3680043.22327', '1.2.826.0.1.3680043.25399', '1.2.826.0.1.3680043.5876']","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_dir='../input/rsna-2022-cervical-spine-fracture-detection/test_images'\ntestset=[]\ntestidt=[]\nfor i in tqdm(range(len(test_df))):\n    idt=test_df[i]\n    path=os.path.join(test_dir,idt)   \n    \n    for im in os.listdir(path):\n        dc = dicom.read_file(os.path.join(path,im))\n        \n        if dc.file_meta.TransferSyntaxUID.name =='JPEG Lossless, Non-Hierarchical, First-Order Prediction (Process 14 [Selection Value 1])':\n            continue\n        img=load_dicom(os.path.join(path,im)) \n\n        img=cv.resize(img,(64,64)) \n        image=img_to_array(img)\n        image=image/255.0\n        testset+=[image]\n        testidt+=[idt]","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_test = np.array(testset)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = keras.models.Sequential()\nmodel.add(keras.layers.Conv2D(filters=64,kernel_size=(4,4),input_shape=(64,64,1),activation='relu',kernel_initializer=\"he_normal\"))\nmodel.add(keras.layers.MaxPooling2D(pool_size=(2,2)))\nmodel.add(keras.layers.BatchNormalization())\nmodel.add(keras.layers.Conv2D(filters=64,kernel_size=(4,4),activation='relu',kernel_initializer=\"he_normal\"))\nmodel.add(keras.layers.MaxPooling2D(pool_size=(2,2)))\nmodel.add(keras.layers.Dropout(0.20))\nmodel.add(keras.layers.BatchNormalization())\nmodel.add(keras.layers.Conv2D(filters=64,kernel_size=(4,4),activation='relu',kernel_initializer=\"he_normal\"))\nmodel.add(keras.layers.MaxPooling2D(pool_size=(2,2)))\nmodel.add(keras.layers.Dropout(0.25))\nmodel.add(keras.layers.BatchNormalization())\nmodel.add(keras.layers.Flatten())\nmodel.add(keras.layers.Dense(100,activation=\"relu\",kernel_initializer=\"he_normal\"))\nmodel.add(keras.layers.Dense(8,\"softmax\"))","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.compile(loss=\"binary_crossentropy\",\n              optimizer = \"RMSprop\",metrics=[\"accuracy\"])\ncallback = keras.callbacks.EarlyStopping(monitor='loss', patience=8)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"hist = model.fit(X_train, Y_train,epochs=100, batch_size=64, verbose=1,callbacks=[callback])","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y_pred=model.predict(X_test)\nresult = pd.DataFrame(columns = train_df.columns, index = range(len(testidt)))\ny_mean = np.mean(y_pred)\nfor i in tqdm(range(len(testidt))):\n    result.loc[i, 'StudyInstanceUID'] = testidt[i]\n    rows = np.int64(y_pred[i]>y_mean)\n    result.loc[i, 'patient_overall'] = rows[0]\n    result.loc[i, 'C1'] = rows[1]\n    result.loc[i, 'C2'] = rows[2]\n    result.loc[i, 'C3'] = rows[3]\n    result.loc[i, 'C4'] = rows[4]\n    result.loc[i, 'C5'] = rows[5]\n    result.loc[i, 'C6'] = rows[6]\n    result.loc[i, 'C7'] = rows[7]","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"means = result[['patient_overall', 'C1', 'C2', 'C3', 'C4', 'C5', 'C6', 'C7']].mean().to_dict()\ntest_df2 = pd.read_csv('../input/rsna-2022-cervical-spine-fracture-detection/test.csv')\ntest_df2['fractured'] = test_df2['prediction_type'].map(means)\n\ntest_df2[['row_id','fractured']].to_csv('submission.csv', index=False, float_format='%.1g')\n","metadata":{},"execution_count":null,"outputs":[]}]}