{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load in \n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the \"../input/\" directory.\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport glob\nglob.glob('../input/prostate-cancer-grade-assessment/*')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"!pip install -qq ../input/efficientnet/efficientnet-1.0.0-py3-none-any.whl","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"import os\nimport cv2\nimport skimage.io\nimport numpy as np\nimport pandas as pd\n\nfrom keras.layers import *\nfrom keras.models import Model\nimport efficientnet.keras as efn\nfrom keras.applications.nasnet import  preprocess_input","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Load model"},{"metadata":{"trusted":true},"cell_type":"code","source":"I = Input((256,256,3))\nefnb3 = efn.EfficientNetB3(weights = None, include_top = False, input_tensor = I, pooling = 'avg', classes = None)\nfor layer in efnb3.layers:\n    layer.trainable = True\nx = Dropout(0.5)(efnb3.output)\nx = Dense(64, activation='relu')(x)\nx = Dense(6,activation='softmax')(x)\n\nmodel = Model(inputs = efnb3.input, outputs = x)\nmodel.load_weights('../input/model-1/model.h5')","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Get image from image name"},{"metadata":{"trusted":true},"cell_type":"code","source":"def get_image(img_name, data_dir='../input/prostate-cancer-grade-assessment/test_images'):\n    img_path = os.path.join(data_dir, f'{img_name}.tiff')\n    img = skimage.io.MultiImage(img_path)\n    img = cv2.resize(img[-1], (256,256))\n    img = preprocess_input(img)\n    img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)\n    \n    return img","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# TTA\n\nFunction to generate different images from given image and do predictions on them"},{"metadata":{"trusted":true},"cell_type":"code","source":"def TTA(img):\n    img1 = img\n    img2 = cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE)\n    img3 = cv2.rotate(img, cv2.ROTATE_90_COUNTERCLOCKWISE)\n    img4 = cv2.rotate(img, cv2.ROTATE_180)\n    images = [img1, img2, img3, img4]\n    \n    return model.predict(np.array(images), batch_size=4)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Post-process TTA predictions"},{"metadata":{"trusted":true},"cell_type":"code","source":"def post_process(preds):\n    avg = np.sum(preds,axis = 0)\n    label = np.argmax(avg)\n    return label","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Predicting on test images"},{"metadata":{"trusted":true},"cell_type":"code","source":"from tqdm import tqdm","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"data_dir = '../input/prostate-cancer-grade-assessment/test_images'\nsample_submission = pd.read_csv('../input/prostate-cancer-grade-assessment/sample_submission.csv')\n# data_dir = '../input/prostate-cancer-grade-assessment/train_images'\n# sample_submission = pd.read_csv('../input/prostate-cancer-grade-assessment/train.csv').head(50)\n\ntest_images = sample_submission.image_id.values\nlabels = []\n\ntry:    \n    for image in tqdm(test_images):\n        img = get_image(image, data_dir)\n        preds = TTA(img)\n        label = post_process(preds)\n        labels.append(label)\n    sample_submission['isup_grade'] = labels\nexcept:\n    print('Test dir not found')\n    \nsample_submission['isup_grade'] = sample_submission['isup_grade'].astype(int)\nsample_submission.to_csv('submission.csv', index=False)\nsample_submission.head()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"Click [here](https://www.kaggle.com/prateekagnihotri/efficientnet-keras-train-qwk-loss-augmentation) for training kernel"},{"metadata":{},"cell_type":"markdown","source":"Thanks for reading. Please upvote if you found it helpful."}],"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":4}