{"metadata":{"kaggle":{"accelerator":"gpu","dataSources":[{"sourceId":952401,"sourceType":"datasetVersion","datasetId":517172}],"dockerImageVersionId":30587,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true},"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.10.12"},"papermill":{"default_parameters":{},"duration":190.591644,"end_time":"2023-11-24T12:53:44.230115","environment_variables":{},"exception":null,"input_path":"__notebook__.ipynb","output_path":"__notebook__.ipynb","parameters":{},"start_time":"2023-11-24T12:50:33.638471","version":"2.4.0"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"","metadata":{"_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","papermill":{"duration":0.004915,"end_time":"2023-11-24T12:50:36.994115","exception":false,"start_time":"2023-11-24T12:50:36.989200","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from tensorflow import lite\nimport tensorflow as tf\nfrom tensorflow import keras\nfrom tensorflow.keras import layers\nimport numpy as np\nimport pandas as pd\nimport random, os\nimport shutil\nimport matplotlib.pyplot as plt\nfrom matplotlib.image import imread\nfrom keras.preprocessing.image import ImageDataGenerator\nfrom tensorflow.keras.metrics import categorical_accuracy\nfrom sklearn.model_selection import train_test_split","metadata":{"papermill":{"duration":13.01617,"end_time":"2023-11-24T12:50:50.014837","exception":false,"start_time":"2023-11-24T12:50:36.998667","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-12-04T20:51:02.357794Z","iopub.execute_input":"2023-12-04T20:51:02.358642Z","iopub.status.idle":"2023-12-04T20:51:18.233608Z","shell.execute_reply.started":"2023-12-04T20:51:02.358599Z","shell.execute_reply":"2023-12-04T20:51:18.232279Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df = pd.read_csv(r'../input/diabetic-retinopathy-224x224-gaussian-filtered/train.csv')\n\ndiagnosis_dict_binary = {\n    0: 'No_DR',\n    1: 'DR',\n    2: 'DR',\n    3: 'DR',\n    4: 'DR'\n}\n\ndiagnosis_dict = {\n    0: 'No_DR',\n    1: 'Mild',\n    2: 'Moderate',\n    3: 'Severe',\n    4: 'Proliferate_DR',\n}\n\n\ndf['binary_type'] =  df['diagnosis'].map(diagnosis_dict_binary.get)\ndf['type'] = df['diagnosis'].map(diagnosis_dict.get)\ndf.head()","metadata":{"papermill":{"duration":0.050547,"end_time":"2023-11-24T12:50:50.070190","exception":false,"start_time":"2023-11-24T12:50:50.019643","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-12-04T20:51:34.018066Z","iopub.execute_input":"2023-12-04T20:51:34.018926Z","iopub.status.idle":"2023-12-04T20:51:34.043103Z","shell.execute_reply.started":"2023-12-04T20:51:34.018886Z","shell.execute_reply":"2023-12-04T20:51:34.042033Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df['type'].value_counts().plot(kind='barh')","metadata":{"papermill":{"duration":0.288202,"end_time":"2023-11-24T12:50:50.363510","exception":false,"start_time":"2023-11-24T12:50:50.075308","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-12-04T20:24:35.697746Z","iopub.execute_input":"2023-12-04T20:24:35.698209Z","iopub.status.idle":"2023-12-04T20:24:36.058752Z","shell.execute_reply.started":"2023-12-04T20:24:35.698173Z","shell.execute_reply":"2023-12-04T20:24:36.055526Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_intermediate, val = train_test_split(df, test_size = 0.15, stratify = df['type'])\ntrain, test = train_test_split(train_intermediate, test_size = 0.15 / (1 - 0.15), stratify = train_intermediate['type'])\n\nprint(\"For Training Dataset :\")\nprint(train['type'].value_counts(), '\\n')\nprint(\"For Testing Dataset :\")\nprint(test['type'].value_counts(), '\\n')\nprint(\"For Validation Dataset :\")\nprint(val['type'].value_counts(), '\\n')","metadata":{"papermill":{"duration":0.033989,"end_time":"2023-11-24T12:50:50.402702","exception":false,"start_time":"2023-11-24T12:50:50.368713","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-12-04T20:51:41.638121Z","iopub.execute_input":"2023-12-04T20:51:41.638609Z","iopub.status.idle":"2023-12-04T20:51:41.676107Z","shell.execute_reply.started":"2023-12-04T20:51:41.638576Z","shell.execute_reply":"2023-12-04T20:51:41.674828Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"base_dir = ''\n\ntrain_dir = os.path.join(base_dir, 'train')\nval_dir = os.path.join(base_dir, 'val')\ntest_dir = os.path.join(base_dir, 'test')\n\nif os.path.exists(base_dir):\n    shutil.rmtree(base_dir)\n\nif os.path.exists(train_dir):\n    shutil.rmtree(train_dir)\nos.makedirs(train_dir)\n\nif os.path.exists(val_dir):\n    shutil.rmtree(val_dir)\nos.makedirs(val_dir)\n\nif os.path.exists(test_dir):\n    shutil.rmtree(test_dir)\nos.makedirs(test_dir)","metadata":{"papermill":{"duration":0.014505,"end_time":"2023-11-24T12:50:50.422645","exception":false,"start_time":"2023-11-24T12:50:50.408140","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-12-04T20:58:59.819266Z","iopub.execute_input":"2023-12-04T20:58:59.819669Z","iopub.status.idle":"2023-12-04T20:59:00.032904Z","shell.execute_reply.started":"2023-12-04T20:58:59.819638Z","shell.execute_reply":"2023-12-04T20:59:00.031596Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"src_dir = r'../input/diabetic-retinopathy-224x224-gaussian-filtered/gaussian_filtered_images/gaussian_filtered_images'\nfor index, row in train.iterrows():\n    diagnosis = row['type']\n    binary_diagnosis = row['binary_type']\n    id_code = row['id_code'] + \".png\"\n    srcfile = os.path.join(src_dir, diagnosis, id_code)\n    dstfile = os.path.join(train_dir, binary_diagnosis)\n    os.makedirs(dstfile, exist_ok = True)\n    shutil.copy(srcfile, dstfile)\n\nfor index, row in val.iterrows():\n    diagnosis = row['type']\n    binary_diagnosis = row['binary_type']\n    id_code = row['id_code'] + \".png\"\n    srcfile = os.path.join(src_dir, diagnosis, id_code)\n    dstfile = os.path.join(val_dir, binary_diagnosis)\n    os.makedirs(dstfile, exist_ok = True)\n    shutil.copy(srcfile, dstfile)\n \nfor index, row in test.iterrows():\n    diagnosis = row['type']\n    binary_diagnosis = row['binary_type']\n    id_code = row['id_code'] + \".png\"\n    srcfile = os.path.join(src_dir, diagnosis, id_code)\n    dstfile = os.path.join(test_dir, binary_diagnosis)\n    os.makedirs(dstfile, exist_ok = True)\n    shutil.copy(srcfile, dstfile)","metadata":{"papermill":{"duration":26.117395,"end_time":"2023-11-24T12:51:16.545192","exception":false,"start_time":"2023-11-24T12:50:50.427797","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-12-04T20:59:02.900380Z","iopub.execute_input":"2023-12-04T20:59:02.900836Z","iopub.status.idle":"2023-12-04T20:59:08.535931Z","shell.execute_reply.started":"2023-12-04T20:59:02.900799Z","shell.execute_reply":"2023-12-04T20:59:08.534660Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_path = 'train'\nval_path = 'val'\ntest_path = 'test'\n\ntrain_batches = ImageDataGenerator(rescale = 1./255).flow_from_directory(train_path, target_size=(224,224), shuffle = True)\nval_batches = ImageDataGenerator(rescale = 1./255).flow_from_directory(val_path, target_size=(224,224), shuffle = True)\ntest_batches = ImageDataGenerator(rescale = 1./255).flow_from_directory(test_path, target_size=(224,224), shuffle = False)","metadata":{"papermill":{"duration":0.19273,"end_time":"2023-11-24T12:51:16.745804","exception":false,"start_time":"2023-11-24T12:51:16.553074","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-12-04T20:59:13.498158Z","iopub.execute_input":"2023-12-04T20:59:13.498710Z","iopub.status.idle":"2023-12-04T20:59:13.715826Z","shell.execute_reply.started":"2023-12-04T20:59:13.498659Z","shell.execute_reply":"2023-12-04T20:59:13.714554Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = tf.keras.Sequential([\n    layers.Conv2D(8, (3,3), padding=\"valid\", input_shape=(224,224,3), activation = 'relu'),\n    layers.MaxPooling2D(pool_size=(2,2)),\n    layers.BatchNormalization(),\n    \n    layers.Conv2D(16, (3,3), padding=\"valid\", activation = 'relu'),\n    layers.MaxPooling2D(pool_size=(2,2)),\n    layers.BatchNormalization(),\n    \n    layers.Conv2D(32, (4,4), padding=\"valid\", activation = 'relu'),\n    layers.MaxPooling2D(pool_size=(2,2)),\n    layers.BatchNormalization(),\n    \n    layers.Conv2D(64, (4,4), padding=\"valid\", activation = 'relu'),\n    layers.MaxPooling2D(pool_size=(2,2)),\n    layers.BatchNormalization(),\n \n    layers.Flatten(),\n    layers.Dense(64, activation = 'relu'),\n    layers.Dropout(0.15),\n    layers.Dense(2, activation = 'softmax')\n])\n\nmodel.compile(optimizer=tf.keras.optimizers.Adam(lr = 1e-5),\n              loss=tf.keras.losses.BinaryCrossentropy(),\n              metrics=['acc'])\n\nhistory = model.fit(train_batches,\n                    epochs=15,\n                    validation_data=val_batches)","metadata":{"papermill":{"duration":137.776363,"end_time":"2023-11-24T12:53:34.527967","exception":false,"start_time":"2023-11-24T12:51:16.751604","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-12-04T20:59:17.978291Z","iopub.execute_input":"2023-12-04T20:59:17.978731Z","iopub.status.idle":"2023-12-04T21:18:51.167700Z","shell.execute_reply.started":"2023-12-04T20:59:17.978695Z","shell.execute_reply":"2023-12-04T21:18:51.166083Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.save('64x3-CNN.model')","metadata":{"papermill":{"duration":2.254499,"end_time":"2023-11-24T12:53:36.927179","exception":false,"start_time":"2023-11-24T12:53:34.672680","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-12-04T21:20:26.337100Z","iopub.execute_input":"2023-12-04T21:20:26.337529Z","iopub.status.idle":"2023-12-04T21:20:29.269133Z","shell.execute_reply.started":"2023-12-04T21:20:26.337499Z","shell.execute_reply":"2023-12-04T21:20:29.267675Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"loss, acc = model.evaluate_generator(test_batches, verbose=1)\nprint(\"Loss: \", loss)\nprint(\"Accuracy: \", acc)","metadata":{"papermill":{"duration":1.625683,"end_time":"2023-11-24T12:53:38.653836","exception":false,"start_time":"2023-11-24T12:53:37.028153","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-12-04T21:20:45.020019Z","iopub.execute_input":"2023-12-04T21:20:45.020507Z","iopub.status.idle":"2023-12-04T21:20:50.295457Z","shell.execute_reply.started":"2023-12-04T21:20:45.020468Z","shell.execute_reply":"2023-12-04T21:20:50.294040Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import tensorflow as tf\nimport cv2\nimport numpy as np\nimport matplotlib.pyplot as plt\n\n\ndef predict_class(path):\n    img = cv2.imread(path)\n\n    RGBImg = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)\n    RGBImg= cv2.resize(RGBImg,(224,224))\n    plt.imshow(RGBImg)\n    image = np.array(RGBImg) / 255.0\n    new_model = tf.keras.models.load_model(\"64x3-CNN.model\")\n    predict=new_model.predict(np.array([image]))\n    per=np.argmax(predict,axis=1)\n    if per==1:\n        print('Diabetic Retinopathy Not Detected')\n    else:\n        print('Diabetic Retinopathy Detected')","metadata":{"papermill":{"duration":0.29491,"end_time":"2023-11-24T12:53:39.054134","exception":false,"start_time":"2023-11-24T12:53:38.759224","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-12-04T21:21:01.014103Z","iopub.execute_input":"2023-12-04T21:21:01.014745Z","iopub.status.idle":"2023-12-04T21:21:01.320370Z","shell.execute_reply.started":"2023-12-04T21:21:01.014701Z","shell.execute_reply":"2023-12-04T21:21:01.318678Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"predict_class('/kaggle/input/diabetic-retinopathy-224x224-gaussian-filtered/gaussian_filtered_images/gaussian_filtered_images/Severe/1b495ac025b7.png')","metadata":{"papermill":{"duration":1.938694,"end_time":"2023-11-24T12:53:41.095896","exception":false,"start_time":"2023-11-24T12:53:39.157202","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-12-04T21:21:06.437868Z","iopub.execute_input":"2023-12-04T21:21:06.438305Z","iopub.status.idle":"2023-12-04T21:21:08.246329Z","shell.execute_reply.started":"2023-12-04T21:21:06.438271Z","shell.execute_reply":"2023-12-04T21:21:08.245395Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"papermill":{"duration":0.108827,"end_time":"2023-11-24T12:53:41.314058","exception":false,"start_time":"2023-11-24T12:53:41.205231","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]}]}