{"cells":[{"metadata":{},"cell_type":"markdown","source":"# Inference Kernel\nThis is the Inference Kernel of https://www.kaggle.com/fanconic/fork-of-efficientnetb3-regression-keras-2, version 25"},{"metadata":{"trusted":true},"cell_type":"code","source":"import os\nprint(os.listdir('../input/fork-of-efficientnetb3-regression-keras-2'))\nprint(os.listdir('../input/aptos-trained-weights'))","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"import sys\nimport json\nimport math\nimport os\nimport subprocess\nimport time\nimport gc\n\n!pip install -U '../input/install/efficientnet-0.0.3-py2.py3-none-any.whl'","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import cv2\nfrom PIL import Image\nimport numpy as np\nfrom keras import layers\nfrom keras.activations import elu\nfrom efficientnet import EfficientNetB4\nfrom keras.callbacks import Callback, ModelCheckpoint\nfrom keras.preprocessing.image import ImageDataGenerator\nfrom keras.models import Sequential, load_model\nfrom keras.optimizers import Adam\nimport matplotlib.pyplot as plt\nimport pandas as pd\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import cohen_kappa_score, accuracy_score\nimport scipy\nfrom tqdm import tqdm\nprint(os.listdir('../input'))","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### Constants"},{"metadata":{"trusted":true},"cell_type":"code","source":"HEIGHT = 256\nWIDTH = 256\n# Optimized Coefficients for regression\nCOEFF = [0.52022015, 1.46022145, 2.49058373, 3.30146459]","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### Preprocess functions for images"},{"metadata":{"trusted":true},"cell_type":"code","source":"def 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): # image is too dark so that we crop out everything,\n            return img # return original image\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 circle_crop(img):   \n    img = crop_image_from_gray(img)    \n    height, width, depth = img.shape    \n    \n    x = int(width/2)\n    y = int(height/2)\n    r = np.amin((x,y))\n    \n    circle_img = np.zeros((height, width), np.uint8)\n    cv2.circle(circle_img, (x,y), int(r), 1, thickness=-1)\n    img = cv2.bitwise_and(img, img, mask=circle_img)\n    img = crop_image_from_gray(img)\n    \n    return img \n\ndef preprocess_image(img):\n    #img = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)\n    #img = crop_image_from_gray(img)\n    #img = cv2.resize(img, (WIDTH,HEIGHT))\n    img = cv2.addWeighted(img,4,cv2.GaussianBlur(img, (0,0), 10) ,-4 ,128)\n    \n    return img","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### Build Convolutional Neural Network and load its weights"},{"metadata":{"trusted":true},"cell_type":"code","source":"def build_model():\n    efficientnetb3 = EfficientNetB4(\n        weights=None,\n        input_shape=(HEIGHT,WIDTH,3),\n        include_top=False\n                   )\n\n    model = Sequential()\n    model.add(efficientnetb3)\n    model.add(layers.GlobalAveragePooling2D())\n    model.add(layers.Dropout(0.5))\n    model.add(layers.BatchNormalization())\n    model.add(layers.Dense(5, activation=elu))\n    model.add(layers.Dense(1, activation=\"linear\"))\n    \n    return model","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model1 = build_model()\nmodel1.load_weights('../input/fork-of-efficientnetb3-regression-keras-2/val_model.h5')\n#model1.load_weights('../input/aptos-trained-weights/val_model_v30.h5')\nmodel1.summary()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#model2 = build_model()\n#model2.load_weights('../input/fork-of-efficientnetb3-regression-keras-2/effnet_modelB3.h5')\n#model2.summary()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### Load test data set"},{"metadata":{"trusted":true},"cell_type":"code","source":"TEST_IMG_PATH = '../input/aptos2019-blindness-detection/test_images/'\ntest_df = pd.read_csv('../input/aptos2019-blindness-detection/test.csv')\nprint(test_df.shape)\n\noriginal_names = test_df['id_code'].values\ntest_df['id_code'] = test_df['id_code'] + \".png\"\ntest_df['diagnosis'] = np.zeros(test_df.shape[0])\ndisplay(test_df.head())","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### Predict Test Labels"},{"metadata":{"trusted":true},"cell_type":"code","source":"tta_steps = 10\npredictions1 = []\n#predictions2 = []\n\nfor i in tqdm(range(tta_steps)):\n    test_generator = ImageDataGenerator(rescale=1./255,\n                                    #samplewise_center= True,\n                                    horizontal_flip=True,\n                                    rotation_range= 90, \n                                    vertical_flip=True,\n                                    brightness_range=(0.5,1.5),\n                                    zoom_range= 0.2,\n                                    fill_mode='constant',\n                                    preprocessing_function=preprocess_image,\n                                    cval = 0).flow_from_dataframe(test_df, \n                                                    x_col='id_code', \n                                                    y_col = 'diagnosis',\n                                                    directory = TEST_IMG_PATH,\n                                                    target_size=(WIDTH, HEIGHT),\n                                                    batch_size=1,\n                                                    class_mode='other',\n                                                    shuffle = False)\n    \n    preds1 = model1.predict_generator(test_generator, steps = test_df.shape[0])\n    predictions1.append(preds1)\n\n    del test_generator\n    gc.collect()\n    \npred_test1 = np.mean(predictions1, axis=0)\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"y_test = pred_test1","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"\nfor i, pred in enumerate(y_test):\n    if pred < COEFF[0]:\n        y_test[i] = 0\n    elif pred >= COEFF[0] and pred < COEFF[1]:\n        y_test[i] = 1\n    elif pred >= COEFF[1] and pred < COEFF[2]:\n        y_test[i] = 2\n    elif pred >= COEFF[2] and pred < COEFF[3]:\n        y_test[i] = 3\n    else:\n        y_test[i] = 4","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test_df['diagnosis'] = y_test.astype(int)\ntest_df['id_code'] = test_df['id_code'].str.replace(r'.png$', '')\ntest_df.head()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### Postprocess Leaks"},{"metadata":{"trusted":true},"cell_type":"code","source":"leaks = pd.read_csv('../input/aptos-trained-weights/leaks.csv', dtype=  {'diagnosis': np.int32})\ncodes = leaks['id_code'].values\ndiagnosis = leaks['diagnosis'].values\nfor i in range(codes.shape[0]):\n    test_df.loc[test_df['id_code'] == codes[i], 'diagnosis'] = int(diagnosis[i])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test_df.to_csv('submission.csv',index=False)\nprint(round(test_df.diagnosis.value_counts()/len(test_df)*100,4))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test_df.head()","execution_count":null,"outputs":[]}],"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":4,"nbformat_minor":1}