{"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\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 read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n\n# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"from tensorflow.keras.layers import Activation, Dropout, Flatten, Dense, Conv2D, MaxPooling2D, GlobalAveragePooling2D\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator\nfrom tensorflow.keras.models import Sequential\nfrom tensorflow.keras.optimizers import Adam\nfrom tensorflow.keras.preprocessing import image\nimport tensorflow as tf\nfrom PIL import Image\nimport seaborn as sns\nimport os, cv2, json\nimport matplotlib.pyplot as plt\nimport albumentations as aug\nfrom keras.optimizers import SGD\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import warnings\nwarnings.simplefilter(\"ignore\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"general_path = '../input/cassava-leaf-disease-classification/'\nos.listdir(general_path)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"with open(os.path.join(general_path, \"label_num_to_disease_map.json\")) as file:\n    map_classes = json.loads(file.read())\n    map_classes = {int(k) : v for k, v in map_classes.items()}\n    \n    print(json.dumps(map_classes, indent=4))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"input_files = os.listdir(os.path.join(general_path, \"train_images\"))\nprint(f\"Number of train images: {len(input_files)}\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"img_shapes = {}\nfor image_name in os.listdir(os.path.join(general_path, \"train_images\"))[:300]:\n    image = cv2.imread(os.path.join(general_path, \"train_images\", image_name))\n    img_shapes[image.shape] = img_shapes.get(image.shape, 0) + 1\n\nprint(img_shapes)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df_train = pd.read_csv(os.path.join(general_path, \"train.csv\"))\n\ndf_train[\"class_name\"] = df_train[\"label\"].map(map_classes)\n\ndf_train","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"plt.figure(figsize=(8, 4))\nsns.countplot(y=\"class_name\", data=df_train);","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def visualize_batch(image_ids, labels,class_name):\n    plt.figure(figsize=(16, 12))\n    \n    for ind, (image_id, label,class_name) in enumerate(zip(image_ids, labels,class_name)):\n        plt.subplot(3, 3, ind + 1)\n        image = cv2.imread(os.path.join(general_path, \"train_images\", image_id))\n        image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)\n\n        plt.imshow(image)\n        plt.title(f\"Class {label}:  {class_name}\", fontsize=12)\n        plt.axis(\"off\")\n    \n    plt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"tmp_df = df_train[df_train[\"label\"] == 0]\nprint(f\"Total train images for class 0: {tmp_df.shape[0]}\")\n\ntmp_df = tmp_df.sample(6)\nimage_ids = tmp_df[\"image_id\"].values\nlabels = tmp_df[\"label\"].values\nclass_name = tmp_df[\"class_name\"].values\n\nvisualize_batch(image_ids, labels,class_name)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"tmp_df = df_train[df_train[\"label\"] == 1]\nprint(f\"Total train images for class 1: {tmp_df.shape[0]}\")\n\ntmp_df = tmp_df.sample(6)\nimage_ids = tmp_df[\"image_id\"].values\nlabels = tmp_df[\"label\"].values\nclass_name = tmp_df[\"class_name\"].values\n\n\nvisualize_batch(image_ids, labels,class_name)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"tmp_df = df_train[df_train[\"label\"] == 2]\nprint(f\"Total train images for class 2: {tmp_df.shape[0]}\")\n\ntmp_df = tmp_df.sample(6)\nimage_ids = tmp_df[\"image_id\"].values\nlabels = tmp_df[\"label\"].values\nclass_name = tmp_df[\"class_name\"].values\n\n\nvisualize_batch(image_ids,labels, class_name)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"tmp_df = df_train[df_train[\"label\"] == 3]\nprint(f\"Total train images for class 2: {tmp_df.shape[0]}\")\n\ntmp_df = tmp_df.sample(6)\nimage_ids = tmp_df[\"image_id\"].values\nlabels = tmp_df[\"label\"].values\nclass_name = tmp_df[\"class_name\"].values\nvisualize_batch(image_ids, labels,class_name)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"tmp_df = df_train[df_train[\"label\"] == 4]\nprint(f\"Total train images for class 4: {tmp_df.shape[0]}\")\n\ntmp_df = tmp_df.sample(6)\nimage_ids = tmp_df[\"image_id\"].values\nlabels = tmp_df[\"label\"].values\nclass_name = tmp_df[\"class_name\"].values\n\nvisualize_batch(image_ids, labels,class_name)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def plot_augmentation(image_id, transform):\n    plt.figure(figsize=(12, 12))\n    img = cv2.imread(os.path.join(general_path, \"train_images\", image_id))\n    img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)\n\n    plt.subplot(2, 2, 1)\n    plt.imshow(img)\n    plt.axis(\"off\")\n    plt.title(\"original\")\n    \n    plt.subplot(2, 2, 2)\n    x = transform(image=img)[\"image\"]\n    plt.imshow(x)\n    plt.axis(\"off\")\n    plt.title(\"Augmentation -1\")\n\n    \n    plt.subplot(2, 2, 3)\n    x = transform(image=img)[\"image\"]\n    plt.imshow(x)\n    plt.axis(\"off\")\n    plt.title(\"Augmentation -2\")\n    \n    plt.subplot(2, 2, 4)\n    x = transform(image=img)[\"image\"]\n    plt.imshow(x)\n    plt.axis(\"off\")\n    plt.title(\"Augmentation -3\")\n    \n    plt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"transform_shift_scale_rotate = aug.ShiftScaleRotate(\n    p=1.0, \n    shift_limit=(-0.3, 0.3), \n    scale_limit=(-0.1, 0.1), \n    rotate_limit=(-180, 180), \n    interpolation=0, \n    border_mode=4, \n)\n\nplot_augmentation(\"1003442061.jpg\", transform_shift_scale_rotate)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"transform_coarse_dropout = aug.CoarseDropout(\n    p=1.0, \n    max_holes=100, \n    max_height=50, \n    max_width=50, \n    min_holes=30, \n    min_height=20, \n    min_width=20,\n)\n\nplot_augmentation(\"1003442061.jpg\", transform_coarse_dropout)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"transform_coarse_dropout = aug.HueSaturationValue(\n    hue_shift_limit=0,\n    sat_shift_limit=(40,80),\n    val_shift_limit=(40,80)\n)\n\nplot_augmentation(\"5912799.jpg\", transform_coarse_dropout)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"transform_coarse_dropout = aug.CLAHE(\n \n     always_apply=False,\n      p=1.0,\n      clip_limit=(10, 30),\n      tile_grid_size=(10, 10))\nplot_augmentation(\"999329392.jpg\", transform_coarse_dropout)\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"transform_coarse_dropout = aug.RandomFog( p=1.0)\nplot_augmentation(\"999329392.jpg\", transform_coarse_dropout)\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"transform_coarse_dropout = aug.RandomSunFlare( p=1.0)\nplot_augmentation(\"999329392.jpg\", transform_coarse_dropout)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"transform_coarse_dropout = aug.RandomBrightness( p=1.0)\nplot_augmentation(\"999329392.jpg\", transform_coarse_dropout)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"transform_coarse_dropout = aug.RandomCrop(p=1,height = 512, width = 512)\nplot_augmentation(\"999329392.jpg\", transform_coarse_dropout)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"transform_coarse_dropout = aug.RGBShift(p=1)\nplot_augmentation(\"999329392.jpg\", transform_coarse_dropout)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"transform_coarse_dropout = aug.RandomSnow(p=1)\nplot_augmentation(\"999329392.jpg\", transform_coarse_dropout)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"transform_coarse_dropout = aug.HorizontalFlip(p=1)\nplot_augmentation(\"999329392.jpg\", transform_coarse_dropout)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"transform_coarse_dropout = aug.VerticalFlip(p=1)\nplot_augmentation(\"999329392.jpg\", transform_coarse_dropout)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"transform_coarse_dropout = aug.RandomContrast(limit = 0.5,p = 1)\nplot_augmentation(\"999329392.jpg\", transform_coarse_dropout)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"transform_coarse_dropout = aug.Cutout(p=1)\nplot_augmentation(\"999329392.jpg\", transform_coarse_dropout)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"transform_coarse_dropout = aug.Transpose(p=1)\nplot_augmentation(\"999329392.jpg\", transform_coarse_dropout)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"img_width, img_height = 260, 260\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train = pd.read_csv(general_path + 'train.csv')\ntrain['label'] = train['label'].astype('string')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"datagen = ImageDataGenerator(validation_split=0.2,\n    shear_range=0.2,\n    zoom_range=0.2,\n    horizontal_flip=True,\n    vertical_flip=True\n                    )\n\n                             \ntrain_datagen_flow = datagen.flow_from_dataframe(dataframe=train,\n                                                 directory=general_path + 'train_images',\n                                                 x_col='image_id',\n                                                 y_col='label',\n                                                 target_size=(img_width, img_height),\n                                                 batch_size=64,\n                                                 subset='training')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"datagen2 = ImageDataGenerator(validation_split=0.2,\n    shear_range=0.2,\n    zoom_range=0.2,\n    horizontal_flip=True,\n    vertical_flip=True\n                   )\n\nvalid_datagen_flow = datagen2.flow_from_dataframe( \n    dataframe=train,\n    directory=general_path + 'train_images', \n    x_col='image_id',\n    y_col='label',\n    target_size=(img_width, img_height),\n    batch_size=64,\n    subset='validation')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"x,y = train_datagen_flow.next()\nfor i in range(0,1):\n    image = x[i]/255\n    plt.imshow(image)\n   \n    \n    \n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from tensorflow.keras.models import load_model\nmodel=load_model(\"../input/modell/last_model.h5\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import keras.preprocessing.image","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"preds = []\nss = pd.read_csv('../input/cassava-leaf-disease-classification/sample_submission.csv')\n\nfor image in ss.image_id:\n    img = keras.preprocessing.image.load_img('../input/cassava-leaf-disease-classification/test_images/' + image)\n    img = keras.preprocessing.image.img_to_array(img)\n    img = keras.preprocessing.image.smart_resize(img, (img_width, img_height))\n    img = np.expand_dims(img, 0)\n    prediction = model.predict(img)\n    preds.append(np.argmax(prediction))\n\nmy_submission = pd.DataFrame({'image_id': ss.image_id, 'label': preds})\nmy_submission.to_csv('submission.csv', index=False) ","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"my_submission","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"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}