{"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 keras\nimport numpy as np\nimport pandas as pd\nimport tensorflow as tf\nimport matplotlib.pyplot as plt\nfrom sklearn.model_selection import train_test_split\nfrom keras.utils import to_categorical\nimport shutil\nfrom glob import glob\nimport pandas_profiling as pp\nimport cv2\nfrom google.cloud import storage\nfrom kaggle_datasets import KaggleDatasets\nfrom random import seed, randint, random, choice\nfrom PIL import Image\nimport tensorflow_addons as tfa","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def auto_select_accelerator():\n    try:\n        tpu = tf.distribute.cluster_resolver.TPUClusterResolver()\n        tf.config.experimental_connect_to_cluster(tpu)\n        tf.tpu.experimental.initialize_tpu_system(tpu)\n        strategy = tf.distribute.experimental.TPUStrategy(tpu)\n        print(\"Running on TPU:\", tpu.master())\n    except ValueError:\n        strategy = tf.distribute.get_strategy()\n    print(f\"Running on {strategy.num_replicas_in_sync} replicas\")\n    \n    return strategy","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"img_size = (224, 240, 260, 300, 380, 456, 528, 600)\nim_size = img_size[7]\n\nload_dir = \"/kaggle/input/plant-pathology-2021-fgvc8/\"\ndf = pd.read_csv(load_dir + 'train.csv')\n\nstrategy = auto_select_accelerator()\nbatch = 32\n\ntest_dir = '/kaggle/input/plant-pathology-2021-fgvc8/test_images/'\ntest_df = pd.DataFrame()\ntest_df['image'] = os.listdir(test_dir)\n\nn_labels = 5\n\nstrategy = auto_select_accelerator()\nbatch = 32\n\ntest_dir = '/kaggle/input/plant-pathology-2021-fgvc8/test_images/'\ntest_df = pd.DataFrame()\ntest_df['image'] = os.listdir(test_dir)\n\nfrom keras.preprocessing.image import ImageDataGenerator\n\ntestgen = ImageDataGenerator(\n            preprocessing_function = tf.keras.applications.efficientnet.preprocess_input,\n            horizontal_flip=True,\n            vertical_flip=True,\n            brightness_range=(0.8, 1.2),\n            rescale=1/255.0)\n\ntest_set = testgen.flow_from_dataframe(dataframe=test_df,\n                                    directory=test_dir,\n                                    x_col=\"image\",\n                                    y_col=None,\n                                    batch=batch,\n                                    seed=42,\n                                    shuffle=False,\n                                    class_mode=None,\n                                    target_size=(im_size,im_size))\n\n\n\nfrom tensorflow.keras.optimizers import RMSprop, Adam, SGD\nfrom keras.models import Sequential\nfrom tensorflow.keras.layers import Conv2D, Input, GlobalAveragePooling2D, ReLU, Flatten, Dense, Dropout, BatchNormalization, MaxPooling2D, GlobalMaxPooling2D\nimport tensorflow_addons\n\nwith strategy.scope():\n    base = tf.keras.applications.EfficientNetB7(weights=None,\n                                                include_top=False, \n                                                input_shape=(im_size, im_size, 3),\n                                                drop_connect_rate=0.4)\n\n    model_69 = Sequential()\n    model_69.add(base)\n    model_69.add(GlobalAveragePooling2D())\n    model_69.add(Dense(n_labels, activation = 'sigmoid'))\nmodel_69.load_weights('/kaggle/input/effnetb7-2/besteffb7_2.h5')\n\n\nwith strategy.scope():\n    base = tf.keras.applications.EfficientNetB7(weights=None,\n                                                include_top=False, \n                                                input_shape=(im_size, im_size, 3),\n                                                drop_connect_rate=0.4)\n    model_71 = Sequential()\n    model_71.add(base)\n    model_71.add(GlobalAveragePooling2D())\n    model_71.add(Dense(n_labels, activation = 'sigmoid'))\nmodel_71.load_weights('/kaggle/input/effmodel1-2/besteffb7.h5')\n\nwith strategy.scope():\n    base = tf.keras.applications.EfficientNetB7(weights=None,\n                                                include_top=False, \n                                                input_shape=(im_size, im_size, 3),\n                                                drop_connect_rate=0.4)\n    model_72 = Sequential()\n    model_72.add(base)\n    model_72.add(GlobalMaxPooling2D())\n    model_72.add(Dense(n_labels, activation = 'sigmoid'))\nmodel_72.load_weights('/kaggle/input/plant-1-model-2/bestplantmodel_1model.h5')\n\ntta_size = 3 \npreds = []\n\nfor i in range(tta_size):\n    test_set.reset()\n    preds.append(model_69.predict(test_set))\n    preds.append(model_71.predict(test_set))\n    preds.append(model_72.predict(test_set))\n    \npred = np.mean(np.array(preds), axis=0)\nname = {0: 'complex',\n        1: 'scab',\n        2: 'frog_eye_leaf_spot',\n        3: 'rust',\n        4: 'powdery_mildew',\n        6: 'healthy'}\n\nthreshold = {0: 0.26,\n             1: 0.61,\n             2: 0.7,\n             3: 0.5,\n             4: 0.5}\n\ndef get_key(val):\n    for key, value in name.items():\n        if val == value:\n            return key\n \n    return \"key doesn't exist\"\n\npred_str = []\nfor line in pred:\n    s = ''\n    for i in range(n_labels):\n        if line[i] > threshold[i]:\n            s = s + name[i] + ' '\n    \n    if s == '': \n        s = name[6]\n    pred_str.append(s)\n    \ntest_df['labels'] = pred_str\ntest_df.to_csv('submission.csv', index=False)\ntest_df.head()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}