TP-reseaux-profond/TP7.ipynb
2023-06-22 20:35:38 +02:00

1554 lines
298 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "CVz03XXMKMoz"
},
"source": [
"# Détection d'objet : version simplifiée de YOLO\n",
"\n",
"<center> <img src=\"https://drive.google.com/uc?id=1V4aAS7K_Akj83apuMZ2vRjNvjgdgoOCh\" width=500></center>\n",
"<caption><center> Pipeline de l'algorithme YOLO ([Redmon 2016]) </center></caption>\n",
"\n",
"Dans ce TP, nous allons tenter d'aller un peu plus loin que le TP précédent en considérant le problème plus complexe de la détection d'objet, c'est-à-dire de la localisation et la classification conjointe de tous les objets dans l'image ; pour cela nous allons implémenter une version simplifiée de YOLO. Cette version est considérée simplifiée car ne reprenant pas l'intégralité des éléments décrite dans l'article de Redmon (par exemple, sur le choix de l'optimiseur). Une des simplifications principales est également que nous ne considérerons **qu'un objet par cellule**.\n",
"\n",
"Pour rappel, l'idée de YOLO est de découper l'image en une grille de cellules et de réaliser une prédiction de plusieurs boîtes englobantes ainsi qu'une classification par cellule. La vidéo de la cellule suivante rappelle les concepts vus en cours sur YOLO et la détection d'objet en général.\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"id": "H-8wH0b0jquq"
},
"outputs": [
{
"data": {
"text/html": [
"\n",
" <iframe\n",
" width=\"640\"\n",
" height=\"360\"\n",
" src=\"https://video.polymny.studio/?v=012cd29c-db98-458f-80d3-6cc5c1da9be3/\"\n",
" frameborder=\"0\"\n",
" allowfullscreen\n",
" \n",
" ></iframe>\n",
" "
],
"text/plain": [
"<IPython.lib.display.IFrame at 0x7fa23d798610>"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from IPython.display import IFrame\n",
"IFrame(\"https://video.polymny.studio/?v=012cd29c-db98-458f-80d3-6cc5c1da9be3/\", width=640, height=360)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Nsjid8knt6GZ"
},
"source": [
"Récupération des données"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"id": "wvf5aZetUIE0"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"fatal: le chemin de destination 'wildlife' existe déjà et n'est pas un répertoire vide.\n"
]
}
],
"source": [
"!git clone https://github.com/axelcarlier/wildlife.git"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "MZu_3SudL_ll"
},
"source": [
"\n",
"## Fonctions utiles"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Hw4t0vv5uAYv"
},
"source": [
"Définition des différentes variables utiles pour la suite"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"id": "79AGCFLvMUlw"
},
"outputs": [],
"source": [
"IMAGE_SIZE = 64 # Dimension des images en entrée du réseau\n",
"CELL_PER_DIM = 8 # Nombre de cellules en largeur et en hauteur\n",
"BOX_PER_CELL = 1 # Nombre d'objets par cellule\n",
"NB_CLASSES = 4 # Nombre de classes du problème\n",
"PIX_PER_CELL = round(IMAGE_SIZE/CELL_PER_DIM)\n",
"\n",
"CLASS_LABELS = ['buffalo', 'elephant', 'rhino', 'zebra']"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "ynBA-Pn5RUmY"
},
"source": [
"### Chargement des données"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "qyJTpIjFTGii"
},
"source": [
"On charge les images dans la dimension demandée, dans un tenseur $x$. Pour les labels, on ne les structure pas directement dans le format YOLO, mais on les place dans une liste de liste de listes : la longueur de la liste parente est celle du nombre d'images de la base, celle de la liste intermédiaire est celle du nombre d'objets d'une image donnée, et enfin la liste de plus bas niveau a une longueur 5 et contiendra les coordonnées de boîte englobante et les labels de classe associés. "
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"id": "gStC1HJXTFe8"
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/tmp/ipykernel_918015/1607050384.py:40: DeprecationWarning: ANTIALIAS is deprecated and will be removed in Pillow 10 (2023-07-01). Use Resampling.LANCZOS instead.\n",
" img = img.resize((IMAGE_SIZE, IMAGE_SIZE), Image.ANTIALIAS)\n"
]
}
],
"source": [
"import numpy as np\n",
"\n",
"import math\n",
"\n",
"\n",
"import PIL\n",
"from PIL import Image\n",
"import glob, os, sys\n",
"\n",
"for file in glob.glob(\"*.txt\"):\n",
" print(file)\n",
"\n",
"def load_data_detection(ds_path):\n",
" \n",
" y_paths = []\n",
" # Détermination du nombre d'images total\n",
" for c in CLASS_LABELS:\n",
" path = ds_path + c + '/'\n",
" for file in os.listdir(path):\n",
" if file.endswith('.txt'):\n",
" y_paths.append(os.path.join(path, file))\n",
"\n",
" dataset_size = len(y_paths)\n",
" \n",
" # Préparation des structures de données pour x et y\n",
" x = np.zeros((dataset_size, IMAGE_SIZE, IMAGE_SIZE, 3))\n",
" y = []\n",
"\n",
" for i in range(len(y_paths)):\n",
" text_path = y_paths[i]\n",
" img_path = text_path[:-3] + 'jpg'\n",
" \n",
" if not os.path.exists(img_path):\n",
" img_path = text_path[:-3] + 'JPG'\n",
"\n",
" # Lecture de l'image : on va remplir la variable x\n",
" # Lecture de l'image\n",
" img = Image.open(img_path)\n",
" # Mise à l'échelle de l'image\n",
" img = img.resize((IMAGE_SIZE, IMAGE_SIZE), Image.ANTIALIAS)\n",
" # Remplissage de la variable x\n",
" x[i] = np.asarray(img, dtype=np.int32)\n",
"\n",
" # Texte : coordonnées de boîtes englobantes pour remplir y\n",
" boxes = []\n",
" # Texte : coordonnées de boîtes englobantes pour remplir y\n",
" text_file = open(text_path, \"r\")\n",
" # Récupération des lignes du fichier texte\n",
" rows = text_file.read().split('\\n')\n",
" # Parcours de chaque ligne\n",
" for row in rows:\n",
" if row != '':\n",
" # Séparation des différentes informations\n",
" row = list(row.split(' '))\n",
" box = []\n",
" # réorganisation : les 4 coordonnées de boîte englobantes (castées en flottants) d'abord\n",
" for r in row[1:]:\n",
" box.append(float(r))\n",
" \n",
" box_normal = [box[0]-box[2]/2, box[1]-box[3]/2, box[0]+box[2]/2, box[1]+box[3]/2] \n",
"\n",
" # Puis le label de classe (casté en entier) à la suite\n",
" box.append(int(row[0]))\n",
" boxes.append(box)\n",
"\n",
" y.append(boxes)\n",
" return x, y\n",
"\n",
"# Chemin vers la base de données\n",
"ds_path = \"./wildlife/\" \n",
"x, y = load_data_detection(ds_path)\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "1HQNMBwSDhXp"
},
"source": [
"### Affichage des données\n",
"\n",
"Le code ci-dessous vous permettra d'afficher les images ainsi que leurs boîtes englobantes associées. On peut spécifier l'id d'une image en particulier ou, si l'on en spécifie pas, visualiser une image aléatoire."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"id": "gK0Xl-CgDjjd"
},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"from scipy.special import softmax\n",
"import matplotlib.pyplot as plt\n",
"\n",
"def print_data_detection(x, y, id=None, classes=CLASS_LABELS, image_size=IMAGE_SIZE):\n",
" if id==None:\n",
" # Tirage aléatoire d'une image dans la base\n",
" num_img = np.random.randint(x.shape[0]) \n",
" else:\n",
" num_img = id\n",
"\n",
" img = x[num_img]\n",
" if np.max(img) > 1:\n",
" img = img/255\n",
" boxes = y[num_img]\n",
"\n",
" colors = [\"blue\", \"yellow\", \"red\", \"orange\"] # Différentes couleurs pour les différentes classes\n",
"\n",
" # Affichage de l'image\n",
" plt.imshow(img)\n",
" for box in boxes:\n",
"\n",
" # Détermination de la classe\n",
" class_id = box[4]\n",
" \n",
" # Détermination des extrema de la boîte englobante\n",
" p_x = [(box[0]-box[2]/2) * IMAGE_SIZE, (box[0]+box[2]/2) * IMAGE_SIZE]\n",
" p_y = [(box[1]-box[3]/2) * IMAGE_SIZE, (box[1]+box[3]/2) * IMAGE_SIZE]\n",
"\n",
" # Affichage de la boîte englobante, dans la bonne couleur\n",
" plt.plot([p_x[0], p_x[0]],p_y,color=colors[class_id])\n",
" plt.plot([p_x[1], p_x[1]],p_y,color=colors[class_id])\n",
" plt.plot(p_x,[p_y[0],p_y[0]],color=colors[class_id])\n",
" plt.plot(p_x,[p_y[1],p_y[1]],color=colors[class_id], label=classes[class_id])\n",
" #plt.title(\"Vérité Terrain : Image {}\".format(num_img, classes[class_id]))\n",
" \n",
" plt.legend(bbox_to_anchor=(1.04,1), loc=\"upper left\")\n",
" plt.axis('off')\n",
" plt.show() \n",
"\n",
"\n",
"print_data_detection(x, y, id=22)\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "77EZpBu8F1Y2"
},
"source": [
"### Écriture des labels au format YOLO"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "JOVhY98p5WDZ"
},
"source": [
"Les deux fonctions ci-dessous sont essentielles car elles permettent de convertir les boîtes englobantes dans le format adopté par YOLO (voir la section Modèle un peu plus bas), mais également de faire l'opération inverse afin d'interpréter la sortie du réseau.\n",
"\n",
"Notez que la fonction *get_box_from_yolo* intègre dans les boîtes englobantes une information supplémentaire par rapport aux données chargées initialement : la probabilité de présence associée à la boîte englobante."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"id": "vYbQVxZXGAET"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[[0.43125, 0.50188, 0.5925, 0.996241, 0]], [[0.565625, 0.499324, 0.51875, 0.639189, 0]]]\n",
"[[[0.43125, 0.50188, 0.5925, 0.996241, 0, 1.0]], [[0.565625, 0.499324, 0.51875, 0.639189, 0, 1.0]]]\n"
]
}
],
"source": [
"from tensorflow.keras.utils import to_categorical\n",
"from scipy.special import expit, softmax\n",
"\n",
"\n",
"def set_box_for_yolo(y, num_classes=NB_CLASSES, image_size=IMAGE_SIZE, cell_size=PIX_PER_CELL):\n",
" nb_cells_per_dim = round(image_size/cell_size)\n",
"\n",
" y_YOLO = np.zeros((len(y), nb_cells_per_dim, nb_cells_per_dim, 1 + 4 + num_classes))\n",
"\n",
" for i in range(len(y)):\n",
" for box in y[i]:\n",
" # Coordonnées du centre de la boîte englobante dans le repère image\n",
" cx, cy = box[0] * image_size, box[1] * image_size\n",
" # Détermination des indices de la cellule dans laquelle tombe le centre\n",
" ind_x, ind_y = int(cx // cell_size), int(cy // cell_size)\n",
" # YOLO : \"The (x, y) coordinates represent the center of the box relative to the bounds of the grid cell.\"\n",
" # On va donc calculer les coordonnées du centre relativement à la cellule dans laquelle il se situe\n",
" y_YOLO[i, ind_x, ind_y, 1] = (cx - ind_x * cell_size) / cell_size\n",
" y_YOLO[i, ind_x, ind_y, 2] = (cy - ind_y * cell_size) / cell_size\n",
" # Largeur et hauteur de boîte\n",
" y_YOLO[i, ind_x, ind_y, 3] = box[2]\n",
" y_YOLO[i, ind_x, ind_y, 4] = box[3]\n",
"\n",
" # Indice de confiance de la boîte englobante pour la cellule correspondante\n",
" y_YOLO[i, ind_x, ind_y, 0] = 1\n",
" # On range les probabilités de classe à la fin du vecteur ([ Présence ; cx ; cy ; w ; h ; CLASSES])\n",
" y_YOLO[i, ind_x, ind_y, 5:] = to_categorical(box[4], num_classes=num_classes)\n",
"\n",
" return y_YOLO\n",
"\n",
"# Si mode = 'pred', il s'agit d'une prédiction du réseau, il faut alors utiliser la fonction sigmoide\n",
"# pour obtenir la présence prédite, et la fonction softmax pour obtenir les probabilités de classe \n",
"def get_box_from_yolo(y_YOLO, mode=None, confidence_threshold=0.5, num_classes=NB_CLASSES, image_size=IMAGE_SIZE, cell_size=PIX_PER_CELL):\n",
" nb_cells_per_dim = round(image_size/cell_size)\n",
"\n",
" y = []\n",
" for i in range(y_YOLO.shape[0]):\n",
" boxes = []\n",
" for ind_x in range(cell_size):\n",
" for ind_y in range(cell_size):\n",
" if mode == 'pred':\n",
" presence = expit(y_YOLO[i, ind_x, ind_y, 0])\n",
" classes_probabilities = softmax(y_YOLO[i, ind_x, ind_y, 5:])\n",
" # coords = expit(y_YOLO[i, ind_x, ind_y, 1:5])\n",
" else:\n",
" presence = y_YOLO[i, ind_x, ind_y, 0]\n",
" classes_probabilities = y_YOLO[i, ind_x, ind_y, 5:]\n",
"\n",
" coords = y_YOLO[i, ind_x, ind_y, 1:5]\n",
" if presence > confidence_threshold:\n",
"\n",
" box = []\n",
" box.append((coords[0] * cell_size + ind_x * cell_size) / image_size)\n",
" box.append((coords[1] * cell_size + ind_y * cell_size) / image_size)\n",
" box.append(coords[2])\n",
" box.append(coords[3])\n",
" box.append(np.argmax(y_YOLO[i, ind_x, ind_y, 5:]))\n",
" box.append(presence)\n",
" boxes.append(box)\n",
"\n",
" y.append(boxes)\n",
"\n",
" return y \n",
"\n",
"# On s'assure de pouvoir passer d'une représentation à l'autre sans altérer les données\n",
"print(y[:2])\n",
"print(get_box_from_yolo(set_box_for_yolo(y[:2])))"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "AVXo7WaCBNWT"
},
"source": [
"### Augmentation de données"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "vgXVpt6z6jRU"
},
"source": [
"Il nous faut une version récente de la librairie Albumentations pour pouvoir profiter des fonctionnalités lies aux boîtes englobantes."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"id": "_anbyrRRBRK9"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Found existing installation: opencv-python-headless 4.1.2.30\n",
"Uninstalling opencv-python-headless-4.1.2.30:\n",
" Would remove:\n",
" /tmp/deepl/.env/lib/python3.8/site-packages/cv2/*\n",
" /tmp/deepl/.env/lib/python3.8/site-packages/opencv_python_headless-4.1.2.30.dist-info/*\n",
" Would not remove (might be manually added):\n",
" /tmp/deepl/.env/lib/python3.8/site-packages/cv2/qt/fonts/DejaVuSans-Bold.ttf\n",
" /tmp/deepl/.env/lib/python3.8/site-packages/cv2/qt/fonts/DejaVuSans-BoldOblique.ttf\n",
" /tmp/deepl/.env/lib/python3.8/site-packages/cv2/qt/fonts/DejaVuSans-ExtraLight.ttf\n",
" /tmp/deepl/.env/lib/python3.8/site-packages/cv2/qt/fonts/DejaVuSans-Oblique.ttf\n",
" /tmp/deepl/.env/lib/python3.8/site-packages/cv2/qt/fonts/DejaVuSans.ttf\n",
" /tmp/deepl/.env/lib/python3.8/site-packages/cv2/qt/fonts/DejaVuSansCondensed-Bold.ttf\n",
" /tmp/deepl/.env/lib/python3.8/site-packages/cv2/qt/fonts/DejaVuSansCondensed-BoldOblique.ttf\n",
" /tmp/deepl/.env/lib/python3.8/site-packages/cv2/qt/fonts/DejaVuSansCondensed-Oblique.ttf\n",
" /tmp/deepl/.env/lib/python3.8/site-packages/cv2/qt/fonts/DejaVuSansCondensed.ttf\n",
" /tmp/deepl/.env/lib/python3.8/site-packages/cv2/qt/plugins/platforms/libqxcb.so\n",
"\u001b[31mERROR: Exception:\n",
"Traceback (most recent call last):\n",
" File \"/tmp/deepl/.env/lib/python3.8/site-packages/pip/_internal/cli/base_command.py\", line 186, in _main\n",
" status = self.run(options, args)\n",
" File \"/tmp/deepl/.env/lib/python3.8/site-packages/pip/_internal/commands/uninstall.py\", line 78, in run\n",
" uninstall_pathset = req.uninstall(\n",
" File \"/tmp/deepl/.env/lib/python3.8/site-packages/pip/_internal/req/req_install.py\", line 687, in uninstall\n",
" uninstalled_pathset.remove(auto_confirm, verbose)\n",
" File \"/tmp/deepl/.env/lib/python3.8/site-packages/pip/_internal/req/req_uninstall.py\", line 388, in remove\n",
" if auto_confirm or self._allowed_to_proceed(verbose):\n",
" File \"/tmp/deepl/.env/lib/python3.8/site-packages/pip/_internal/req/req_uninstall.py\", line 431, in _allowed_to_proceed\n",
" return ask('Proceed (y/n)? ', ('y', 'n')) == 'y'\n",
" File \"/tmp/deepl/.env/lib/python3.8/site-packages/pip/_internal/utils/misc.py\", line 240, in ask\n",
" _check_no_input(message)\n",
" File \"/tmp/deepl/.env/lib/python3.8/site-packages/pip/_internal/utils/misc.py\", line 230, in _check_no_input\n",
" raise Exception(\n",
"Exception: No input was expected ($PIP_NO_INPUT set); question: Proceed (y/n)? \u001b[0m\n",
"Requirement already satisfied: opencv-python-headless==4.1.2.30 in ./.env/lib/python3.8/site-packages (4.1.2.30)\n",
"Requirement already satisfied: numpy>=1.17.3 in ./.env/lib/python3.8/site-packages (from opencv-python-headless==4.1.2.30) (1.22.3)\n",
"albumentations==1.1.0 is successfully installed\n"
]
}
],
"source": [
"!pip uninstall --no-input opencv-python-headless==4.5.5.62\n",
"!pip install --no-input opencv-python-headless==4.1.2.30\n",
"!pip install --no-input -q -U albumentations\n",
"!echo \"$(pip freeze | grep albumentations) is successfully installed\""
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "pXIF0AMf6pqF"
},
"source": [
"Dans la cellule ci-dessous, il vous faudra intégrer les augmentations que vous aurez choisi. **Attention, ne faites cette partie que dans un second temps, lorsque vous aurez une première version du réseau qui fonctionnera !**\n",
"\n",
"Aidez-vous de [cette page](https://albumentations.ai/docs/getting_started/transforms_and_targets/) pour déterminer des augmentations qui peuvent fonctionner."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"id": "2-z8AmRpCdLK"
},
"outputs": [],
"source": [
"from albumentations import (Compose, HorizontalFlip)\n",
"import albumentations as A\n",
"\n",
"AUGMENTATIONS_TRAIN = Compose([\n",
" #### A COMPLETER, MAIS SEULEMENT LORSQUE VOUS AVEZ UN RESEAU QUI (SUR-)APPREND !\n",
" # HorizontalFlip(p=0.5), \n",
" # ...\n",
"], bbox_params=A.BboxParams(format='yolo'))"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Q2oSuKEV7DyU"
},
"source": [
"L'objet Sequence défini ci-dessous nous permettra la mise en batch de nos données. On est obligé d'avoir recours à cette solution (plutôt qu'un ImageDataGenerator comme lors du TP3) car ici les augmentations à appliquer altèrent également les labels, ce qui n'est pas supporté par un ImageDataGenerator."
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"id": "yALbgasfBYOI"
},
"outputs": [],
"source": [
"from tensorflow.keras.utils import Sequence\n",
"\n",
"class YOLOSequence(Sequence):\n",
" # Initialisation de la séquence avec différents paramètres\n",
" def __init__(self, x_set, y_set, batch_size,augmentations):\n",
" self.x, self.y = x_set, y_set\n",
" self.batch_size = batch_size\n",
" self.augment = augmentations\n",
" self.indices1 = np.arange(x_set.shape[0], dtype='int') \n",
" np.random.shuffle(self.indices1) # Les indices permettent d'accéder\n",
" # aux données et sont randomisés à chaque epoch pour varier la composition\n",
" # des batches au cours de l'entraînement\n",
"\n",
" # Fonction calculant le nombre de pas de descente du gradient par epoch\n",
" def __len__(self):\n",
" return int(np.ceil(len(self.x) / float(self.batch_size)))\n",
" \n",
"\n",
" # Il y a des problèmes d'arrondi dans les conversions de boîtes englobantes \n",
" # internes à la librairie Albumentations\n",
" # Pour les contourner, si les boîtes sont trop proches des bords, on les érode un peu\n",
" def erode_bounding_box(self, box, epsilon = 0.02):\n",
" eroded_box = []\n",
" \n",
" xmin = max(box[0] - box[2]/2, epsilon)\n",
" ymin = max(box[1] - box[3]/2, epsilon)\n",
" xmax = min(box[0] + box[2]/2, 1-epsilon)\n",
" ymax = min(box[1] + box[3]/2, 1-epsilon)\n",
" \n",
" cx = xmin + (xmax - xmin)/2\n",
" cy = ymin + (ymax - ymin)/2\n",
" width = xmax - xmin\n",
" height = ymax - ymin\n",
" \n",
" eroded_box = [cx, cy, width, height, box[4]]\n",
" return eroded_box\n",
"\n",
" # Application de l'augmentation de données à chaque image du batch et aux\n",
" # boîtes englobantes associées\n",
" def apply_augmentation(self, bx, by):\n",
"\n",
" batch_x = np.zeros((bx.shape[0], IMAGE_SIZE, IMAGE_SIZE, 3))\n",
" batch_y = []\n",
"\n",
" # Pour chaque image du batch\n",
" for i in range(len(bx)):\n",
" boxes = []\n",
" # Erosion des boîtes englobantes\n",
" for box in by[i]:\n",
" boxes.append(self.erode_bounding_box(box))\n",
"\n",
" # Application de l'augmentation à l'image et aux boîtes englobantes\n",
" transformed = self.augment(image=bx[i].astype('float32'), bboxes=boxes)\n",
" batch_x[i] = transformed['image']\n",
" batch_y_transformed = transformed['bboxes']\n",
" batch_y.append(batch_y_transformed)\n",
"\n",
" return batch_x, batch_y\n",
"\n",
" # Fonction appelée à chaque nouveau batch : sélection et augmentation des données\n",
" def __getitem__(self, idx):\n",
" # Sélection des indices des données du prochain batch\n",
" batch_indices = self.indices1[idx * self.batch_size:(idx + 1) * self.batch_size]\n",
" # Récupération des données puis des labels du batch\n",
" batch_x = self.x[batch_indices]\n",
" batch_boxes = [self.y[item] for item in list(batch_indices)]\n",
" # Application de l'augmentation de données\n",
" batch_x_aug, batch_boxes_aug = self.apply_augmentation(batch_x, batch_boxes)\n",
" \n",
" # Préparation des données pour le réseau :\n",
" # Normalisation des entrées\n",
" batch_x_aug = batch_x_aug/255\n",
" # Passage des sorties au format YOLO\n",
" batch_y_YOLO = set_box_for_yolo(batch_boxes_aug)\n",
" \n",
" return np.array(batch_x_aug), batch_y_YOLO\n",
"\n",
" # Fonction appelée à la fin d'un epoch ; on randomise les indices d'accès aux données\n",
" def on_epoch_end(self):\n",
" np.random.shuffle(self.indices1)\n",
" \n"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"id": "FekjKk5rDcrY"
},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Instanciation d'une Sequence\n",
"train_gen = YOLOSequence(x[:1], y[:1], 1, augmentations=AUGMENTATIONS_TRAIN)\n",
"\n",
"# Pour tester la séquence, nous sélectionnons les éléments du premier batch et les affichons\n",
"batch_x, batch_y = train_gen.__getitem__(0)\n",
"\n",
"print_data_detection(batch_x, get_box_from_yolo(batch_y))"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "FDkeWyl0TCJ1"
},
"source": [
"## Implémentation de YOLO"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "tT7sNJTC120-"
},
"source": [
"### Modèle"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "zrEtJvKAwsB2"
},
"source": [
"\n",
"<center> <img src=\"https://drive.google.com/uc?id=1_wXc_gTIAr37STaxu3chq1EEjVSKv6a5\" width=500></center>\n",
"<caption><center> Illustration de la couche de sortie de YOLO. </center></caption>\n",
"\n",
"Le modèle que je vous propose ci-dessous n'est qu'une possibilité parmi beaucoup d'autres. \n",
"A vous de compléter la dernière couche pour avoir une sortie de la bonne dimension.\n",
"\n",
"**Remarque importante** : comme le tenseur de sortie de YOLO est un peu complexe à manipuler, on choisit ici de regrouper l'ensemble des prédictions dans une seule et même sortie, ce qui nous oblige à utiliser la même fonction d'activation pour toutes nos sorties. On utilisera donc l'activation **linéaire** pour toutes ces sorties. On appliquera les fonctions sigmoïde et softmax pour les sorties \"présence\" et \"probablités de classe\" directement dans la fonction de coût !"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"id": "o3VZsE7EmRPC"
},
"outputs": [],
"source": [
"from tensorflow.keras.layers import Dense, Conv2D, MaxPooling2D, Flatten, Reshape, Dropout, Input\n",
"from tensorflow.keras.models import Model, Sequential\n",
"from tensorflow.keras import regularizers\n",
"\n",
"\n",
"def create_model_YOLO(input_shape=(64, 64, 3)):\n",
" input_layer = Input(shape=input_shape)\n",
"\n",
" conv1 = Conv2D(32, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(input_layer)\n",
" conv1 = Conv2D(32, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(conv1)\n",
" pool1 = MaxPooling2D(pool_size=(2, 2))(conv1)\n",
" \n",
" conv2 = Conv2D(64, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(pool1)\n",
" conv2 = Conv2D(64, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(conv2)\n",
" pool2 = MaxPooling2D(pool_size=(2, 2))(conv2)\n",
" \n",
" conv3 = Conv2D(128, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(pool2)\n",
" conv3 = Conv2D(128, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(conv3)\n",
" pool3 = MaxPooling2D(pool_size=(2, 2))(conv3)\n",
"\n",
" conv4 = Conv2D(1024, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(pool3)\n",
"\n",
" output = Conv2D(NB_CLASSES + 5 * BOX_PER_CELL, 1, activation = 'linear')(conv4)\n",
"\n",
" model = Model(input_layer, output)\n",
"\n",
" return model"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"id": "qGi3Yz8Tm4li"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Model: \"model_6\"\n",
"_________________________________________________________________\n",
" Layer (type) Output Shape Param # \n",
"=================================================================\n",
" input_8 (InputLayer) [(None, 64, 64, 3)] 0 \n",
" \n",
" conv2d_59 (Conv2D) (None, 64, 64, 32) 896 \n",
" \n",
" conv2d_60 (Conv2D) (None, 64, 64, 32) 9248 \n",
" \n",
" max_pooling2d_21 (MaxPoolin (None, 32, 32, 32) 0 \n",
" g2D) \n",
" \n",
" conv2d_61 (Conv2D) (None, 32, 32, 64) 18496 \n",
" \n",
" conv2d_62 (Conv2D) (None, 32, 32, 64) 36928 \n",
" \n",
" max_pooling2d_22 (MaxPoolin (None, 16, 16, 64) 0 \n",
" g2D) \n",
" \n",
" conv2d_63 (Conv2D) (None, 16, 16, 128) 73856 \n",
" \n",
" conv2d_64 (Conv2D) (None, 16, 16, 128) 147584 \n",
" \n",
" max_pooling2d_23 (MaxPoolin (None, 8, 8, 128) 0 \n",
" g2D) \n",
" \n",
" conv2d_65 (Conv2D) (None, 8, 8, 1024) 1180672 \n",
" \n",
" conv2d_66 (Conv2D) (None, 8, 8, 9) 9225 \n",
" \n",
"=================================================================\n",
"Total params: 1,476,905\n",
"Trainable params: 1,476,905\n",
"Non-trainable params: 0\n",
"_________________________________________________________________\n"
]
}
],
"source": [
"model = create_model_YOLO()\n",
"model.summary()"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Z7QasIJE2wiG"
},
"source": [
"### Fonction de coût"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "yuCP3Ju8Uo9e"
},
"source": [
"<center> <img src=\"https://drive.google.com/uc?id=1Fbt_Wh_BqZj8Pwt3-04325ItCkQp5G9X\" style=\"width:500;height:300px;\"></center>\n",
"<caption><center> Détail de la fonction de perte définie dans l'article YOLO v1 </center></caption>\n",
"\n",
"Nous arrivons maintenant à la partie délicate de l'implémentation de YOLO : la définition de la fonction de coût à utiliser.\n",
"\n",
"Comme nous l'avons vu dans le TP4, lorsque l'on écrit une fonction de coût personnalisée en Keras, il est nécessaire d'utiliser uniquement les fonctions présentes sur la page suivante : \n",
"https://keras.rstudio.com/articles/backend.html\n",
"\n",
"En effet cette fonction de coût qui sera appelée pendant l'entraînement traitera des tenseurs, et non des tableau *numpy*. On doit donc utiliser la librairie Tensorflow qui permet de manipuler les tenseurs.\n",
"\n",
"Une partie essentielle de la fonction est déjà écrite : celle qui permet de séparer les données des cellules dites \"vide\" (la vérité terrain ne contient pas de boîte englobante) des \"non vides\".\n",
"\n",
"Le détail de la fonction de coût est indiqué ci-dessus : dans l'article $\\lambda_{\\text{coord}} = 5$ et $\\lambda_{\\text{noobj}} = 0.5$. Les $x_i$, $y_i$, $w_i$, $h_i$ correspondent aux coordonnées d'une boîte englobante, $C_i$ correspond à la probabilité de présence d'un objet dans la cellule, et les $p_i(c)$ sont les probabilités de classe.\n",
"\n",
"A vous de compléter l'expression des sous-fonctions de la fonction de coût (les fonctions *K.sum*, *K.square*, *K.sigmoid* et *K.softmax* devraient vous suffire !). **N'oubliez pas d'appliquer une sigmoïde aux présences ($C_i$) et une softmax aux probabilités de classe $p_i$) !!**\n",
"\n",
"**NB : cette implémentation de la fonction de coût est très simplifiée et prend en compte le fait qu'il n'y a qu'une seule boîte englobante par cellule.**"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"id": "uS91oePKnE_K"
},
"outputs": [],
"source": [
"from keras import backend as K\n",
"\n",
"# Définition de la fonction de perte YOLO\n",
"def YOLOss(lambda_coord, lambda_noobj, batch_size):\n",
"\n",
" # Partie \"verte\" : sous-partie concernant l'indice de confiance et les \n",
" # probabilités de classe dans le cas où une boîte est présente dans la cellule\n",
" def box_loss(y_true, y_pred):\n",
" loss = 0\n",
" loss += K.sum(K.square(y_true[:,0] - K.sigmoid(y_pred[:,0])))\n",
" loss += K.sum(K.sum(K.square(y_true[:, 5:9] - K.softmax(y_pred[:, 5:9]))))\n",
" return loss\n",
"\n",
" # Partie \"bleue\" : sous-partie concernant les coordonnées de boîte englobante \n",
" # dans le cas où une boîte est présente dans la cellule\n",
" def coord_loss(y_true, y_pred):\n",
" loss = 0\n",
" loss += K.sum(K.square(y_true[:,1] - y_pred[:,1]))\n",
" loss += K.sum(K.square(y_true[:,2] - y_pred[:,2]))\n",
"\n",
" loss += K.sum(K.square(K.sqrt(y_true[:,3]) - K.sqrt(y_pred[:,3])))\n",
" loss += K.sum(K.square(K.sqrt(y_true[:,4]) - K.sqrt(y_pred[:,4])))\n",
" return loss\n",
"\n",
"\n",
" # Partie \"rouge\" : sous-partie concernant l'indice de confiance \n",
" # dans le cas où aucune boîte n'est présente dans la cellule\n",
" def nobox_loss(y_true, y_pred):\n",
" loss = 0\n",
" loss += K.sum(K.square(y_true[:,0] - K.sigmoid(y_pred[:,0])))\n",
" return loss\n",
"\n",
"\n",
" def YOLO_loss(y_true, y_pred):\n",
"\n",
" # On commence par reshape les tenseurs de bs x S x S x (5B+C) à (bsxSxS) x (5B+C)\n",
" y_true = K.reshape(y_true, shape=(-1, 9))\n",
" y_pred = K.reshape(y_pred, shape=(-1, 9))\n",
"\n",
" # On cherche (dans les labels y_true) les indices des cellules pour lesquelles au moins la première boîte englobante est présente\n",
" not_empty = K.greater_equal(y_true[:, 0], 1) \n",
" indices = K.arange(0, K.shape(y_true)[0])\n",
" indices_notempty_cells = indices[not_empty]\n",
"\n",
" empty = K.less_equal(y_true[:, 0], 0)\n",
" indices_empty_cells = indices[empty]\n",
"\n",
" # On sépare les cellules de y_true et y_pred avec ou sans boîte englobante\n",
" y_true_notempty = K.gather(y_true, indices_notempty_cells)\n",
" y_pred_notempty = K.gather(y_pred, indices_notempty_cells)\n",
"\n",
" y_true_empty = K.gather(y_true, indices_empty_cells)\n",
" y_pred_empty = K.gather(y_pred, indices_empty_cells)\n",
"\n",
" return (box_loss(y_true_notempty, y_pred_notempty) + lambda_coord*coord_loss(y_true_notempty, y_pred_notempty) + lambda_noobj*nobox_loss(y_true_empty, y_pred_empty))/batch_size\n",
"\n",
" \n",
" # Return a function\n",
" return YOLO_loss"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "urf1W1nl22EP"
},
"source": [
"### Apprentissage"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "J9nL1qrv8o1b"
},
"source": [
"Comme d'habitude, on sépare nos données en plusieurs ensembles (ici apprentissage et validation suffiront)."
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"id": "wsW6jpYsvIK7"
},
"outputs": [],
"source": [
"# Séparation des données en ensemble de validation et d'apprentissage\n",
"indices = np.arange(x.shape[0], dtype='int') \n",
"np.random.seed(1)\n",
"np.random.shuffle(indices)\n",
"\n",
"x_train = x[indices[:1355]]\n",
"y_train = [y[i] for i in indices[:1355]]\n",
"\n",
"x_val = x[indices[1355:]]\n",
"y_val = [y[i] for i in indices[1355:]]\n",
"\n",
"y_val_YOLO = set_box_for_yolo(y_val)\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "_42Z4gjN8xK2"
},
"source": [
"Prenez le temps de tester votre modèle et votre fonction de coût, ainsi que vos réglages d'hyperparamètres, en sur-apprenant sur une image d'abord, puis sur un batch d'images. Entraînez votre réseau et visualisez ses prédictions sur les données d'entraînement, puis de validation, pour obtenir une intuition sur les valeurs de *loss* permettant d'obtenir des résultats \"acceptables\"."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "91QkqtUCZc78"
},
"outputs": [],
"source": [
"from tensorflow.keras.optimizers import Adam\n",
"from tensorflow.keras.callbacks import ModelCheckpoint\n",
"import tensorflow as tf\n",
"\n",
"\n",
"batch_size=16\n",
"model = create_model_YOLO()\n",
"learning_rate = 1e-4\n",
"opt = Adam(learning_rate=learning_rate) \n",
"\n",
"# Instanciation de la séquence pour préparer les données et, plus tard, \n",
"train_gen = YOLOSequence(x_train, y_train, batch_size, augmentations=AUGMENTATIONS_TRAIN)\n",
"\n",
"# Comme l'entraînement est instable, on déclenche une sauvegarde du modèle à chaque fois que\n",
"# la perte de validation atteint un nouveau minimum\n",
"model_saver = ModelCheckpoint('tmp/best_weights', monitor='val_loss', verbose=1, save_weights_only=True, save_best_only=True, mode='min')\n",
"\n",
"loss=[YOLOss(5, 0.5, batch_size)]\n",
"\n",
"model.compile(loss=loss,\n",
" optimizer=opt)\n"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 1/50\n",
"85/85 [==============================] - ETA: 0s - loss: 1.9844\n",
"Epoch 1: val_loss did not improve from 5.02758\n",
"85/85 [==============================] - 6s 65ms/step - loss: 1.9844 - val_loss: 5.2965\n",
"Epoch 2/50\n",
"85/85 [==============================] - ETA: 0s - loss: 1.9115\n",
"Epoch 2: val_loss did not improve from 5.02758\n",
"85/85 [==============================] - 6s 65ms/step - loss: 1.9115 - val_loss: 5.4211\n",
"Epoch 3/50\n",
"85/85 [==============================] - ETA: 0s - loss: 1.8580\n",
"Epoch 3: val_loss did not improve from 5.02758\n",
"85/85 [==============================] - 6s 65ms/step - loss: 1.8580 - val_loss: 5.2131\n",
"Epoch 4/50\n",
"85/85 [==============================] - ETA: 0s - loss: 1.7808\n",
"Epoch 4: val_loss did not improve from 5.02758\n",
"85/85 [==============================] - 6s 65ms/step - loss: 1.7808 - val_loss: 5.4535\n",
"Epoch 5/50\n",
"85/85 [==============================] - ETA: 0s - loss: 1.7321\n",
"Epoch 5: val_loss did not improve from 5.02758\n",
"85/85 [==============================] - 6s 65ms/step - loss: 1.7321 - val_loss: 5.2900\n",
"Epoch 6/50\n",
"85/85 [==============================] - ETA: 0s - loss: 1.6989\n",
"Epoch 6: val_loss did not improve from 5.02758\n",
"85/85 [==============================] - 6s 65ms/step - loss: 1.6989 - val_loss: 5.3179\n",
"Epoch 7/50\n",
"85/85 [==============================] - ETA: 0s - loss: 1.6898\n",
"Epoch 7: val_loss did not improve from 5.02758\n",
"85/85 [==============================] - 6s 65ms/step - loss: 1.6898 - val_loss: 5.3656\n",
"Epoch 8/50\n",
"85/85 [==============================] - ETA: 0s - loss: 1.7137\n",
"Epoch 8: val_loss did not improve from 5.02758\n",
"85/85 [==============================] - 6s 65ms/step - loss: 1.7137 - val_loss: 5.4410\n",
"Epoch 9/50\n",
"85/85 [==============================] - ETA: 0s - loss: 1.6198\n",
"Epoch 9: val_loss did not improve from 5.02758\n",
"85/85 [==============================] - 6s 65ms/step - loss: 1.6198 - val_loss: 5.3616\n",
"Epoch 10/50\n",
"85/85 [==============================] - ETA: 0s - loss: 1.5681\n",
"Epoch 10: val_loss did not improve from 5.02758\n",
"85/85 [==============================] - 6s 65ms/step - loss: 1.5681 - val_loss: 5.4706\n",
"Epoch 11/50\n",
"85/85 [==============================] - ETA: 0s - loss: 1.5454\n",
"Epoch 11: val_loss did not improve from 5.02758\n",
"85/85 [==============================] - 6s 65ms/step - loss: 1.5454 - val_loss: 5.4999\n",
"Epoch 12/50\n",
"85/85 [==============================] - ETA: 0s - loss: 1.5339\n",
"Epoch 12: val_loss did not improve from 5.02758\n",
"85/85 [==============================] - 6s 65ms/step - loss: 1.5339 - val_loss: 5.5265\n",
"Epoch 13/50\n",
"85/85 [==============================] - ETA: 0s - loss: 1.5280\n",
"Epoch 13: val_loss did not improve from 5.02758\n",
"85/85 [==============================] - 6s 65ms/step - loss: 1.5280 - val_loss: 5.3426\n",
"Epoch 14/50\n",
"85/85 [==============================] - ETA: 0s - loss: 1.5328\n",
"Epoch 14: val_loss did not improve from 5.02758\n",
"85/85 [==============================] - 6s 65ms/step - loss: 1.5328 - val_loss: 5.5101\n",
"Epoch 15/50\n",
"85/85 [==============================] - ETA: 0s - loss: 1.4303\n",
"Epoch 15: val_loss did not improve from 5.02758\n",
"85/85 [==============================] - 6s 65ms/step - loss: 1.4303 - val_loss: 5.4970\n",
"Epoch 16/50\n",
"85/85 [==============================] - ETA: 0s - loss: 1.3850\n",
"Epoch 16: val_loss did not improve from 5.02758\n",
"85/85 [==============================] - 6s 65ms/step - loss: 1.3850 - val_loss: 5.4678\n",
"Epoch 17/50\n",
"85/85 [==============================] - ETA: 0s - loss: 1.3286\n",
"Epoch 17: val_loss did not improve from 5.02758\n",
"85/85 [==============================] - 6s 65ms/step - loss: 1.3286 - val_loss: 5.4427\n",
"Epoch 18/50\n",
"85/85 [==============================] - ETA: 0s - loss: 1.3441\n",
"Epoch 18: val_loss did not improve from 5.02758\n",
"85/85 [==============================] - 6s 65ms/step - loss: 1.3441 - val_loss: 5.4016\n",
"Epoch 19/50\n",
"85/85 [==============================] - ETA: 0s - loss: 1.3138\n",
"Epoch 19: val_loss did not improve from 5.02758\n",
"85/85 [==============================] - 6s 65ms/step - loss: 1.3138 - val_loss: 5.3618\n",
"Epoch 20/50\n",
"85/85 [==============================] - ETA: 0s - loss: 1.2716\n",
"Epoch 20: val_loss did not improve from 5.02758\n",
"85/85 [==============================] - 6s 65ms/step - loss: 1.2716 - val_loss: 5.5261\n",
"Epoch 21/50\n",
"85/85 [==============================] - ETA: 0s - loss: 1.2530\n",
"Epoch 21: val_loss did not improve from 5.02758\n",
"85/85 [==============================] - 6s 65ms/step - loss: 1.2530 - val_loss: 5.5041\n",
"Epoch 22/50\n",
"85/85 [==============================] - ETA: 0s - loss: 1.1285\n",
"Epoch 22: val_loss did not improve from 5.02758\n",
"85/85 [==============================] - 6s 65ms/step - loss: 1.1285 - val_loss: 5.5205\n",
"Epoch 23/50\n",
"85/85 [==============================] - ETA: 0s - loss: 1.1394\n",
"Epoch 23: val_loss did not improve from 5.02758\n",
"85/85 [==============================] - 6s 65ms/step - loss: 1.1394 - val_loss: 5.5057\n",
"Epoch 24/50\n",
"85/85 [==============================] - ETA: 0s - loss: 1.0966\n",
"Epoch 24: val_loss did not improve from 5.02758\n",
"85/85 [==============================] - 6s 65ms/step - loss: 1.0966 - val_loss: 5.6128\n",
"Epoch 25/50\n",
"85/85 [==============================] - ETA: 0s - loss: 1.0823\n",
"Epoch 25: val_loss did not improve from 5.02758\n",
"85/85 [==============================] - 6s 65ms/step - loss: 1.0823 - val_loss: 5.5188\n",
"Epoch 26/50\n",
"85/85 [==============================] - ETA: 0s - loss: 1.0245\n",
"Epoch 26: val_loss did not improve from 5.02758\n",
"85/85 [==============================] - 6s 65ms/step - loss: 1.0245 - val_loss: 5.5571\n",
"Epoch 27/50\n",
"85/85 [==============================] - ETA: 0s - loss: 1.0234\n",
"Epoch 27: val_loss did not improve from 5.02758\n",
"85/85 [==============================] - 6s 65ms/step - loss: 1.0234 - val_loss: 5.6479\n",
"Epoch 28/50\n",
"85/85 [==============================] - ETA: 0s - loss: 1.0620\n",
"Epoch 28: val_loss did not improve from 5.02758\n",
"85/85 [==============================] - 6s 65ms/step - loss: 1.0620 - val_loss: 5.6678\n",
"Epoch 29/50\n",
"85/85 [==============================] - ETA: 0s - loss: 1.0227\n",
"Epoch 29: val_loss did not improve from 5.02758\n",
"85/85 [==============================] - 6s 65ms/step - loss: 1.0227 - val_loss: 5.5731\n",
"Epoch 30/50\n",
"85/85 [==============================] - ETA: 0s - loss: 1.0236\n",
"Epoch 30: val_loss did not improve from 5.02758\n",
"85/85 [==============================] - 6s 65ms/step - loss: 1.0236 - val_loss: 5.5618\n",
"Epoch 31/50\n",
"85/85 [==============================] - ETA: 0s - loss: 0.9298\n",
"Epoch 31: val_loss did not improve from 5.02758\n",
"85/85 [==============================] - 6s 65ms/step - loss: 0.9298 - val_loss: 5.5772\n",
"Epoch 32/50\n",
"85/85 [==============================] - ETA: 0s - loss: 0.8803\n",
"Epoch 32: val_loss did not improve from 5.02758\n",
"85/85 [==============================] - 6s 65ms/step - loss: 0.8803 - val_loss: 5.5985\n",
"Epoch 33/50\n",
"85/85 [==============================] - ETA: 0s - loss: 0.9596\n",
"Epoch 33: val_loss did not improve from 5.02758\n",
"85/85 [==============================] - 6s 65ms/step - loss: 0.9596 - val_loss: 5.5050\n",
"Epoch 34/50\n",
"85/85 [==============================] - ETA: 0s - loss: 0.9670\n",
"Epoch 34: val_loss did not improve from 5.02758\n",
"85/85 [==============================] - 6s 65ms/step - loss: 0.9670 - val_loss: 5.6204\n",
"Epoch 35/50\n",
"85/85 [==============================] - ETA: 0s - loss: 0.9812\n",
"Epoch 35: val_loss did not improve from 5.02758\n",
"85/85 [==============================] - 6s 65ms/step - loss: 0.9812 - val_loss: 5.4566\n",
"Epoch 36/50\n",
"85/85 [==============================] - ETA: 0s - loss: 0.8827\n",
"Epoch 36: val_loss did not improve from 5.02758\n",
"85/85 [==============================] - 6s 65ms/step - loss: 0.8827 - val_loss: 5.4542\n",
"Epoch 37/50\n",
"85/85 [==============================] - ETA: 0s - loss: 0.7940\n",
"Epoch 37: val_loss did not improve from 5.02758\n",
"85/85 [==============================] - 6s 65ms/step - loss: 0.7940 - val_loss: 5.5093\n",
"Epoch 38/50\n",
"85/85 [==============================] - ETA: 0s - loss: 0.7499\n",
"Epoch 38: val_loss did not improve from 5.02758\n",
"85/85 [==============================] - 6s 65ms/step - loss: 0.7499 - val_loss: 5.5257\n",
"Epoch 39/50\n",
"85/85 [==============================] - ETA: 0s - loss: 0.7058\n",
"Epoch 39: val_loss did not improve from 5.02758\n",
"85/85 [==============================] - 6s 65ms/step - loss: 0.7058 - val_loss: 5.5092\n",
"Epoch 40/50\n",
"85/85 [==============================] - ETA: 0s - loss: 0.7094\n",
"Epoch 40: val_loss did not improve from 5.02758\n",
"85/85 [==============================] - 6s 65ms/step - loss: 0.7094 - val_loss: 5.5911\n",
"Epoch 41/50\n",
"85/85 [==============================] - ETA: 0s - loss: 0.7509\n",
"Epoch 41: val_loss did not improve from 5.02758\n",
"85/85 [==============================] - 6s 65ms/step - loss: 0.7509 - val_loss: 5.6771\n",
"Epoch 42/50\n",
"85/85 [==============================] - ETA: 0s - loss: 0.7350\n",
"Epoch 42: val_loss did not improve from 5.02758\n",
"85/85 [==============================] - 6s 65ms/step - loss: 0.7350 - val_loss: 5.6715\n",
"Epoch 43/50\n",
"85/85 [==============================] - ETA: 0s - loss: 0.7038\n",
"Epoch 43: val_loss did not improve from 5.02758\n",
"85/85 [==============================] - 6s 65ms/step - loss: 0.7038 - val_loss: 5.4962\n",
"Epoch 44/50\n",
"85/85 [==============================] - ETA: 0s - loss: 1.1871\n",
"Epoch 44: val_loss did not improve from 5.02758\n",
"85/85 [==============================] - 6s 65ms/step - loss: 1.1871 - val_loss: 5.5976\n",
"Epoch 45/50\n",
"85/85 [==============================] - ETA: 0s - loss: 0.7698\n",
"Epoch 45: val_loss did not improve from 5.02758\n",
"85/85 [==============================] - 6s 65ms/step - loss: 0.7698 - val_loss: 5.3620\n",
"Epoch 46/50\n",
"85/85 [==============================] - ETA: 0s - loss: 0.8461\n",
"Epoch 46: val_loss did not improve from 5.02758\n",
"85/85 [==============================] - 6s 65ms/step - loss: 0.8461 - val_loss: 5.4388\n",
"Epoch 47/50\n",
"85/85 [==============================] - ETA: 0s - loss: 0.7162\n",
"Epoch 47: val_loss did not improve from 5.02758\n",
"85/85 [==============================] - 6s 65ms/step - loss: 0.7162 - val_loss: 5.3595\n",
"Epoch 48/50\n",
"85/85 [==============================] - ETA: 0s - loss: 0.6588\n",
"Epoch 48: val_loss did not improve from 5.02758\n",
"85/85 [==============================] - 6s 65ms/step - loss: 0.6588 - val_loss: 5.4414\n",
"Epoch 49/50\n",
"85/85 [==============================] - ETA: 0s - loss: 0.6026\n",
"Epoch 49: val_loss did not improve from 5.02758\n",
"85/85 [==============================] - 6s 65ms/step - loss: 0.6026 - val_loss: 5.4616\n",
"Epoch 50/50\n",
"85/85 [==============================] - ETA: 0s - loss: 0.5965\n",
"Epoch 50: val_loss did not improve from 5.02758\n",
"85/85 [==============================] - 6s 65ms/step - loss: 0.5965 - val_loss: 5.4642\n"
]
}
],
"source": [
"\n",
"history = model.fit(train_gen,\n",
" epochs=50,\n",
" batch_size=batch_size, \n",
" validation_data=(x_val/255, y_val_YOLO),\n",
" callbacks = [model_saver])\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "q-coL0Hx24Ei"
},
"source": [
"### Test et affichage des résultats"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "EIaImTjf1fvF"
},
"source": [
"#### Test de la version à la fin de l'entrainement"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "lHD3nVgG2-G4"
},
"source": [
"**Sur l'ensemble d'apprentissage**"
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {
"id": "ZjPnyo6G1b1W"
},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"y_pred = model.predict(x_train/255)\n",
"y_pred_YOLO = get_box_from_yolo(y_pred, confidence_threshold=0.5, mode='pred')\n",
"print_data_detection(x_train, y_pred_YOLO)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "3EmVROimOQml"
},
"source": [
"Une fois les prédictions effectuées, vous pouvez pour aller plus rapidement uniquement relancer l'affichae aléatoire d'un seul résultat."
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {
"id": "sPZeZxIRg_M1"
},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"print_data_detection(x_train, y_pred_YOLO)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "raKF5JGC3B88"
},
"source": [
"**Sur l'ensemble de validation**"
]
},
{
"cell_type": "code",
"execution_count": 56,
"metadata": {
"id": "X5MKydNv1djI"
},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"y_pred = model.predict(x_val/255)\n",
"y_pred_YOLO = get_box_from_yolo(y_pred, confidence_threshold=0.5, mode='pred')\n",
"print_data_detection(x_val, y_pred_YOLO)"
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {
"id": "gbsnVJ6_0E3e"
},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"print_data_detection(x_val, y_pred_YOLO)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "FqMHwVaJ1iyN"
},
"source": [
"#### Test de la meilleure version sauvegardée"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "F09SWs1n9iD8"
},
"source": [
"La cellule ci-dessous vous permettra de charger les poids sauvegardés lorsque la meilleur performance a été atteinte sur l'ensemble de validation pendant l'entraînement."
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {
"id": "RRjn1SLn0JL4"
},
"outputs": [
{
"data": {
"text/plain": [
"<tensorflow.python.training.tracking.util.CheckpointLoadStatus at 0x7fa20aa1dac0>"
]
},
"execution_count": 58,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"model.load_weights('tmp/best_weights')"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "g66MczLI3GGL"
},
"source": [
"**Sur l'ensemble d'apprentissage**"
]
},
{
"cell_type": "code",
"execution_count": 67,
"metadata": {
"id": "dfytX2yC1AdY"
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"No artists with labels found to put in legend. Note that artists whose label start with an underscore are ignored when legend() is called with no argument.\n"
]
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"y_pred = model.predict(x_train/255)\n",
"y_pred_YOLO = get_box_from_yolo(y_pred, confidence_threshold=0.4, mode='pred')\n",
"print_data_detection(x_train, y_pred_YOLO)"
]
},
{
"cell_type": "code",
"execution_count": 66,
"metadata": {
"id": "uXr2p3MHx_hF"
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"No artists with labels found to put in legend. Note that artists whose label start with an underscore are ignored when legend() is called with no argument.\n"
]
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"print_data_detection(x_train, y_pred_YOLO)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "2elJjjts3JtD"
},
"source": [
"**Sur l'ensemble de validation**"
]
},
{
"cell_type": "code",
"execution_count": 61,
"metadata": {
"id": "zBiTzmyu0QqH"
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"No artists with labels found to put in legend. Note that artists whose label start with an underscore are ignored when legend() is called with no argument.\n"
]
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"y_pred = model.predict(x_val/255)\n",
"y_pred_YOLO = get_box_from_yolo(y_pred, confidence_threshold=0.3, mode='pred')\n",
"print_data_detection(x_val, y_pred_YOLO)"
]
},
{
"cell_type": "code",
"execution_count": 64,
"metadata": {
"id": "6YkUFRQ70M3t"
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"No artists with labels found to put in legend. Note that artists whose label start with an underscore are ignored when legend() is called with no argument.\n"
]
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"print_data_detection(x_val, y_pred_YOLO)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "T1ZZ1P4nOe3F"
},
"source": [
"**Si vous êtes rapide** \n",
"\n",
"Une amélioration possible pourrait être d'inclure une étape supplémentaire de suppression des prédictions \"non maximales\" (*non-max suppression*) pour se débarasser des boîtes redondantes, comme illustré sur la figure ci-dessous :\n",
"\n",
"<center> <img src=\"https://drive.google.com/uc?id=1XDpmffe_x_gDvsQZ_9sr6J5AuJPuSW0B\" width=300>\n",
"<img src=\"https://drive.google.com/uc?id=1b9QgSFQlzOA7aJIbNc2Kl_eEMRDY0pQm\" width=300>\n",
"</center>\n",
"\n",
"Pour cela, référez-vous au cours, il faut procéder de la manière suivante. Une fois les boîtes présentant un indice de confiance inférieur à un seuil (que nous avons fixé à $0.5$ plus tôt dans le TP) éliminées, on sélectionne la boîte englobante d'indice de confiance maximal $b_{max}$. Puis on parcourt l'ensemble des autres prédictions, et on élimine celles associées à la même classe qui présentent une intersection sur union avec $b_{max}$ supérieure à un second seuil (que, soyons honnêtes, on prend également souvent égal à $0.5$).\n",
"\n",
"On procède ainsi jusqu'à avoir visité toutes les boîtes !\n",
"\n",
"\n"
]
}
],
"metadata": {
"accelerator": "GPU",
"colab": {
"collapsed_sections": [],
"name": "TP7 - YOLO - Sujet.ipynb",
"provenance": [],
"toc_visible": true
},
"kernelspec": {
"display_name": ".env",
"language": "python",
"name": ".env"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.10"
}
},
"nbformat": 4,
"nbformat_minor": 0
}