{"cells":[{"metadata":{},"cell_type":"markdown","source":"<h1>APTOS Diabetic Retinopathy Severity Prediction</h1>"},{"metadata":{"trusted":true},"cell_type":"code","source":"!pip install ../input/efficientnet/efficientnet-master/efficientnet-master","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","trusted":true},"cell_type":"code","source":"import cv2\nimport numpy as np # linear algebra\n\nimport pandas as pd\nimport tensorflow as tf\n\nimport keras\nfrom keras.preprocessing.image import ImageDataGenerator\nfrom keras import backend as K\nfrom keras import Input\nfrom keras.models import Model\nfrom keras.utils import *\nfrom keras.layers import *\n\nfrom skimage.transform import resize\n\nfrom tensorflow import set_random_seed\nimport matplotlib.pyplot as plt\n\nset_random_seed(2)\nnp.random.seed(0)\n\nimport os\nimport gc","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from efficientnet.keras import *","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print(os.listdir('../input/pretrained-weights'))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"'''\n    Preprocessing using Ben Graham's method (Last competition's winner) \n    https://www.kaggle.com/ratthachat/aptos-updatedv14-preprocessing-ben-s-cropping\n'''\ndef crop_image_from_gray(img,tol=7):\n    if img.ndim ==2:\n        mask = img>tol\n        return img[np.ix_(mask.any(1),mask.any(0))]\n    elif img.ndim==3:\n        gray_img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)\n        mask = gray_img>tol\n        \n        check_shape = img[:,:,0][np.ix_(mask.any(1),mask.any(0))].shape[0]\n        if (check_shape == 0): \n            return img \n        else:\n            img1=img[:,:,0][np.ix_(mask.any(1),mask.any(0))]\n            img2=img[:,:,1][np.ix_(mask.any(1),mask.any(0))]\n            img3=img[:,:,2][np.ix_(mask.any(1),mask.any(0))]\n            img = np.stack([img1,img2,img3],axis=-1)\n        return img\n    \ndef load_ben_color(image, IMG_SIZE, sigmaX=10):\n    image = crop_image_from_gray(image)\n    image = cv2.resize(image, (IMG_SIZE, IMG_SIZE))\n    image=cv2.addWeighted ( image,4, cv2.GaussianBlur( image , (0,0) , sigmaX) ,-4 ,128)\n        \n    return image","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"'''\n    Define model\n'''\ndef output_relu(x):\n    return K.relu(x, max_value=4)\n\ndef get_model(version, IMG_SIZE): \n    base_model = 0\n    if version == 0:\n        base_model = EfficientNetB0(weights=None, include_top=False, input_shape=(IMG_SIZE,IMG_SIZE,3))\n    elif version == 1:\n        base_model = EfficientNetB1(weights=None, include_top=False, input_shape=(IMG_SIZE,IMG_SIZE,3))\n    elif version == 2:\n        base_model = EfficientNetB2(weights=None, include_top=False, input_shape=(IMG_SIZE,IMG_SIZE,3))\n    elif version == 3:\n        base_model = EfficientNetB3(weights=None, include_top=False, input_shape=(IMG_SIZE,IMG_SIZE,3))\n    elif version == 4:\n        base_model = EfficientNetB4(weights=None, include_top=False, input_shape=(IMG_SIZE,IMG_SIZE,3))\n    else:\n        return None \n        \n    x = base_model.output\n    x = GlobalAveragePooling2D()(x)\n    x = Dense(1, activation=output_relu, kernel_initializer='he_normal')(x)\n    model = Model(inputs=base_model.input, outputs=x)\n\n    return model","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model_b0_256 = get_model(0, 300)\nmodel_b0_256.load_weights('../input/pretrained-weights/model_b0_finetuned_20_epochs.h5')\n\nmodel_b1_240 = get_model(1, 300)\nmodel_b1_240.load_weights('../input/pretrained-weights/model_b1.h5')\n\nmodel_b3_300 = get_model(3, 300)\nmodel_b3_300.load_weights('../input/pretrained-weights/model_b3_epochs_30_300.h5')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test_csv = pd.read_csv('../input/aptos2019-blindness-detection/sample_submission.csv')\nid_code = test_csv['id_code']\nprediction = np.empty(len(id_code), dtype='uint8')\nfor i in range(len(id_code)):\n    img = cv2.imread('../input/aptos2019-blindness-detection/test_images/{}.png'.format(id_code[i]))\n#     img240 = load_ben_color(img, 240).astype('float32') / 255.\n#     img256 = load_ben_color(img, 256).astype('float32') / 255.\n    img300 = load_ben_color(img, 300).astype('float32') / 255.\n        \n#     X1 = np.array([img256, cv2.flip(img256, 0), cv2.flip(img256, 1)])\n#     X2 = np.array([img240, cv2.flip(img240, 0), cv2.flip(img240, 1)])\n    X3 = np.array([img300])\n\n    pred1 = model_b0_256.predict(X3)\n    pred2 = model_b1_240.predict(X3)\n    pred3 = model_b3_300.predict(X3)\n    \n    pred1 = np.mean(pred1)\n    pred2 = np.mean(pred2)\n    pred3 = np.mean(pred3)\n    \n    pred = (pred1 + pred2 + pred3) / 3\n    pred = np.rint(pred).astype('uint8')\n    print(pred)\n    prediction[i] = pred","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test_csv['diagnosis'] = prediction\ntest_csv.to_csv(\"submission.csv\", index=False)\n# print(test_csv)\nunique, counts = np.unique(prediction, return_counts=True)\ntmp = dict(zip(unique, counts))\nprint(tmp)","execution_count":null,"outputs":[]}],"metadata":{"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.6.6"}},"nbformat":4,"nbformat_minor":1}