{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"!pip install -qq ../input/efficientnetrepo110/efficientnet-1.1.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\nimport math\nimport tensorflow as tf\nfrom tensorflow.keras.layers import Dense\nfrom tensorflow.keras.models import Model\nfrom matplotlib import pyplot as plt\nimport efficientnet.tfkeras as efn\n\nprint(tf.__version__)\nprint(tf.keras.__version__)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"img_size = 512\nnb_classes = 6","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Load Model"},{"metadata":{"trusted":true},"cell_type":"code","source":"def get_model():\n    base_model =  efn.EfficientNetB7(weights = None, include_top=False, pooling='avg', input_shape=(img_size, img_size, 3))\n    x = base_model.output\n    predictions = Dense(nb_classes, activation=\"softmax\")(x)\n    return Model(inputs=base_model.input, outputs=predictions)\n\nmodel = get_model()\nmodel.load_weights('../input/model-efn-tpu-2/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], (img_size,img_size))\n    img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)\n    img = img/255.0\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(1000)\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/image-augmentation-on-tpu) for Training kernel."},{"metadata":{},"cell_type":"markdown","source":"Thanks for reading. Please upvote if you like it.\n\nFor QWK metric, TTA, image augmentations, Transfer learning.. visit my kernels [1](https://www.kaggle.com/prateekagnihotri/efficientnet-keras-train-qwk-loss-augmentation), [2](https://www.kaggle.com/prateekagnihotri/efficientnet-keras-infernce-tta), and [3](https://www.kaggle.com/prateekagnihotri/transfer-learning-starter-kernel)."}],"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}