Skip to content
Snippets Groups Projects
Jupyter Notebook Block 5 - Object Detection and Segmentation.ipynb 809 KiB
Newer Older
{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "dWyPGNkCGhIX"
   },
   "source": [
    "# Part I : Create Your Own Dataset and Train it with ConvNets\n",
    "\n",
    "In this part of the notebook, you will set up your own dataset for image classification. Please specify \n",
    "under `queries` the image categories you are interested in. Under `limit` specify the number of images \n",
    "you want to download for each image category. \n",
    "\n",
    "You do not need to understand the class `simple_image_download`, just execute the cell after you have specified \n",
    "the download folder.\n"
   ]
  },
  {
   "cell_type": "code",
Simon van Hemert's avatar
Simon van Hemert committed
   "execution_count": 1,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "8rckz3ZuGhIc",
    "outputId": "6f615f06-759a-4eea-839e-658155df8d36"
   },
Simon van Hemert's avatar
Simon van Hemert committed
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Found 2 image links\n",
      "Saved 2 images\n",
      "Found 2 image links\n",
Mirko Birbaumer's avatar
Mirko Birbaumer committed
      "Saved 2 images\n",
      "Found 2 image links\n",
      "Saved 2 images\n",
      "Found 2 image links\n",
      "Saved 2 images\n",
      "Found 2 image links\n",
      "Saved 2 images\n",
      "Found 2 image links\n",
      "Saved 2 images\n",
      "Found 2 image links\n",
      "Saved 2 images\n",
      "Found 2 image links\n",
      "ERROR - Could not save https://upload.wikimedia.org/wikipedia/commons/5/59/Marion_Cotillard_at_2019_Cannes.jpg - cannot identify image file <_io.BytesIO object at 0x7f1a0b4d6d70>\n",
      "Saved 1 images\n"
Simon van Hemert's avatar
Simon van Hemert committed
     ]
   "source": [
Simon van Hemert's avatar
Simon van Hemert committed
    "from selenium import webdriver\n",
    "from selenium.webdriver.firefox.options import Options\n",
    "from Image_crawling import Image_crawling\n",
    "\n",
    "# Specifiy the queries\n",
    "queries = [\"brad pitt\",\"johnny depp\", \"leonardo dicaprio\", \"robert de niro\", \"angelina jolie\", \"sandra bullock\", \"catherine deneuve\", \"marion cotillard\"]\n",
    "#queries = [\"Bart Simpson\",\"Homer Simpson\"]\n",
    "limit = 2\n",
Simon van Hemert's avatar
Simon van Hemert committed
    "download_folder = \"./brandnew_images/train/\"\n",
Simon van Hemert's avatar
Simon van Hemert committed
    "waittime = 0.1  # Time to wait between actions, depends on the number of pictures you want to crawl. More pictures means you need to wait longer for them to load. \n",
Simon van Hemert's avatar
Simon van Hemert committed
    "# Set options\n",
    "options = webdriver.FirefoxOptions()\n",
    "options.add_argument('--headless')\n",
Simon van Hemert's avatar
Simon van Hemert committed
    "# Create Driver\n",
    "driver = webdriver.Firefox(options=options, executable_path=\"/usr/bin/geckodriver\")\n",
Simon van Hemert's avatar
Simon van Hemert committed
    "# create instance of crawler\n",
    "image_crawling = Image_crawling(driver, waittime=waittime)\n",
Simon van Hemert's avatar
Simon van Hemert committed
    "# Find urls and download images\n",
Simon van Hemert's avatar
Simon van Hemert committed
    "for query in queries:\n",
    "    # Craws image urls:\n",
    "    image_urls = image_crawling.fetch_image_urls(query, limit)\n",
    "      \n",
    "    # download images\n",
    "    image_crawling.download_image(download_folder + query)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "CRHl9UX6GhIs"
   },
   "source": [
    "Please check carefully the downloaded images, there may be a lot of garbage! You definitely need to \n",
    "clean the data.\n",
    "\n",
    "In the following, you will apply data augmentation to your data set."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 95,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "3SX21FtcGhIu"
   },
   "outputs": [],
   "source": [
    "# General imports\n",
    "import tensorflow as tf\n",
    "tf.compat.v1.enable_eager_execution(\n",
    "    config=None, device_policy=None, execution_mode=None\n",
    ")\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
Mirko Birbaumer's avatar
Mirko Birbaumer committed
    "import os, datetime\n",
    "\n",
    "# Shortcuts to keras if (however from tensorflow)\n",
    "from tensorflow.keras.preprocessing.image import ImageDataGenerator\n",
    "from tensorflow.keras.models import Sequential\n",
    "from tensorflow.keras.layers import Conv2D, MaxPooling2D\n",
    "from tensorflow.keras.layers import Activation, Dropout, Flatten, Dense\n",
    "from tensorflow.keras.callbacks import TensorBoard \n",
    "\n",
    "# Shortcut for displaying images\n",
    "def plot_img(img):\n",
    "    plt.imshow(img, cmap='gray')\n",
    "    plt.axis(\"off\")\n",
    "    plt.show()\n",
    "    \n",
    "# The target image size can be fixed here (quadratic)\n",
    "# the ImageDataGenerator() automatically scales the images accordingly (aspect ratio is changed)\n",
    "image_size = 150"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 96,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "rN_Mp1rmGhI1",
    "outputId": "6417b1f9-e7d4-4d56-a213-191f9d17524a"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Found 480 images belonging to 8 classes.\n"
Mirko Birbaumer's avatar
Mirko Birbaumer committed
     "data": {
      "image/png": "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\n",
Mirko Birbaumer's avatar
Mirko Birbaumer committed
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "       0., 0., 0., 0., 0., 0., 0., 0.], dtype=float32)"
     "execution_count": 96,
Mirko Birbaumer's avatar
Mirko Birbaumer committed
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# These are the class names; this defines the ordering of the classes\n",
Simon van Hemert's avatar
Simon van Hemert committed
    "class_names = [\"brad pitt\", \"johnny depp\", \"leonardo dicaprio\", \"robert de niro\",\n",
    "           \"angelina jolie\", \"sandra bullock\", \"catherine deneuve\", \"marion cotillard\"]\n",
    "\n",
    "\n",
    "# Class ImageDataGenerator() returns an iterator holding one batch of images\n",
    "# the constructor takes arguments defining the different image transformations\n",
    "# for augmentation purposes (rotation, x-/y-shift, intensity scaling - here 1./255 \n",
    "# to scale range to [0, 1], shear, zoom, flip, ... )\n",
    "train_datagen = ImageDataGenerator(\n",
    "        rotation_range=10,\n",
    "        width_shift_range=0.2,\n",
    "        height_shift_range=0.2,\n",
    "        rescale=1./255,\n",
    "        shear_range=0.2,\n",
    "        zoom_range=0.2,\n",
    "        horizontal_flip=True,\n",
    "        fill_mode='nearest')\n",
    "\n",
    "\n",
    "dir_iter = train_datagen.flow_from_directory('./train/', \n",
    "                                         target_size=(image_size, image_size),\n",
    "                                         classes=class_names,\n",
    "                                         batch_size=25, class_mode='sparse', shuffle=False)\n",
    "\n",
Simon van Hemert's avatar
Simon van Hemert committed
    "plot_img(dir_iter[0][0][1,...])\n",
    "dir_iter[0][1]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "V2fYccc8GhJF"
   },
   "source": [
    "Before you continue, you need to split the downloaded images into a `train` folder and into a `validation` folder."
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {
    "colab_type": "raw",
    "id": "VamXG4FoGhJH"
   },
   "source": [
    "./\n",
    "├── train\n",
    "│   ├── brad pitt\n",
    "│   └── johnny deep\n",
    "|   ├── leonardo di caprio\n",
    "|   └── ...\n",
    "│       \n",
    "└── validation\n",
    "    ├── brad pitt\n",
    "    ├── johnny deep\n",
    "    ├── leonardo di caprio\n",
    "    └── ..."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "9322su6vGhJJ"
   },
   "source": [
Simon van Hemert's avatar
Simon van Hemert committed
    "If you want to use the example of this jupyter notebook, you can use the images provided in the ./train and ./validation folders."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "xPqJWgeAGhJL"
   },
   "source": [
    "## Define a ConvNet Model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 97,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "UuJV4JBKGhJO"
   },
   "outputs": [],
   "source": [
    "batch_size = 20\n",
    "num_train_images = 480\n",
    "num_valid_images = 80\n",
    "num_classes = 8\n",
    "\n",
    "model_scratch = Sequential()\n",
    "model_scratch.add(Conv2D(32, (3, 3), input_shape=(image_size, image_size, 3)))\n",
    "model_scratch.add(Activation('relu'))\n",
    "model_scratch.add(MaxPooling2D(pool_size=(2, 2)))\n",
    "\n",
    "model_scratch.add(Conv2D(32, (3, 3)))\n",
    "model_scratch.add(Activation('relu'))\n",
    "model_scratch.add(MaxPooling2D(pool_size=(2, 2)))\n",
    "\n",
    "model_scratch.add(Conv2D(64, (3, 3)))\n",
    "model_scratch.add(Activation('relu'))\n",
    "model_scratch.add(MaxPooling2D(pool_size=(2, 2)))\n",
    "\n",
    "# this converts our 3D feature maps to 1D feature vectors\n",
    "model_scratch.add(Flatten())  \n",
    "model_scratch.add(Dense(64))\n",
    "model_scratch.add(Activation('relu'))\n",
    "model_scratch.add(Dropout(0.5))\n",
    "model_scratch.add(Dense(num_classes))\n",
    "model_scratch.add(Activation('softmax'))\n",
    "\n",
    "model_scratch.compile(loss='categorical_crossentropy',\n",
    "              optimizer='adam',\n",
    "              metrics=['accuracy'])\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 98,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "JFdkIokMGhJT",
    "outputId": "63e7d032-4083-4fe0-d970-c10bf0c39a94"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Found 480 images belonging to 8 classes.\n",
      "Found 80 images belonging to 8 classes.\n"
     ]
    }
   ],
   "source": [
    "# This is the augmentation configuration we will use for training\n",
    "train_datagen = ImageDataGenerator(\n",
    "        rescale=1./255,\n",
    "        shear_range=0.2,\n",
    "        zoom_range=0.2,\n",
    "        horizontal_flip=True)\n",
    "\n",
    "# This is the augmentation configuration we will use for validation:\n",
    "# only rescaling\n",
    "validation_datagen = ImageDataGenerator(rescale=1./255)\n",
    "\n",
    "# This is a generator that will read pictures found in\n",
    "# subfolers of './train', and indefinitely generate\n",
    "# batches of augmented image data\n",
    "train_generator = train_datagen.flow_from_directory(\n",
    "        './train',  # this is the target directory\n",
    "        target_size=(image_size, image_size),  # all images will be resized to 150x150\n",
    "        classes=class_names,\n",
    "        batch_size=batch_size)  \n",
    "\n",
    "# This is a similar generator, for validation data\n",
    "validation_generator = validation_datagen.flow_from_directory(\n",
    "        './validation',\n",
    "        target_size = (image_size, image_size),\n",
    "        classes = class_names,\n",
    "        batch_size = batch_size)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 99,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "cytHiQUTGhJb"
   },
   "outputs": [],
   "source": [
Mirko Birbaumer's avatar
Mirko Birbaumer committed
    "logdir = os.path.join(\"logs\", datetime.datetime.now().strftime(\"%Y%m%d-%H%M%S\"))\n",
    "tensorboard_callback = tf.keras.callbacks.TensorBoard(logdir, histogram_freq=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 100,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "C7dCbyXPGhJg",
    "outputId": "98b4085e-ed6d-43e2-831f-aec32161583f"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/20\n",
      " 4/24 [====>.........................] - ETA: 23s - loss: 2.2787 - accuracy: 0.0750"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/opt/conda/lib/python3.7/site-packages/PIL/Image.py:952: UserWarning: Palette images with Transparency expressed in bytes should be converted to RGBA images\n",
      "  \"Palette images with Transparency expressed in bytes should be \"\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "24/24 [==============================] - 31s 1s/step - loss: 2.1227 - accuracy: 0.0979 - val_loss: 2.0783 - val_accuracy: 0.1375\n",
      "Epoch 2/20\n",
      "24/24 [==============================] - 29s 1s/step - loss: 2.0774 - accuracy: 0.1479 - val_loss: 2.0719 - val_accuracy: 0.1625\n",
      "Epoch 3/20\n",
      "24/24 [==============================] - 29s 1s/step - loss: 2.0655 - accuracy: 0.1417 - val_loss: 2.0479 - val_accuracy: 0.1875\n",
      "Epoch 4/20\n",
      "24/24 [==============================] - 30s 1s/step - loss: 2.0295 - accuracy: 0.2104 - val_loss: 2.0195 - val_accuracy: 0.2625\n",
      "Epoch 5/20\n",
      "24/24 [==============================] - 30s 1s/step - loss: 1.9806 - accuracy: 0.2104 - val_loss: 1.9734 - val_accuracy: 0.2625\n",
      "Epoch 6/20\n",
      "24/24 [==============================] - 29s 1s/step - loss: 1.9266 - accuracy: 0.2688 - val_loss: 1.9223 - val_accuracy: 0.2625\n",
      "Epoch 7/20\n",
      "24/24 [==============================] - 29s 1s/step - loss: 1.8778 - accuracy: 0.2438 - val_loss: 1.8354 - val_accuracy: 0.3375\n",
      "Epoch 8/20\n",
      "24/24 [==============================] - 29s 1s/step - loss: 1.8005 - accuracy: 0.2562 - val_loss: 1.7621 - val_accuracy: 0.3625\n",
      "Epoch 9/20\n",
      "24/24 [==============================] - 30s 1s/step - loss: 1.7497 - accuracy: 0.3333 - val_loss: 1.6562 - val_accuracy: 0.4000\n",
      "Epoch 10/20\n",
      "24/24 [==============================] - 29s 1s/step - loss: 1.6707 - accuracy: 0.3333 - val_loss: 1.5198 - val_accuracy: 0.4625\n",
      "Epoch 11/20\n",
      "24/24 [==============================] - 29s 1s/step - loss: 1.6633 - accuracy: 0.3958 - val_loss: 1.5632 - val_accuracy: 0.4750\n",
      "Epoch 12/20\n",
      "24/24 [==============================] - 31s 1s/step - loss: 1.6404 - accuracy: 0.3729 - val_loss: 1.5778 - val_accuracy: 0.4125\n",
      "Epoch 13/20\n",
      "24/24 [==============================] - 30s 1s/step - loss: 1.5924 - accuracy: 0.4021 - val_loss: 1.5459 - val_accuracy: 0.4125\n",
      "Epoch 14/20\n",
      "24/24 [==============================] - 28s 1s/step - loss: 1.5209 - accuracy: 0.4292 - val_loss: 1.5800 - val_accuracy: 0.3750\n",
      "Epoch 15/20\n",
      "24/24 [==============================] - 29s 1s/step - loss: 1.4475 - accuracy: 0.4417 - val_loss: 1.5742 - val_accuracy: 0.4000\n",
      "Epoch 16/20\n",
      "24/24 [==============================] - 28s 1s/step - loss: 1.4813 - accuracy: 0.4187 - val_loss: 1.5788 - val_accuracy: 0.3875\n",
      "Epoch 17/20\n",
      "24/24 [==============================] - 29s 1s/step - loss: 1.4735 - accuracy: 0.4437 - val_loss: 1.4948 - val_accuracy: 0.4375\n",
      "Epoch 18/20\n",
      "24/24 [==============================] - 27s 1s/step - loss: 1.4049 - accuracy: 0.4563 - val_loss: 1.4764 - val_accuracy: 0.5000\n",
      "Epoch 19/20\n",
      "24/24 [==============================] - 29s 1s/step - loss: 1.3805 - accuracy: 0.4917 - val_loss: 1.4958 - val_accuracy: 0.4750\n",
      "Epoch 20/20\n",
      "24/24 [==============================] - 29s 1s/step - loss: 1.3101 - accuracy: 0.4667 - val_loss: 1.5749 - val_accuracy: 0.4375\n"
     ]
    }
   ],
   "source": [
    "history = model_scratch.fit(\n",
Simon van Hemert's avatar
Simon van Hemert committed
    "    train_generator,\n",
    "    steps_per_epoch = num_train_images // batch_size,\n",
    "    epochs = 20,\n",
    "    validation_data = validation_generator,\n",
    "    validation_steps = num_valid_images // batch_size,\n",
    "    callbacks = [tensorboard_callback])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 101,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "wt_ONw5PGhJm",
    "outputId": "e75d8a73-da49-4dbe-ffcf-7cb316be39a2"
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(history.history['accuracy'])\n",
    "plt.plot(history.history['val_accuracy'])\n",
    "plt.title('model accuracy')\n",
    "plt.ylabel('accuracy')\n",
    "plt.xlabel('epoch')\n",
    "plt.legend(['train', 'valid'], loc='lower right')\n",
    "plt.show()\n",
    "plt.plot(history.history['loss'])\n",
    "plt.plot(history.history['val_loss'])\n",
    "plt.title('model loss')\n",
    "plt.ylabel('loss')\n",
    "plt.xlabel('epoch')\n",
    "plt.legend(['train', 'valid'], loc='upper right')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Tensorboard"
   ]
  },
  {
   "cell_type": "code",
Mirko Birbaumer's avatar
Mirko Birbaumer committed
   "execution_count": null,
   "metadata": {},
Mirko Birbaumer's avatar
Mirko Birbaumer committed
   "outputs": [],
   "source": [
    "# Load the TensorBoard notebook extension\n",
    "%load_ext tensorboard\n",
    "\n",
    "os.makedirs(logdir, exist_ok=True)\n",
    "%tensorboard --logdir logs"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "Y8oAT4oUGhJs"
   },
   "source": [
    "# Part II : Transfer Learning\n",
    "\n",
    "\n",
    "Having to train an image-classification model using very little data is a common situation,\n",
    "which you’ll likely encounter in practice if you ever do computer vision in a\n",
    "professional context. A “few” samples can mean anywhere from a few hundred to a\n",
    "few tens of thousands of images. As a practical example, we’ll focus on classifying\n",
    "560 images belongig to 8 actors. We’ll use 480 pictures for training, and 80 for validation.\n",
    "\n",
    "## 2.1 Feature Extraction with a Pretrained Model\n",
    "Feature extraction consists of using the representations learned by a previously\n",
    "trained model to extract interesting features from new samples. These features are\n",
    "then run through a new classifier, which is trained from scratch.\n",
    "As you saw previously, ConvNets used for image classification comprise two parts:\n",
    "they start with a series of pooling and convolution layers, and they end with a densely\n",
    "connected classifier. The first part is called the _convolutional base_ of the model. In the\n",
    "case of convnets, feature extraction consists of taking the convolutional base of a previously\n",
    "trained network, running the new data through it, and training a new classifier\n",
    "on top of the output.\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
Mirko Birbaumer's avatar
Mirko Birbaumer committed
   "outputs": [],
   "source": [
    "# General imports\n",
    "import tensorflow as tf\n",
    "tf.compat.v1.enable_eager_execution(\n",
    "    config=None, device_policy=None, execution_mode=None\n",
    ")\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import os, datetime\n",
    "\n",
    "# Shortcuts to keras if (however from tensorflow)\n",
    "from tensorflow import keras\n",
    "from tensorflow.keras.preprocessing.image import ImageDataGenerator\n",
    "from tensorflow.keras.models import Sequential\n",
    "from tensorflow.keras.layers import Conv2D, MaxPooling2D\n",
    "from tensorflow.keras.layers import Activation, Dropout, Flatten, Dense\n",
    "from tensorflow.keras.callbacks import TensorBoard \n",
    "from tensorflow.keras import layers"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<IPython.core.display.Image object>"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from IPython.display import Image\n",
    "Image(\"./Images/feature_extraction.png\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Why only reuse the convolutional base? Could we reuse the densely connected\n",
    "classifier as well? In general, doing so should be avoided. The reason is that the representations\n",
    "learned by the convolutional base are likely to be more generic and, therefore,\n",
    "more reusable: the feature maps of a ConvNet are presence maps of generic\n",
    "concepts over a picture, which are likely to be useful regardless of the computer vision\n",
    "problem at hand. But the representations learned by the classifier will necessarily be\n",
    "specific to the set of classes on which the model was trained—they will only contain\n",
    "information about the presence probability of this or that class in the entire picture.\n",
    "Additionally, representations found in densely connected layers no longer contain any information about where objects are located in the input image; these layers get rid of\n",
    "the notion of space, whereas the object location is still described by convolutional feature\n",
    "maps. For problems where object location matters, densely connected features\n",
    "are largely useless.\n",
    "\n",
    "\n",
    "Note that the level of generality (and therefore reusability) of the representations\n",
    "extracted by specific convolution layers depends on the depth of the layer in the\n",
    "model. Layers that come earlier in the model extract local, highly generic feature\n",
    "maps (such as visual edges, colors, and textures), whereas layers that are higher up\n",
    "extract more-abstract concepts (such as “cat ear” or “dog eye”). So if your new dataset\n",
    "differs a lot from the dataset on which the original model was trained, you may be better\n",
    "off using only the first few layers of the model to do feature extraction, rather than\n",
    "using the entire convolutional base.\n",
    "\n",
    "\n",
    "\n",
    "In this case, because the ImageNet class set does not contain images of actors, we’ll \n",
    "choose not to use the densely connected layers, in order to cover\n",
    "the more general case where the class set of the new problem doesn’t overlap the\n",
    "class set of the original model. Let’s put this into practice by using the convolutional\n",
    "base of the VGG16 network, trained on ImageNet, to extract interesting features\n",
    "from actors, and then train a classifier for the 8 actors on top of\n",
    "these features.\n",
    "\n",
    "The VGG16 model, among others, comes prepackaged with Keras. You can import\n",
    "it from the `keras.applications` module. Many other image-classification models (all\n",
    "pretrained on the ImageNet dataset) are available as part of `keras.applications`:\n",
    "\n",
    "\n",
    "-  Xception\n",
    "-  ResNet\n",
    "-  MobileNet\n",
    "-  EfficientNet\n",
    "-  DenseNet\n",
    "-  etc.\n",
    "\n",
    "Let's instantiate the VGG16 model."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "4Luec7pbGhJv",
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "# The target image size can be fixed here (quadratic)\n",
    "# The ImageDataGenerator() automatically scales the images accordingly (aspect ratio is changed)\n",
Mirko Birbaumer's avatar
Mirko Birbaumer committed
    "image_size = 150"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "eRes_n9BGhJ0"
   },
   "outputs": [],
   "source": [
    "conv_base = keras.applications.vgg16.VGG16(weights=\"imagenet\",\n",
    "                                           include_top=False,\n",
    "                                           input_shape=(image_size, image_size, 3))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "vEIWLeqSGhJ5"
   },
   "source": [
    "You pass three arguments to the constructor:\n",
    "\n",
    "- `weights` specifies the weight checkpoint from which to initialize the model.\n",
    "\n",
    "- `include_top` refers to including (or not) the densely connected classifier on\n",
    "top of the network. By default, this densely connected classifier corresponds to\n",
    "the 1'000 classes from ImageNet. Because we intend to use our own densely\n",
    "connected classifier (with 8 classes of actors), we don’t need to\n",
    "include it.\n",
    "- `input_shape` is the shape of the image tensors that we’ll feed to the network.\n",
    "This argument is purely optional: if we don’t pass it, the network will be able to\n",
    "process inputs of any size. Here we pass it so that we can visualize (in the following\n",
    "summary) how the size of the feature maps shrinks with each new convolution\n",
    "and pooling layer."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Here’s the detail of the architecture of the VGG16 convolutional base. It’s similar to\n",
    "the simple convnets you’re already familiar with:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "M7Bk7t1MGhJ6"
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model: \"vgg16\"\n",
      "_________________________________________________________________\n",
      " Layer (type)                Output Shape              Param #   \n",
      "=================================================================\n",
      " input_1 (InputLayer)        [(None, 150, 150, 3)]     0         \n",
      "                                                                 \n",
      " block1_conv1 (Conv2D)       (None, 150, 150, 64)      1792      \n",
      "                                                                 \n",
      " block1_conv2 (Conv2D)       (None, 150, 150, 64)      36928     \n",
      "                                                                 \n",
      " block1_pool (MaxPooling2D)  (None, 75, 75, 64)        0         \n",
      "                                                                 \n",
      " block2_conv1 (Conv2D)       (None, 75, 75, 128)       73856     \n",
      "                                                                 \n",
      " block2_conv2 (Conv2D)       (None, 75, 75, 128)       147584    \n",
      "                                                                 \n",
      " block2_pool (MaxPooling2D)  (None, 37, 37, 128)       0         \n",
      "                                                                 \n",
      " block3_conv1 (Conv2D)       (None, 37, 37, 256)       295168    \n",
      "                                                                 \n",
      " block3_conv2 (Conv2D)       (None, 37, 37, 256)       590080    \n",
      "                                                                 \n",
      " block3_conv3 (Conv2D)       (None, 37, 37, 256)       590080    \n",
      "                                                                 \n",
      " block3_pool (MaxPooling2D)  (None, 18, 18, 256)       0         \n",
      "                                                                 \n",
      " block4_conv1 (Conv2D)       (None, 18, 18, 512)       1180160   \n",
      "                                                                 \n",
      " block4_conv2 (Conv2D)       (None, 18, 18, 512)       2359808   \n",
      "                                                                 \n",
      " block4_conv3 (Conv2D)       (None, 18, 18, 512)       2359808   \n",
      "                                                                 \n",
      " block4_pool (MaxPooling2D)  (None, 9, 9, 512)         0         \n",
      "                                                                 \n",
      " block5_conv1 (Conv2D)       (None, 9, 9, 512)         2359808   \n",
      "                                                                 \n",
      " block5_conv2 (Conv2D)       (None, 9, 9, 512)         2359808   \n",
      "                                                                 \n",
      " block5_conv3 (Conv2D)       (None, 9, 9, 512)         2359808   \n",
      "                                                                 \n",
      " block5_pool (MaxPooling2D)  (None, 4, 4, 512)         0         \n",
      "                                                                 \n",
      "=================================================================\n",
      "Total params: 14,714,688\n",
      "Trainable params: 14,714,688\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "conv_base.summary()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "DBSrhVORGhKH"
   },
   "source": [
    "\n",
    "The final feature map (output volume) has shape $(5, 5, 512)$. That's the feature on top of which we will stick a densely connected classifier.\n",
    "\n",
    "At this point, there are two ways how we could proceed:\n",
    "\n",
    "- __Approach 1__: Run the convolutional base over our dataset, record its output to a NumPy array\n",
    "on disk, and then use this data as input to a standalone, densely connected classifier\n",
    "similar to those you saw in Block 4 of this course. This solution is fast and\n",
    "cheap to run, because it only requires running the convolutional base once for\n",
    "every input image, and the convolutional base is by far the most expensive part\n",
    "of the pipeline. But for the same reason, this technique won’t allow us to use\n",
    "data augmentation.\n",
    "\n",
    "- __Approach 2__: Extend the model we have (`conv_base`) by adding `Dense` layers on top, and run\n",
    "the whole thing from end to end on the input data. This will allow us to use\n",
    "data augmentation, because every input image goes through the convolutional\n",
    "base every time it’s seen by the model. But for the same reason, this technique is\n",
    "far more expensive than the first.\n",
    "We’ll cover both techniques. Let’s walk through the code required to set up the first\n",
    "one: recording the output of `conv_base` on our data and using these outputs as inputs\n",
    "to a new model."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "mlpIDmSCGhKI"
   },
   "source": [
    "### 1. Approach : Fast feature extraction without data augmentation\n",
    "We’ll start by extracting features as NumPy arrays by calling the `predict()` method of\n",
    "the `conv_base` model on our training, and validation datasets.\n",
    "Let’s iterate over our datasets to extract the VGG16 features."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Found 480 files belonging to 8 classes.\n",
      "Found 80 files belonging to 8 classes.\n"
     ]
    }
   ],
   "source": [
    "from tensorflow.keras.utils import image_dataset_from_directory\n",
    "train_dataset = image_dataset_from_directory(\n",
    "    './train',\n",
Mirko Birbaumer's avatar
Mirko Birbaumer committed
    "    image_size=(150, 150),\n",
    "    batch_size=32,\n",
    "    shuffle=False,\n",
    "    label_mode=\"categorical\")\n",
    "validation_dataset = image_dataset_from_directory(\n",
    "    './validation',\n",
Mirko Birbaumer's avatar
Mirko Birbaumer committed
    "    image_size=(150, 150),\n",
    "    batch_size=32,\n",
    "    shuffle=False,\n",
    "    label_mode=\"categorical\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "def get_features_and_labels(dataset):\n",
    "    all_features = []\n",
    "    all_labels = []\n",
    "    for images, labels in dataset:\n",
    "        preprocessed_images = keras.applications.vgg16.preprocess_input(images)\n",
    "        features = conv_base.predict(preprocessed_images)\n",
    "        all_features.append(features)\n",
    "        all_labels.append(labels)\n",
    "    return np.concatenate(all_features), np.concatenate(all_labels)\n",
    "train_features, train_labels = get_features_and_labels(train_dataset)\n",
    "val_features, val_labels = get_features_and_labels(validation_dataset)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Importantly, `predict()` only expects images, not labels, but our current dataset yields\n",
    "batches that contain both images and their labels. Moreover, the VGG16 model expects\n",
    "inputs that are preprocessed with the function `keras.applications.vgg16.preprocess_input`, which scales pixel values to an appropriate range.\n",
    "The extracted features are currently of shape `(samples, 5, 5, 512)`:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(480, 4, 4, 512)"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_features.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "And the labels are now referring to the order of the folders"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(480, 8)"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_labels.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(80, 4, 4, 512)\n",
      "(80, 8)\n"
     ]
    }
   ],
   "source": [
    "print(val_features.shape)\n",
    "print(val_labels.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
Mirko Birbaumer's avatar
Mirko Birbaumer committed
    "inputs = keras.Input(shape=(4, 4, 512))\n",
    "# Note the use of the Flatten\n",
    "# layer before passing the\n",
    "# features to a Dense layer\n",
    "x = layers.Flatten()(inputs)\n",
    "x = layers.Dense(256)(x)\n",
    "x = layers.Dropout(0.7)(x)\n",
    "outputs = layers.Dense(8, activation=\"softmax\")(x)\n",
    "model = keras.Model(inputs, outputs)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model: \"model\"\n",
      "_________________________________________________________________\n",
      " Layer (type)                Output Shape              Param #   \n",
      "=================================================================\n",
      " input_3 (InputLayer)        [(None, 4, 4, 512)]       0         \n",
      "                                                                 \n",
      " flatten (Flatten)           (None, 8192)              0         \n",
      "                                                                 \n",
      " dense (Dense)               (None, 256)               2097408   \n",
      "                                                                 \n",
      " dropout (Dropout)           (None, 256)               0         \n",
      "                                                                 \n",
      " dense_1 (Dense)             (None, 8)                 2056      \n",
      "                                                                 \n",
      "=================================================================\n",
      "Total params: 2,099,464\n",
      "Trainable params: 2,099,464\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]