{"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 tensorflow.keras\nimport os\nimport cv2\nimport matplotlib.pyplot as plt\nfrom tensorflow.keras.utils import to_categorical\nfrom tensorflow.keras.regularizers import L2 as l2\nfrom tensorflow.keras.layers import Activation,ZeroPadding2D,AveragePooling2D,Dense,Flatten,Add,Dropout,Conv2D,Input,MaxPooling2D,BatchNormalization\nfrom tensorflow.keras.optimizers import Adam\nfrom tensorflow.keras.models import Sequential\n\nimport pydicom\nfrom pydicom.pixel_data_handlers.util import apply_voi_lut\nfrom tqdm.notebook import tqdm\nfrom tensorflow.keras.preprocessing.image import load_img, img_to_array","metadata":{"execution":{"iopub.status.busy":"2021-12-08T06:18:17.893186Z","iopub.execute_input":"2021-12-08T06:18:17.893491Z","iopub.status.idle":"2021-12-08T06:18:17.901125Z","shell.execute_reply.started":"2021-12-08T06:18:17.893442Z","shell.execute_reply":"2021-12-08T06:18:17.900291Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_name=os.listdir('../input/rsna-miccai-brain-tumor-radiogenomic-classification/train')\ntest_name=os.listdir('../input/rsna-miccai-brain-tumor-radiogenomic-classification/test')","metadata":{"execution":{"iopub.status.busy":"2021-12-08T07:38:45.132125Z","iopub.execute_input":"2021-12-08T07:38:45.132397Z","iopub.status.idle":"2021-12-08T07:38:45.141296Z","shell.execute_reply.started":"2021-12-08T07:38:45.132367Z","shell.execute_reply":"2021-12-08T07:38:45.14059Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"labels=pd.read_csv('../input/rsna-miccai-brain-tumor-radiogenomic-classification/train_labels.csv')\nlabels","metadata":{"execution":{"iopub.status.busy":"2021-12-08T05:56:10.519974Z","iopub.execute_input":"2021-12-08T05:56:10.520412Z","iopub.status.idle":"2021-12-08T05:56:10.574753Z","shell.execute_reply.started":"2021-12-08T05:56:10.520376Z","shell.execute_reply":"2021-12-08T05:56:10.573836Z"},"collapsed":true,"jupyter":{"outputs_hidden":true},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# sample=pd.read_csv('../input/rsna-miccai-brain-tumor-radiogenomic-classification/sample_submission.csv')\n# sample","metadata":{"execution":{"iopub.status.busy":"2021-12-08T05:56:13.218668Z","iopub.execute_input":"2021-12-08T05:56:13.219395Z","iopub.status.idle":"2021-12-08T05:56:13.24113Z","shell.execute_reply.started":"2021-12-08T05:56:13.219357Z","shell.execute_reply":"2021-12-08T05:56:13.240394Z"},"collapsed":true,"jupyter":{"outputs_hidden":true},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def load_dicom(path):\n    dicom=pydicom.read_file(path)\n    data=dicom.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\n","metadata":{"execution":{"iopub.status.busy":"2021-12-08T07:31:45.116702Z","iopub.execute_input":"2021-12-08T07:31:45.116972Z","iopub.status.idle":"2021-12-08T07:31:45.122877Z","shell.execute_reply.started":"2021-12-08T07:31:45.116944Z","shell.execute_reply":"2021-12-08T07:31:45.121558Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# path0='../input/rsna-miccai-brain-tumor-radiogenomic-classification/train/00000/T1wCE/Image-1.dcm'\n# img1=load_dicom(path0)\n# img2=cv2.resize(img1,(224,224))\n# print(img1.shape)\n# print(img2.shape) ","metadata":{"execution":{"iopub.status.busy":"2021-12-07T12:53:30.447025Z","iopub.execute_input":"2021-12-07T12:53:30.447367Z","iopub.status.idle":"2021-12-07T12:53:30.475187Z","shell.execute_reply.started":"2021-12-07T12:53:30.447336Z","shell.execute_reply":"2021-12-07T12:53:30.47404Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_dir='../input/rsna-miccai-brain-tumor-radiogenomic-classification/train'\ntrainset=[]\ntrainlabel=[]\ntrainidt=[]\nfor i in tqdm(range(len(labels))):\n    idt=labels.loc[i,'BraTS21ID']\n    idt2=('00000'+str(idt))[-5:] \n    path=os.path.join(train_dir,idt2,'T1wCE')              \n    for im in os.listdir(path):\n        img=load_dicom(os.path.join(path,im))\n        img=cv2.resize(img,(9,9)) \n        image=img_to_array(img)\n        image=image/255.0\n        trainset+=[image]\n        trainlabel+=[labels.loc[i,'MGMT_value']]\n        trainidt+=[idt]\n    \n","metadata":{"execution":{"iopub.status.busy":"2021-12-07T14:54:11.434151Z","iopub.execute_input":"2021-12-07T14:54:11.434492Z","iopub.status.idle":"2021-12-07T15:08:56.162207Z","shell.execute_reply.started":"2021-12-07T14:54:11.434446Z","shell.execute_reply":"2021-12-07T15:08:56.159725Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_dir='../input/rsna-miccai-brain-tumor-radiogenomic-classification/test'\ntestset=[]\ntestidt=[]\nfor i in tqdm(range(len(sample))):\n    idt=sample.loc[i,'BraTS21ID']\n    idt2=('00000'+str(idt))[-5:]\n    path=os.path.join(test_dir,idt2,'T1wCE')               \n    for im in os.listdir(path):   \n        img=load_dicom(os.path.join(path,im))\n        img=cv2.resize(img,(9,9)) \n        image=img_to_array(img)\n        image=image/255.0\n        testset+=[image]\n        testidt+=[idt]\n\n#1 2 3 4 5\n#->10000 01000 00100 00010#one hot encoding\n        \nfrom tensorflow.keras.utils import to_categorical\ny0=np.array(trainlabel)\nY_train=to_categorical(y0)\nX_train=np.array(trainset)\nX_test=np.array(testset)\n","metadata":{"execution":{"iopub.status.busy":"2021-12-07T15:08:56.16442Z","iopub.execute_input":"2021-12-07T15:08:56.164954Z","iopub.status.idle":"2021-12-07T15:11:15.748688Z","shell.execute_reply.started":"2021-12-07T15:08:56.16491Z","shell.execute_reply":"2021-12-07T15:11:15.747717Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = Sequential()\nmodel.add(Conv2D(64,(4,4),input_shape = (9,9,1),activation = 'relu'))\nmodel.add(Conv2D(32,(2,2),activation = 'relu'))\nmodel.add(Conv2D(64,(2,2),activation = 'relu'))\nmodel.add(Conv2D(32,(2,2),activation = 'relu'))\nmodel.add(Dropout(0.2))\nmodel.add(Flatten())\nmodel.add(Dense(32, activation='relu'))\nmodel.add(Dense(8, activation='relu'))\nmodel.add(Dense(2, activation='softmax'))\nmodel.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy'])","metadata":{"execution":{"iopub.status.busy":"2021-12-07T15:11:15.750434Z","iopub.execute_input":"2021-12-07T15:11:15.750778Z","iopub.status.idle":"2021-12-07T15:11:15.856308Z","shell.execute_reply.started":"2021-12-07T15:11:15.750736Z","shell.execute_reply":"2021-12-07T15:11:15.855339Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"history=model.fit(X_train[500:],Y_train[500:],epochs=100) #trains the model on train dataset","metadata":{"execution":{"iopub.status.busy":"2021-12-07T15:11:15.859138Z","iopub.execute_input":"2021-12-07T15:11:15.859532Z","iopub.status.idle":"2021-12-07T15:35:36.682886Z","shell.execute_reply.started":"2021-12-07T15:11:15.859491Z","shell.execute_reply":"2021-12-07T15:35:36.681899Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"PathtoPickle1 = \"../input/picklefiles/X_trainfull_FLAIR.pickle\"\nPathtoPickle2 = \"../input/picklefiles/Y_trainfull_FLAIR.pickle\"\nimport pickle\nwith open(PathtoPickle1, 'rb') as f:\n    X_train=pickle.load(f)\n    f.close()\n\nwith open(PathtoPickle2, 'rb') as f:\n    Y_train=pickle.load(f)\n    f.close()","metadata":{"execution":{"iopub.status.busy":"2021-12-08T07:43:42.903396Z","iopub.execute_input":"2021-12-08T07:43:42.903996Z","iopub.status.idle":"2021-12-08T07:43:42.923783Z","shell.execute_reply.started":"2021-12-08T07:43:42.903959Z","shell.execute_reply":"2021-12-08T07:43:42.923056Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Predicted = FlairModel.predict(X_train[0:500])\nTrueValues=0\nfor i in range(0,500):\n    if(np.argmax(Predicted[i])==np.argmax(Y_train[i])):\n        TrueValues+=1\nprint(TrueValues/500)","metadata":{"execution":{"iopub.status.busy":"2021-12-08T07:43:45.502323Z","iopub.execute_input":"2021-12-08T07:43:45.503176Z","iopub.status.idle":"2021-12-08T07:43:45.56387Z","shell.execute_reply.started":"2021-12-08T07:43:45.503128Z","shell.execute_reply":"2021-12-08T07:43:45.563172Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.save('./model_T1wCE.h5')","metadata":{"execution":{"iopub.status.busy":"2021-12-07T15:36:15.650946Z","iopub.execute_input":"2021-12-07T15:36:15.65171Z","iopub.status.idle":"2021-12-07T15:36:15.705718Z","shell.execute_reply.started":"2021-12-07T15:36:15.651677Z","shell.execute_reply":"2021-12-07T15:36:15.704767Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.load_weights(\"../input/model-tiwceh5/model_t1wce.h5\")","metadata":{"execution":{"iopub.status.busy":"2021-12-07T12:24:11.215256Z","iopub.execute_input":"2021-12-07T12:24:11.215867Z","iopub.status.idle":"2021-12-07T12:24:11.280784Z","shell.execute_reply.started":"2021-12-07T12:24:11.21583Z","shell.execute_reply":"2021-12-07T12:24:11.279749Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# End of the Code","metadata":{}},{"cell_type":"code","source":"","metadata":{"execution":{"iopub.status.busy":"2021-11-29T11:09:41.564688Z","iopub.execute_input":"2021-11-29T11:09:41.565321Z","iopub.status.idle":"2021-11-29T11:09:41.623609Z","shell.execute_reply.started":"2021-11-29T11:09:41.565285Z","shell.execute_reply":"2021-11-29T11:09:41.622838Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Predicted[0:100]","metadata":{"execution":{"iopub.status.busy":"2021-11-29T10:44:46.583213Z","iopub.execute_input":"2021-11-29T10:44:46.583956Z","iopub.status.idle":"2021-11-29T10:44:46.59407Z","shell.execute_reply.started":"2021-11-29T10:44:46.583919Z","shell.execute_reply":"2021-11-29T10:44:46.592361Z"},"collapsed":true,"jupyter":{"outputs_hidden":true},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# trainlabel[0:1000]","metadata":{"execution":{"iopub.status.busy":"2021-11-29T10:47:36.405527Z","iopub.execute_input":"2021-11-29T10:47:36.406256Z","iopub.status.idle":"2021-11-29T10:47:36.432387Z","shell.execute_reply.started":"2021-11-29T10:47:36.406217Z","shell.execute_reply":"2021-11-29T10:47:36.431684Z"},"collapsed":true,"jupyter":{"outputs_hidden":true},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Y_train[0:100]","metadata":{"execution":{"iopub.status.busy":"2021-11-29T10:44:55.822202Z","iopub.execute_input":"2021-11-29T10:44:55.822468Z","iopub.status.idle":"2021-11-29T10:44:55.834165Z","shell.execute_reply.started":"2021-11-29T10:44:55.822439Z","shell.execute_reply":"2021-11-29T10:44:55.833198Z"},"collapsed":true,"jupyter":{"outputs_hidden":true},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import pickle\nwith open('X_trainfull_FLAIR.pickle', 'wb') as f:\n    pickle.dump(X_train, f)\n    f.close()","metadata":{"execution":{"iopub.status.busy":"2021-12-07T13:58:59.003661Z","iopub.execute_input":"2021-12-07T13:58:59.003995Z","iopub.status.idle":"2021-12-07T13:58:59.067965Z","shell.execute_reply.started":"2021-12-07T13:58:59.003947Z","shell.execute_reply":"2021-12-07T13:58:59.066577Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import pickle\nwith open('Y_trainfull_FLAIR.pickle', 'wb') as f:\n    pickle.dump(Y_train, f)\n    f.close()","metadata":{"execution":{"iopub.status.busy":"2021-12-07T13:59:00.872907Z","iopub.execute_input":"2021-12-07T13:59:00.873417Z","iopub.status.idle":"2021-12-07T13:59:00.881336Z","shell.execute_reply.started":"2021-12-07T13:59:00.873383Z","shell.execute_reply":"2021-12-07T13:59:00.880136Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# filef= open('Y_trainfull.pickle','rb')\n# XER = pickle.load(filef)","metadata":{"execution":{"iopub.status.busy":"2021-12-07T12:44:57.34775Z","iopub.execute_input":"2021-12-07T12:44:57.348085Z","iopub.status.idle":"2021-12-07T12:44:57.356133Z","shell.execute_reply.started":"2021-12-07T12:44:57.34804Z","shell.execute_reply":"2021-12-07T12:44:57.353533Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# len(XER)","metadata":{"execution":{"iopub.status.busy":"2021-12-07T12:44:58.409246Z","iopub.execute_input":"2021-12-07T12:44:58.410124Z","iopub.status.idle":"2021-12-07T12:44:58.417536Z","shell.execute_reply.started":"2021-12-07T12:44:58.41009Z","shell.execute_reply":"2021-12-07T12:44:58.416492Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# XER","metadata":{"execution":{"iopub.status.busy":"2021-12-07T12:45:03.583319Z","iopub.execute_input":"2021-12-07T12:45:03.583637Z","iopub.status.idle":"2021-12-07T12:45:03.591256Z","shell.execute_reply.started":"2021-12-07T12:45:03.583608Z","shell.execute_reply":"2021-12-07T12:45:03.590147Z"},"collapsed":true,"jupyter":{"outputs_hidden":true},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# len(X_train)","metadata":{"execution":{"iopub.status.busy":"2021-12-07T12:36:34.442633Z","iopub.execute_input":"2021-12-07T12:36:34.44296Z","iopub.status.idle":"2021-12-07T12:36:34.451275Z","shell.execute_reply.started":"2021-12-07T12:36:34.442928Z","shell.execute_reply":"2021-12-07T12:36:34.450139Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def DefineBasicModel():\n    model = Sequential()\n    model.add(Conv2D(64,(4,4),input_shape = (9,9,1),activation = 'relu'))\n    model.add(Conv2D(32,(2,2),activation = 'relu'))\n    model.add(Conv2D(64,(2,2),activation = 'relu'))\n    model.add(Conv2D(32,(2,2),activation = 'relu'))\n    model.add(Dropout(0.2))\n    model.add(Flatten())\n    model.add(Dense(32, activation='relu'))\n    model.add(Dense(8, activation='relu'))\n    model.add(Dense(2, activation='softmax'))\n    model.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy'])\n    return model\n","metadata":{"execution":{"iopub.status.busy":"2021-12-08T05:56:35.297051Z","iopub.execute_input":"2021-12-08T05:56:35.297305Z","iopub.status.idle":"2021-12-08T05:56:35.307332Z","shell.execute_reply.started":"2021-12-08T05:56:35.297278Z","shell.execute_reply":"2021-12-08T05:56:35.306557Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"FlairModel = DefineBasicModel()\nFlairModel.load_weights('../input/trainedmodelweights/model_FLAIR (1).h5')\n\nT1wModel = DefineBasicModel()\nT1wModel.load_weights('../input/trainedmodelweights/model_T1w.h5')\n\nT1wCEModel = DefineBasicModel()\nT1wCEModel.load_weights('../input/trainedmodelweights/model_T1wCE (2).h5')\n\nT2wModel = DefineBasicModel()\nT2wModel.load_weights('../input/trainedmodelweights/model_T2w.h5')\n\ndef load_dicom(path):\n    dicom=pydicom.read_file(path)\n    data=dicom.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\n\nFinalPrediction=[]\ntrain_dir='../input/rsna-miccai-brain-tumor-radiogenomic-classification/train'\ntrainset=[]\ntrainlabel=[]\ntrainidt=[]\nfor i in tqdm(range(10)):\n    FinalCount=0\n    idt=labels.loc[i,'BraTS21ID']\n    idt2=('00000'+str(idt))[-5:] \n    path=os.path.join(train_dir,idt2,'FLAIR')\n    Count=0\n    for im in os.listdir(path):\n        img=load_dicom(os.path.join(path,im))\n        img=cv2.resize(img,(9,9)) \n        image=img_to_array(img)\n        image=image/255.0\n        Currimg = np.array([image])\n        Pred = FlairModel.predict(Currimg) \n        if(np.argmax(Pred)==0):\n            Count-=1\n        else:\n            Count+=1\n#         trainset+=[image]\n#         trainlabel+=[labels.loc[i,'MGMT_value']]\n#         trainidt+=[idt]\n    if(Count>0):\n        FinalCount+=1\n    else:\n        FinalCount-=1\n        \n    \n    path=os.path.join(train_dir,idt2,'T1w')\n    Count=0\n    for im in os.listdir(path):\n        img=load_dicom(os.path.join(path,im))\n        img=cv2.resize(img,(9,9)) \n        image=img_to_array(img)\n        image=image/255.0\n        Currimg = np.array([image])\n        Pred = T1wModel.predict(Currimg) \n        if(np.argmax(Pred)==0):\n            Count-=1\n        else:\n            Count+=1\n#         trainset+=[image]\n#         trainlabel+=[labels.loc[i,'MGMT_value']]\n#         trainidt+=[idt]\n    if(Count>0):\n        FinalCount+=1\n    else:\n        FinalCount-=1\n    \n    path=os.path.join(train_dir,idt2,'T1wCE')\n    Count=0\n    for im in os.listdir(path):\n        img=load_dicom(os.path.join(path,im))\n        img=cv2.resize(img,(9,9)) \n        image=img_to_array(img)\n        image=image/255.0\n        Currimg = np.array([image])\n        Pred = T1wCEModel.predict(Currimg) \n        if(np.argmax(Pred)==0):\n            Count-=1\n        else:\n            Count+=1\n#         trainset+=[image]\n#         trainlabel+=[labels.loc[i,'MGMT_value']]\n#         trainidt+=[idt]\n    if(Count>0):\n        FinalCount+=1\n    else:\n        FinalCount-=1\n    \n    path=os.path.join(train_dir,idt2,'T2w')\n    Count=0\n    for im in os.listdir(path):\n        img=load_dicom(os.path.join(path,im))\n        img=cv2.resize(img,(9,9)) \n        image=img_to_array(img)\n        image=image/255.0\n        Currimg = np.array([image])\n        Pred = T2wModel.predict(Currimg) \n        if(np.argmax(Pred)==0):\n            Count-=1\n        else:\n            Count+=1\n#         trainset+=[image]\n#         trainlabel+=[labels.loc[i,'MGMT_value']]\n#         trainidt+=[idt]\n    if(Count>0):\n        FinalCount+=1\n    else:\n        FinalCount-=1\n    \n#     path=os.path.join(train_dir,idt2,'T2w')\n#     Count=0\n#     for im in os.listdir(path):\n#         img=load_dicom(os.path.join(path,im))\n#         img=cv2.resize(img,(9,9)) \n#         image=img_to_array(img)\n#         image=image/255.0\n#         Currimg = np.array(image)\n#         Pred = T2wModel.predict([Currimg]) \n#         if(np.argmax(Pred[i])==0):\n#             Count-=1\n#         else:\n#             Count+=1\n# #         trainset+=[image]\n# #         trainlabel+=[labels.loc[i,'MGMT_value']]\n# #         trainidt+=[idt]\n#     if(Count>0):\n#         FinalCount+=1\n#     else:\n#         FinalCount-=1\n\n    if(FinalCount>0):\n        FinalPrediction.append(1)\n    else:\n        FinalPrediction.append(0)\n","metadata":{"execution":{"iopub.status.busy":"2021-12-08T06:05:52.671965Z","iopub.execute_input":"2021-12-08T06:05:52.672229Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"FinalPrediction","metadata":{"execution":{"iopub.status.busy":"2021-12-08T06:14:01.052728Z","iopub.execute_input":"2021-12-08T06:14:01.052993Z","iopub.status.idle":"2021-12-08T06:14:01.058446Z","shell.execute_reply.started":"2021-12-08T06:14:01.052965Z","shell.execute_reply":"2021-12-08T06:14:01.057542Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"90%","metadata":{"execution":{"iopub.status.busy":"2021-12-08T06:14:24.572009Z","iopub.execute_input":"2021-12-08T06:14:24.572283Z","iopub.status.idle":"2021-12-08T06:14:24.581574Z","shell.execute_reply.started":"2021-12-08T06:14:24.572253Z","shell.execute_reply":"2021-12-08T06:14:24.580688Z"},"collapsed":true,"jupyter":{"outputs_hidden":true},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}