{"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_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import os\nimport cv2\nimport random\nimport pandas as pd\nimport numpy as np\nimport tensorflow as tf\nimport tensorflow_hub as hub\nfrom tensorflow.keras.models import Model\nfrom tensorflow.keras.models import load_model\nfrom tensorflow.keras.layers import *\nfrom tensorflow.keras.optimizers import *\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator\nfrom sklearn.preprocessing import MultiLabelBinarizer","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2021-11-27T02:37:03.293053Z","iopub.execute_input":"2021-11-27T02:37:03.293784Z","iopub.status.idle":"2021-11-27T02:37:09.198386Z","shell.execute_reply.started":"2021-11-27T02:37:03.293691Z","shell.execute_reply":"2021-11-27T02:37:09.197673Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"HEIGHT = 480\nWIDTH = 480\nCHANNELS = 3\nCLASSES = 6\ntop_dropout_rate = 0.2","metadata":{"execution":{"iopub.status.busy":"2021-11-27T02:37:09.201944Z","iopub.execute_input":"2021-11-27T02:37:09.202151Z","iopub.status.idle":"2021-11-27T02:37:09.209073Z","shell.execute_reply.started":"2021-11-27T02:37:09.202127Z","shell.execute_reply":"2021-11-27T02:37:09.208075Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"weights_path = \"../input/efnet-v2-pixelaug-submit/EfficientNet_V2_PixelAug.h5\"\nhub_url = '../input/efficientnetv2-tfhub-weight-files/tfhub_models/efficientnetv2-l-21k-ft1k/feature_vector'","metadata":{"execution":{"iopub.status.busy":"2021-11-27T02:37:09.210196Z","iopub.execute_input":"2021-11-27T02:37:09.212536Z","iopub.status.idle":"2021-11-27T02:37:09.222798Z","shell.execute_reply.started":"2021-11-27T02:37:09.212498Z","shell.execute_reply":"2021-11-27T02:37:09.222075Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def get_model():\n    model = tf.keras.Sequential([\n            tf.keras.layers.InputLayer(input_shape = [HEIGHT, WIDTH, CHANNELS]),\n            hub.KerasLayer(hub_url, trainable = True),\n            Dropout(top_dropout_rate, name = \"top_dropout\"),\n            Dense(CLASSES, activation = 'sigmoid')\n        ])\n    model.build((HEIGHT, WIDTH, CHANNELS))\n    model.compile(optimizer ='adam', loss = 'binary_crossentropy', metrics = ['accuracy'])\n    model.summary()\n    return model","metadata":{"execution":{"iopub.status.busy":"2021-11-27T02:37:09.224932Z","iopub.execute_input":"2021-11-27T02:37:09.225438Z","iopub.status.idle":"2021-11-27T02:37:09.232710Z","shell.execute_reply.started":"2021-11-27T02:37:09.225380Z","shell.execute_reply":"2021-11-27T02:37:09.231742Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = get_model()\nmodel.load_weights(weights_path)","metadata":{"execution":{"iopub.status.busy":"2021-11-27T02:37:09.672253Z","iopub.execute_input":"2021-11-27T02:37:09.672505Z","iopub.status.idle":"2021-11-27T02:37:49.821847Z","shell.execute_reply.started":"2021-11-27T02:37:09.672472Z","shell.execute_reply":"2021-11-27T02:37:49.820985Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_img = '../input/plant-pathology-2021-fgvc8/test_images'\nsubmission = pd.read_csv('../input/plant-pathology-2021-fgvc8/sample_submission.csv')\nsubmission","metadata":{"execution":{"iopub.status.busy":"2021-11-27T02:37:49.824334Z","iopub.execute_input":"2021-11-27T02:37:49.824693Z","iopub.status.idle":"2021-11-27T02:37:49.852794Z","shell.execute_reply.started":"2021-11-27T02:37:49.824664Z","shell.execute_reply":"2021-11-27T02:37:49.851772Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def load_image(image_id):\n    file_path = str(image_id)\n    img = cv2.imread(test_img+'/'+file_path)\n    return cv2.cvtColor(img, cv2.COLOR_BGR2RGB)","metadata":{"execution":{"iopub.status.busy":"2021-11-27T02:37:49.854295Z","iopub.execute_input":"2021-11-27T02:37:49.854684Z","iopub.status.idle":"2021-11-27T02:37:49.859759Z","shell.execute_reply.started":"2021-11-27T02:37:49.854644Z","shell.execute_reply":"2021-11-27T02:37:49.858966Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def data_full_augment(image):\n    \n    p_pixel_1 = tf.random.uniform([], 0, 1.0, dtype=tf.float32)\n    p_pixel_2 = tf.random.uniform([], 0, 1.0, dtype=tf.float32)\n    p_pixel_3 = tf.random.uniform([], 0, 1.0, dtype=tf.float32)\n\n    # Pixel-level transforms\n    if p_pixel_1 >= .4:\n        image = tf.image.random_saturation(image, lower=.7, upper=1.3)\n        flag = True\n    if p_pixel_2 >= .4:\n        image = tf.image.random_contrast(image, lower=.8, upper=1.2)\n        flag = True\n    if p_pixel_3 >= .4:\n        image = tf.image.random_brightness(image, max_delta=.1)\n        flag = True\n\n    \n    \n    return image","metadata":{"execution":{"iopub.status.busy":"2021-11-27T02:37:49.861918Z","iopub.execute_input":"2021-11-27T02:37:49.862473Z","iopub.status.idle":"2021-11-27T02:37:49.871768Z","shell.execute_reply.started":"2021-11-27T02:37:49.862406Z","shell.execute_reply":"2021-11-27T02:37:49.871010Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def process(img):\n    #img = data_full_augment(img)\n    #img = tf.cast(img, tf.float32) / 255.0\n    #img = np.array(img)\n    return cv2.resize(img / 255.0, (480, 480)).reshape(-1, 480, 480, 3)\ndef predict(img):\n    img = load_image(img)\n    tta_steps = 7\n    predictions = []\n    for i in range(tta_steps):\n        pred = model.layers[2](model.layers[1](model.layers[0](process(img)))).numpy()[0]\n        predictions.append(pred)\n    result = np.median(predictions, axis=0)\n    \n    return result","metadata":{"execution":{"iopub.status.busy":"2021-11-27T02:37:49.873238Z","iopub.execute_input":"2021-11-27T02:37:49.873541Z","iopub.status.idle":"2021-11-27T02:37:49.884652Z","shell.execute_reply.started":"2021-11-27T02:37:49.873498Z","shell.execute_reply":"2021-11-27T02:37:49.883788Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"n_label = ['complex', 'frog_eye_leaf_spot', 'healthy', 'powdery_mildew', 'rust', 'scab']\nlabel = []\nfor i in range(len(submission['image'])):\n    test_images = submission['image'][i]\n    preds = predict(test_images)\n    preds = list(preds)\n    answer = []\n    for j in range(len(preds)):\n        if preds[j] > 0.3:\n            answer.append(n_label[j])\n    answer = ' '.join(answer)\n    label.append(answer)\nsubmission['labels'] = label\nsubmission","metadata":{"execution":{"iopub.status.busy":"2021-11-27T02:37:49.887354Z","iopub.execute_input":"2021-11-27T02:37:49.887893Z","iopub.status.idle":"2021-11-27T02:38:02.810024Z","shell.execute_reply.started":"2021-11-27T02:37:49.887854Z","shell.execute_reply":"2021-11-27T02:38:02.809271Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission.to_csv('submission.csv', index=False)","metadata":{"execution":{"iopub.status.busy":"2021-11-27T02:43:20.539914Z","iopub.execute_input":"2021-11-27T02:43:20.540185Z","iopub.status.idle":"2021-11-27T02:43:20.548597Z","shell.execute_reply.started":"2021-11-27T02:43:20.540158Z","shell.execute_reply":"2021-11-27T02:43:20.547849Z"},"trusted":true},"execution_count":null,"outputs":[]}]}