{"cells":[{"metadata":{},"cell_type":"markdown","source":"# Inference EfficientNet Keras - Regression\n\n---\n\nThis is an inference kernel. You can find the training one **[HERE](https://www.kaggle.com/raimonds1993/aptos19-efficientnet-keras-regression)**.\n\n### If you enjoyed the kernel, <span style=\"color:red\">please upvote :)</span>.\n\n### Credits\n\n- [Efficient Net weights](https://www.kaggle.com/ratthachat/efficientnet-keras-weights-b0b5), by **Neuron Engineer**."},{"metadata":{"_uuid":"abcabfe4-885f-48cd-bd62-fd22394f27ae","_cell_guid":"73086574-7f5c-474b-a46b-815e93bcfadd","trusted":true},"cell_type":"code","source":"import os\nimport sys\nimport cv2\nfrom PIL import Image\nimport numpy as np\nfrom keras import layers\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'))\n\n\nim_size = 224\n\ntest_df = pd.read_csv('../input/aptos2019-blindness-detection/test.csv')\n\nprint(test_df.shape)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# utility functions\ndef crop_image1(img,tol=7):\n    # img is image data\n    # tol  is tolerance\n        \n    mask = img>tol\n    return img[np.ix_(mask.any(1),mask.any(0))]\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): # 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\n\ndef preprocess_image(image_path, desired_size=224):\n    img = cv2.imread(image_path)\n    img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)\n    img = crop_image_from_gray(img)\n    img = cv2.resize(img, (desired_size,desired_size))\n    img = cv2.addWeighted(img,4,cv2.GaussianBlur(img, (0,0), desired_size/30) ,-4 ,128)\n    \n    return img","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Test Data"},{"metadata":{"trusted":true},"cell_type":"code","source":"N = test_df.shape[0]\nx_test = np.empty((N, im_size, im_size, 3), dtype=np.uint8)\n\ntry:\n    for i, image_id in enumerate(test_df['id_code']):\n        x_test[i, :, :, :] = preprocess_image(\n            f'../input/aptos2019-blindness-detection/test_images/{image_id}.png',\n            desired_size=im_size\n        )\n    print('Test dataset correctly processed')\nexcept:\n    print('Test dataset NOT processed')","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Model: EffNetB5"},{"metadata":{"trusted":true},"cell_type":"code","source":"print(os.listdir(\"../input/kerasefficientnetsmaster/keras-efficientnets-master/keras-efficientnets-master/keras_efficientnets\"))\nsys.path.append(os.path.abspath('../input/kerasefficientnetsmaster/keras-efficientnets-master/keras-efficientnets-master/'))\nfrom keras_efficientnets import EfficientNetB5\neffnet = EfficientNetB5(input_shape=(im_size,im_size,3),\n                        weights=sys.path.append(os.path.abspath('../input/efficientnet-keras-weights-b0b5/efficientnet-b5_imagenet_1000_notop.h5')),\n                        include_top=False)\n\n\ndef build_model():\n    model = Sequential()\n    model.add(effnet)\n    model.add(layers.Dropout(0.25))\n    model.add(layers.Dense(2048))\n    model.add(layers.LeakyReLU())\n    model.add(layers.GlobalAveragePooling2D())\n    model.add(layers.Dropout(0.5))\n    model.add(layers.Dense(1, activation='linear'))\n    return model\n\nmodel = build_model()\n\nmodel.load_weights('../input/efficientnet-keras-aptos/model.h5')\nmodel.summary()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Submission"},{"metadata":{"trusted":true},"cell_type":"code","source":"y_test = model.predict(x_test)\n\n\ncoef = [0.5, 1.5, 2.5, 3.5]\n\n# Optimized on validation set\n#coef = [0.5370942, 1.51580731, 2.61728832, 3.37044039]\n\nfor i, pred in enumerate(y_test):\n    if pred < coef[0]:\n        y_test[i] = 0\n    elif pred >= coef[0] and pred < coef[1]:\n        y_test[i] = 1\n    elif pred >= coef[1] and pred < coef[2]:\n        y_test[i] = 2\n    elif pred >= coef[2] and pred < coef[3]:\n        y_test[i] = 3\n    else:\n        y_test[i] = 4\n\ntest_df['diagnosis'] = y_test.astype(int)\ntest_df.to_csv('submission.csv',index=False)\n\nprint(round(test_df.diagnosis.value_counts()/len(test_df)*100,4))","execution_count":null,"outputs":[]}],"metadata":{"language_info":{"name":"python","version":"3.6.6","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"}},"nbformat":4,"nbformat_minor":1}