Logo

Détection et classification des véhicules pour la gestion d'une autoroute:

Introduction:

Contexte et besoin du projet:

Afin d'améliorer la mobilité et de renforcer la sécurité sur les autoroutes, nous avons opté pour une solution permettant la détection et la classification des véhicules (selon leur taille) à partir des images prises en utilisant des caméras fixes dans une autoroute. Les résultats ainsi trouvés pourront servir comme un outil d'aide à la décision pour les gestionnaires du traffic routier afin de prendre les mesures adéquates visant à équilibrer l'offre avec la demande du trafic. En effet, ceci peut être réalisé à travers deux techniques: soit à l'aide des modèles du Deep Learning ou bien à l'aide des techniques de traitement d'images. Néanmoins, nous nous limiterons dans ce projet à l'utilisation de quelques algorithmes de l'IA.

logo

Objectif du projet:

Détection et classification des véhicules selon leur longueur en utilisant plusieurs modèles: Yolov5, CNN, Faster-RCNN, Detectron…

Organigramme de la solution:

  1. collecte des données de différentes sources
  2. Répartition des données en données d'apprentissage, données de validation et données de test
  3. Pré-traitement des images ou encore en anglais image pre-processing: définir le choix de la taille des images, les noms de classes, le nombre de classes …
  4. Augmentation des données
  5. génération d'un nouveau jeu de données (dataset)
  6. Application du modèle choisi ( Yolov5, Yolov6 …) sur le nouveau jeu de données obtenu

image

Pour ce faire, on va faire recours à Roboflow. En effet, Roboflow est une plateforme dédiée à la Computer Vision permettant de faire la détection, la segmentation et la classification des objets.
image

La Computer Vision:

Introduction:

Afin de mieux comprendre le fonctionnement de nos propres solutions qui sont basées sur des algorithmes de Deep Learning, nous allons tout d'abord définir respectivement ce que c'est que La computer vision, l'IA, le machine Learning , le Deep Learning et finalement le réseau des neurones.

Qu'est ce que la computer vision:

La vision par ordinateur ou encore appelée Computer Vision est un domaine des sciences de l'informatique qui permet aux ordinateurs et aux systèmes de dériver des informations significatives à partir d'images numériques, de vidéos et d'autres entrées visuelles afin de prendre des mesures ou de faire des recommandations sur la base de ces informations. Son objectif est d'imiter le système visuel humain comme le montre la figure ci-dessous:

logo

Qu'est ce que l'Intelligence Artificielle:

L'intelligence artificielle, désigne les systèmes ou les machines qui imitent l'intelligence humaine pour effectuer des tâches et qui peuvent s'améliorer de manière itérative en fonction des informations qu'ils recueillent.Elle englobe également les sous-domaines de l'apprentissage automatique et de l'apprentissage en profondeur qui sont fréquemment mentionnés en association à l'intelligence artificielle. Ces disciplines sont composées d'algorithmes d'IA qui cherchent à créer des systèmes experts qui exécutent des prévisions ou des classifications sur la base de données d'entrée.

La figure ci-dessous montre la relation entre l'IA, le Machine Learning et le Deep Learning.

image

Le Machine Learning:

L'apprentissage automatique est une branche de l'intelligence artificielle qui se concentre sur l'utilisation de données et d'algorithmes pour imiter la façon dont les humains apprennent, améliorant progressivement sa précision.

image

Le Deep Learning:

L'apprentissage profond ou encore Le Deep Learning est une branche du Machine Learning qui repose sur l'utilisation des réseaux neuronaux artificiels permettant ainsi aux systèmes numériques de comprendre des données non structurées et non étiquetées avec précision tout en les analysant à un haut niveau d'abstraction grâce à une compréhension non linéaire.

image

Le Réseau des neurones:

Définition:

Un réseau de neurones artificiels, est un système informatique matériel et / ou logiciel dont le fonctionnement est calqué sur celui des neurones du cerveau humain. Il existe plusieurs types de réseaux de neurones: on en distingue le CNN (Le réseau des neurones de convolution), le RNN ( réseau de neurones récurent) ainsi que Le GAN (réseau de neurones antagoniste génératif) etc.

image

Fonctionnement:

Les réseaux de neurones artificiels souvent appelés «ANN » sont constitués de différentes couches de nœud (ou neurone artificiel), contenant une couche en entrée, une ou plusieurs couches cachées et une couche en sortie. Chaque nœud, se connecte à un autre et possède un poids et un seuil associés. Si la sortie d'un nœud est supérieure à la valeur de seuil spécifiée, ce nœud est activé et envoie des données à la couche suivante du réseau. Sinon, aucune donnée n'est transmise à la couche suivante du réseau. Chaque nœud individuel peut être considéré comme étant son propre modèle de régression linéaire, composé de données d'entrée, de poids, d'un biais (ou d'un seuil) et d'une sortie.

Le réseau CNN:

Après avoir défini ce que c'est qu'un réseau de neurones et après avoir cité quelques exemples de l'ANN dans les sections qui précédent, nous nous limiterons dans cette section à l'explication du CNN.En effet, le réseau de neurones convolutif désigne une sous-catégorie de réseaux de neurones. Cependant, le CNN est spécialement conçu pour traiter des images en entrée.Son architecture dispose en amont d'une partie convolutive et comporte par conséquent deux parties: Une partie convolutive et une partie de classification.

image

  1. La partie convolutive:
    Son objectif est d'extraire des caractéristiques propres à chaque image en les compressant de façon à réduire leur taille initiale sans pour autant perdre les caractéristiques les plus importantes. L'image fournie en entrée passe à travers une succession de filtres, créant de nouvelles images appelées cartes de convolutions qui seront après concaténées dans un vecteur de code CNN.

  2. La partie de classification:
    Le code CNN obtenu en sortie de la partie convolutive est fourni en entrée dans une deuxième partie, constituée de couches entièrement connectées appelées perceptron multicouche (MLP pour Multi Layers Perceptron). Le rôle de cette partie est de combiner les caractéristiques du code CNN afin de classer l'image.

Les couches du CNN:

Présentation des modèles utilisés:

YOLO (You Only Look Once):

La méthode YOLO divise l'image en N grilles, chacune avec un secteur dimensionnel SxS de taille égale. Chacune de ces N grilles est chargée de détecter et de localiser l'objet qu'elle contient tout en prévoyant les coordonnées de la boîte englobante B par rapport aux coordonnées de la cellule, ainsi que le nom de l'élément et la probabilité que l'objet soit présent dans la cellule. YOLO se compose d'un total de 24 couches convolutives dont les 20 premières sont pré-entraînées sur l'ensemble de données de classification ImageNet 1000-class et les quatre dernières sont suivies par deux couches entièrement connectées permettant ainsi d'entraîner le réseau à la détection d'objets avec notre base de données.
image
Les versions de YOLO utilisées dans notre projet sont:

Pour utiliser l'une de ces versions il faut:

  1. Installer les paquets necessaires à la détection des objets:
    Exemple:
# clone YOLOv5 repository
!git clone https://github.com/ultralytics/yolov5  # clone repo
%cd yolov5
!git reset --hard fbe67e465375231474a2ad80a4389efc77ecff99
  1. Charger le dataset dans l'environnement d'exécution:

Exemple:

!pip install -q roboflow
from roboflow import Roboflow
rf = Roboflow(model_format="yolov5", notebook="roboflow-yolov5")
%cd /content/yolov5
rf = Roboflow(api_key="YOUR API KEY HERE")
project = rf.workspace().project("YOUR PROJECT")
dataset = project.version("YOUR VERSION").download("yolov5")
  1. Modifier les paramètres d'apprentissage: (facultatif)
%%writetemplate /content/yolov5/models/custom_yolov5s.yaml

# parameters
nc: {num_classes}  # number of classes
depth_multiple: 0.33  # model depth multiple
width_multiple: 0.50  # layer channel multiple

# anchors
anchors:
  - [10,13, 16,30, 33,23]  # P3/8
  - [30,61, 62,45, 59,119]  # P4/16
  - [116,90, 156,198, 373,326]  # P5/32

# YOLOv5 backbone
backbone:
  # [from, number, module, args]
  [[-1, 1, Focus, [64, 3]],  # 0-P1/2
   [-1, 1, Conv, [128, 3, 2]],  # 1-P2/4
   [-1, 3, BottleneckCSP, [128]],
   [-1, 1, Conv, [256, 3, 2]],  # 3-P3/8
   [-1, 9, BottleneckCSP, [256]],
   [-1, 1, Conv, [512, 3, 2]],  # 5-P4/16
   [-1, 9, BottleneckCSP, [512]],
   [-1, 1, Conv, [1024, 3, 2]],  # 7-P5/32
   [-1, 1, SPP, [1024, [5, 9, 13]]],
   [-1, 3, BottleneckCSP, [1024, False]],  # 9
  ]

# YOLOv5 head
head:
  [[-1, 1, Conv, [512, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 6], 1, Concat, [1]],  # cat backbone P4
   [-1, 3, BottleneckCSP, [512, False]],  # 13

   [-1, 1, Conv, [256, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 4], 1, Concat, [1]],  # cat backbone P3
   [-1, 3, BottleneckCSP, [256, False]],  # 17 (P3/8-small)

   [-1, 1, Conv, [256, 3, 2]],
   [[-1, 14], 1, Concat, [1]],  # cat head P4
   [-1, 3, BottleneckCSP, [512, False]],  # 20 (P4/16-medium)

   [-1, 1, Conv, [512, 3, 2]],
   [[-1, 10], 1, Concat, [1]],  # cat head P5
   [-1, 3, BottleneckCSP, [1024, False]],  # 23 (P5/32-large)

   [[17, 20, 23], 1, Detect, [nc, anchors]],  # Detect(P3, P4, P5)
  ]
  1. Faire de l'apprentissage:
# train yolov5s on custom data for 100 epochs
# time its performance
%%time
%cd
!python train.py --img 416 --batch 16 --epochs 100 --data {dataset.location}/data.yaml --cfg ./models/custom_yolov5s.yaml --weights '' --name yolov5s_results  --cache

On peut également changer les paramètres suivant pour faire de l'apprentissage:

  1. Affichage des paramètres indiquant la précision du modèle utilisé:
%reload_ext tensorboard
%tensorboard --logdir runs

Exemple:
image

Ce Tensorboard permet de nous afficher les courbes et les mesures des différents paramètres permettant ainsi de définir le degré de précision du modèle utilisé pour l'apprentissage.

  1. Test du modèle:
# when we ran this, we saw .007 second inference time. That is 140 FPS on a TESLA P100!
# use the best weights!
%cd /content/yolov5/
!python detect.py --weights runs/train/yolov5s_results/weights/best.pt --img 416 --conf 0.4 --source /content/testvid/BackVehcilesTraffic1080p.mp4

Exemple:
image

Comparaison des différentes versions utilisées de YOLO:

Après avoir testé le modèle YOLOv5, YOLOv6 et YOLOv7 nous remarquons ainsi la différence
image

Detectron2:

La conception du modèle Detectron a été basée sur l'architecture du modèle Mask R- CNN. En effet, Detectron a été pré-entraîné sur COCO dataset, LVIS dataset ainsi que CityScapes dataset permettant ainsi de faire:

Faster-RCNN:

image
Le modèle Faster R-CNN appartient à la famille R-CNN. En effet, Faster R-CNN est un modèle optimisé du Fast R-CNN et du R-CNN grâce à l'optimisation du temps de génération des zones d'intérêt qui a été fait en ajoutant un autre algorithme nommé Region Proposal Networks (RPN): ce réseau de neurones convolutifs supplémentaire permet de générer directement les propositions de zones. En sortie, le modèle Faster R-CNN produit un label ainsi que les coordonnées de la zone de l'image contenant l'objet détecté (bounding box).

Résultats:

Vous trouverez ci-joint le notebook contenant les résultats des modèles utilisés avec les différents jeux de données collectés:

Comparaison entre les modèles:

image

Conclusion:

D'après ces résultats, nous pouvons souligner que la performance des algorithmes utilisés dépend de plusieurs paramètres: En effet, elle dépend non seulement de la qualité des jeux de données utlisés (taille du dataset, l'angle de la prise des images, nombre d'images par classe etc…) mais aussi du modèle choisi (nombre de couches que comporte chaque modèle, taille du batch, nombre d'epochs utilisés pour l'apprentissage…). Cette performance se manifeste par un temps d'exécution minimal et une meilleure précision de détection et de classification des images. C'est ainsi que nous faisons recours à des technologies comme Tensorboard permettant de visualiser et mesurer le degré de la performance des modèles grâce à des indicateurs comme le mAP,le box_loss, obj_loss, le recall, etc.

Bibliographies:

https://makina-corpus.com/sig-webmapping/extraction-dobjets-pour-la-cartographie-par-deep-learning-choix-du-modele
http://staff.univ-batna2.dz/sites/default/files/merzougui_ghalia/files/support_de_cours_-deep_learning-chapitre3-cnn.pdf
https://www.ibm.com/fr-fr/cloud/learn/neural-networksIntelligenceartificielle
https://www.lemagit.fr/conseil/Machine-Learning-les-9-types-dalgorithmes-les-plus-pertinents-en-entreprise
https://www.datakeen.co/8-machine-learning-algorithms-explained-in-human-language/
https://azure.microsoft.com/fr-fr/resources/cloud-computing-dictionary/what-are-machine-learning-algorithms/#techniques
https://www-igm.univ-mlv.fr/~dr/XPOSE2014/Machin_Learning/D_Machine_Learning.html
https://datascientest.com
https://wikipedia.org
https://analyticsvidhya.com