{"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 numpy as np \nimport pandas as pd \nimport os\nimport tensorflow as tf\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nimport keras\nfrom keras.preprocessing import image\nfrom keras.models import Sequential\nfrom keras.layers import Conv2D, MaxPool2D, Flatten,Dense,Dropout,BatchNormalization\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator\nimport cv2\nfrom PIL import Image","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"path = '../input/plant-pathology-2021-fgvc8'\ntrain_dir = '../input/plant-pathology-2021-fgvc8/train_images'\ntest_dir = '../input/plant-pathology-2021-fgvc8/test_images' \n\ndf = pd.read_csv('../input/plant-pathology-2021-fgvc8/train.csv')\ndf.head()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df.labels.value_counts()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df['labels'].unique()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df['labels'] = df['labels'].astype(str) ","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"'''\ndef plot_examples(label):\n    fig, ax = plt.subplots(1, 2, figsize=(25, 15))\n    ax = ax.ravel()\n    for i in range(2):\n        idx = df[df['labels']==label].index[i]\n        image = cv2.imread(train_dir+df.loc[idx, 'image'])\n        \n        image =cv2.cvtColor(image, cv2.COLOR_BGR2RGB)\n        ax[i].imshow(image)\n        ax[i].set_title(label)\n        ax[i].set_xticklabels([])\n        ax[i].set_yticklabels([])\n\nfor labels in list(df['labels'].unique()):\n    plot_examples(labels)'''","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_datagen  = ImageDataGenerator(rotation_range = 180,\n                                   width_shift_range = 0.1,\n                                   height_shift_range = 0.1,\n                                   horizontal_flip = True,\n                                   rescale = 1./255,\n                                   zoom_range = 0.2,\n                                   validation_split = 0.2)\ntest_datagen  = ImageDataGenerator(rescale = 1./255,\n                                   validation_split = 0.2)\n\ntrain_generator = train_datagen.flow_from_dataframe(dataframe = df,\n                                                   directory = train_dir,\n                                                   target_size = (150,150),\n                                                   x_col = 'image',\n                                                   y_col = 'labels',\n                                                   batch_size = 256,\n                                                   color_mode = 'rgb',\n                                                   class_mode = 'categorical',\n                                                   subset = 'training')\n\ntest_generator = test_datagen.flow_from_dataframe(dataframe = df,\n                                                 directory = train_dir,\n                                                 target_size = (150,150),\n                                                 x_col = 'image',\n                                                 y_col = 'labels',\n                                                 batch_size = 256,\n                                                 color_mode = 'rgb',\n                                                 class_mode = 'categorical',\n                                                 subset = 'validation')\n","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = Sequential()\nmodel.add(Conv2D(16,(3,3),activation='relu',padding='same',input_shape=[150,150,3]))\nmodel.add(MaxPool2D(2,2))\nmodel.add(Dropout(0.2))\n\nmodel.add(Conv2D(16,(3,3),activation='relu',padding='same'))\nmodel.add(MaxPool2D(2,2))\nmodel.add(Dropout(0.2))\n\nmodel.add(Conv2D(8,(3,3),activation='relu',padding='same'))\nmodel.add(MaxPool2D(2,2))\nmodel.add(Dropout(0.2))\n\nmodel.add(Conv2D(8,(3,3),activation='relu',padding='same'))\nmodel.add(MaxPool2D(2,2))\nmodel.add(Dropout(0.2))\n\nmodel.add(Flatten())\nmodel.add(Dense(1024,activation='relu'))\nmodel.add(Dense(12,activation='softmax'))","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from tensorflow.keras.optimizers import RMSprop,Adam\nepochs = 10\nBatch_size = 64\noptimizer = Adam(lr = 0.001)\nmodel.compile(loss = 'categorical_crossentropy',optimizer = optimizer,metrics = ['accuracy'])\n\nmodel.summary()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#history = model.fit_generator(train_generator,epochs = epochs,validation_data = test_generator)\nhistory = model.fit(train_generator,epochs = 2,batch_size=64,validation_data = test_generator)\n\n#prediction = model.predict(test_generator)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"prediction = model.predict(test_generator)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"prediction = np.argmax(prediction,axis=1)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"dictionary = {1:'healthy',2: 'scab frog_eye_leaf_spot complex',3: 'scab',4: 'complex',5:'rust', 6:'frog_eye_leaf_spot', \n 7:'powdery_mildew',8:'scab frog_eye_leaf_spot', 9:'frog_eye_leaf_spot complex',10: 'rust frog_eye_leaf_spot', \n 11: 'powdery_mildew complex',12: 'rust complex'}","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"classes = []\nprediction = []\nfor i in range(0,len(prediction)):\n    temp = prediction[i]\n    ans = dictionary[temp]\n    classes.append(ans)\n    \n#print(classes)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test = pd.read_csv('../input/plant-pathology-2021-fgvc8/sample_submission.csv') \nprint(test.shape)\n\n\ntest_dir = '../input/plant-pathology-2021-fgvc8/test_images'\ntest_df = pd.DataFrame()\ntest_df['image'] = os.listdir(test_dir)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"datagen  = ImageDataGenerator(rotation_range = 180,\n                                   width_shift_range = 0.1,\n                                   height_shift_range = 0.1,\n                                   horizontal_flip = True,\n                                   rescale = 1./255,\n                                   zoom_range = 0.2,\n                                   validation_split = 0.2)\n\ntest_set = datagen.flow_from_dataframe(\n    dataframe= test_df,\n    directory = test_dir,\n    x_col=\"image\",\n    y_col= None,\n    color_mode=\"rgb\",\n    target_size = (150,150),\n    classes=None,\n    class_mode=None,\n    batch_size=32,\n    shuffle=False,\n    seed=40,\n)\n\nprint(test_set[0].shape)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(test_set[0].shape)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"preds = model.predict(test_set)\n\npreds","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"final = []\nindex = []\nfor i in range(0,len(preds)):\n    temp = preds[i]\n    l = []\n    for j in range(0,len(temp)):\n        if j==0 and temp[j]>0.27:\n            l.append(j+1)\n            break\n        if temp[j]>0.14 and j!=0:     \n            l.append(j+1)\n    index.append(l)\n    \nprint(index)\n\n'''labels = []\nfor i in range(0,index):\n    temp = index[i]\n'''\n\n\n'''    \ntest_df['labels'] = classes\ntest_df.to_csv('submission.csv', index=False) \ntest_df.head()'''","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"labels_out = []\nfor i in range(0,len(index)):\n    t = ''\n    for j in range(0,len(index[i])):\n        t = t + dictionary[index[i][j]] + ' '\n    if len(t)==0:\n        t = 'healthy' \n    labels_out.append(t)\n\nprint(labels_out)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from collections import Counter\n  \ndef remov_duplicates(input):\n  \n    input = input.split(\" \")\n  \n    for i in range(0, len(input)):\n        input[i] = \"\".join(input[i])\n  \n    UniqW = Counter(input)\n  \n    s = \" \".join(UniqW.keys())\n    return s","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submit = []\n\nfor i in range(0,len(labels_out)):\n    ans = remov_duplicates(labels_out[i])\n    submit.append(ans)\n    \nprint(submit)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_df['labels'] = submit\ntest_df.to_csv('submission.csv', index=False)\ntest_df.head()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df = pd.read_csv(\"./submission.csv\")\ndf.head()","metadata":{"trusted":true},"execution_count":null,"outputs":[]}]}