Le deep learning
Introduction
La compétition ImageNet permet à des data scientists du monde entier de s’affronter en utilisant leurs meilleurs algorithmes de reconnaissance d’images. L’objectif est de proposer l’algorithme qui aura le meilleur score de prédiction. Au début, la majorité des algorithmes utilisés faisaient partie de la catégorie machine learning. Mais en 2012, un algorithme de deep learning remporte pour la première fois la compétition. L’année d’après, la plupart des compétiteurs choisissant des algorithmes de deep learning. Pourquoi le deep learning l’a-t-il emporté ? Et qu’est-ce que le deep learning ?
Comment ça, des neurones ?
Le deep learning fait partie de l’intelligence artificielle. Il s’agit donc d’une technique permettant de prendre en input des données et d’obtenir un résultat de régression ou de classification au travers d’un traitement statistique, l’objectif final étant d’imiter certaines capacités propres aux êtres intelligents (reconnaissance de sons et d’images, prise de décisions rationnelles…). La particularité du deep learning est qu’il s’inspire du fonctionnement des neurones du cerveau humain. Le cerveau humain contient environ 100 milliards de neurones. On en trouve également dans l’intestin (aussi appelé ’’deuxième cerveau’’), environ 500 millions, et dans le cœur, environ 40 000. L’architecture globale du cerveau est évidemment extrêmement complexe, avec environ 1 million de milliards de synapses (connexions). Bien que la recherche ait permis d’en comprendre de nombreux aspects, il reste encore énormément à découvrir.
Les neurones biologiques, au même titre que les muscles, sont des cellules excitables. Le neurone reçoit des stimulations captées par le corps cellulaire. Une fois un certain seuil atteint par ce dernier, un signal bioélectrique (influx nerveux)...
Comment fonctionnent les neurones artificiels ?
Comme dit précédemment, le deep learning s’inspire des recherches sur les neurones du cerveau humain. Dans les années 1940, les travaux des scientifiques Warren McCulloch, Walter Pitts et Frank Rosenblatt permettent d’aboutir à un modèle mathématique simple qui représente un neurone artificiel. Le résultat de leur travail est un neurone artificiel simplifié ressemblant à ceci :
L’information qui entre dans le neurone correspond aux flèches d’input. Elle est traitée par le neurone et ensuite transmise au travers d’un output aux autres neurones qui lui sont connectés. Il s’agit du perceptron, le type de réseau de neurones le plus simple, servant d’algorithme d’apprentissage supervisé pour effectuer des classifications binaires (entre deux classes).
Néanmoins, le modèle du perceptron est trop simple. Un seul neurone ne permet pas de résoudre des problèmes complexes, de la même façon que l’équation obtenue par la régression linéaire simple (équation d’une droite affine f(x) = ax+b) n’est pas adaptée aux problèmes dont les données évoluent selon une courbe (alors que l’équation d’un polynôme du second degré pourrait convenir par exemple). Plus précisément, le perceptron ne permet de classifier que des données linéairement séparables. Pour arriver à résoudre des problèmes plus complexes avec des neurones, il faut les mettre en réseau au travers de couches.
Un réseau de neurones dont le but est de prédire si les données...
Les applications
La compétition ImageNet permet à des data scientists du monde entier de s’affronter en utilisant leurs meilleurs algorithmes de reconnaissance d’images. L’objectif est de proposer l’algorithme qui aura le meilleur score de prédiction. Au début, la majorité des algorithmes utilisés faisaient partie de la catégorie machine learning. Mais en 2012, un algorithme de deep learning remporte pour la première fois la compétition. L’année d’après, la plupart des compétiteurs choisissent des algorithmes de deep learning. Aujourd’hui, les algorithmes de deep learning sont plus performants qu’un humain pour ce qui est de la reconnaissance d’images. Les applications sont également nombreuses dans le domaine médical, où ils aident déjà les médecins à diagnostiquer certaines maladies. Le deep learning a également permis de grands progrès dans le domaine de la reconnaissance vocale en étant capable de reconnaître un message - mais également une langue précise - et de le transformer en texte (speech-to-text). Mais plusieurs questions se posent : Pourquoi le deep learning a-t-il remporté la compétition ImageNet ? En quoi consiste exactement le deep learning ?
Classification supervisée avec du deep learning
Google est un des leaders dans le domaine de l’intelligence artificielle et notamment la reconnaissance d’images. Google donne accès à une API qui permet de tester son savoir-faire en matière de reconnaissance d’images.
Rendez-vous sur : https://cloud.google.com/vision/docs/drag-and-drop
Puis descendez sur la zone Try the API.
Uploadez une image de votre choix pour que l’API effectue une prédiction.
L’image suivante montre le résultat de la prédiction : à 89 %, il s’agit d’un lion !
Illustration des étapes permettant d’entraîner un modèle à la prédiction d’images d’animaux
Nous allons nous aussi programmer un réseau de neurones permettant de reconnaître une image. Nous allons l’entraîner uniquement pour distinguer un chien d’un chat au travers d’une caractéristique unique : la taille du museau. Ci-après le code Python :
from sklearn.neural_network import MLPClassifier
import numpy as np
caracteristiques = np.array([3, 16, 19, 5, 4, 25])
groupe = np.array([1, 0, 0, 1, 1, 0])
pmc = MLPClassifier(solver="adam", hidden_layer_sizes=(5, 2))
pmc.fit(caracteristiques.reshape(-1, 1), groupe)
print("Le score de prédiction...
D’autres modèles très puissants
Le deep learning est très utilisé dans des domaines comme la reconnaissance d’images. Les réseaux de neurones convolutifs sont particulièrement adaptés à cette problématique. Ils fonctionnent en appliquant successivement des filtres sur une image, chaque filtre extrayant une caractéristique (contour, visage…) de l’image qui va être analysée à des fins de classification.
VGG16 est un réseau de neurones convolutifs qui a remporté la compétition ImageNet ILSVRC (ImageNet Large Scale Visual Recognition Challenge) à laquelle participent les meilleurs laboratoires de recherche du monde spécialisés en vision par ordinateur. L’objectif du concours est de reconnaître des images parmi 1 000 catégories ou classes (http://image-net.org/challenges/LSVRC/2014/browse-synsets). VGG16 a été construit par le laboratoire de recherche d’Oxford Visual Geometry Group. Il prend en entrée une image en couleur de taille 224 x 224 pixels et renvoie un vecteur de taille 1 000 qui contient les probabilités d’appartenance à chacune des classes. En rangeant le vecteur, on peut donc trouver la classe la plus probable pour une image donnée.
Le code ci-après peut être utilisé sur Google Colaboratory. Il permet...
La bibliothèque OpenCV
La très puissante bibliothèque OpenCV (https://opencv.org) permet d’effectuer des traitements particulièrement effficaces sur des images et des vidéos. En particulier, elle implémente des algorithmes de deep learning préentraînés par exemple pour la reconnaissance faciale. Ce prétraitement interne permet d’avoir accès aux algorithmes les plus performants du moment dans une version optimisée (une CPU suffit alors que souvent une GPU est requise pour de gros calculs).
Le code ci-après permet de dessiner un carré autour d’un visage dans une image. L’image choisie est celle de Mona Lisa. N’oubliez pas d’installer OpenCV via pip grâce à la syntaxe : !pip install opencv-python.
import cv2
img = cv2.imread("https://upload.wikimedia.org/wikipedia/
commons/thumb/e/ec/Mona_Lisa%2C_by_Leonardo_da_Vinci%2C_
from_C2RMF_retouched.jpg/1200px-Mona_Lisa%2C_by_Leonardo_
da_Vinci%2C_from_C2RMF_retouched.jpg", 1)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
path = "haarcascade_frontalface_default.xml"
visage_cascade = cv2.CascadeClassifier(path)
visages = visage_cascade.detectMultiScale(gray,
scaleFactor=1.10, minNeighbors=5, minSize=(40, 40))
print(len(visages))
for (x, y, w, h) in visages:
cv2.rectangle(img...
Faire du deep learning avec JavaScript
Il est également possible de faire du deep learning avec JavaScript au travers des bibliothèques suivantes :
-
ml5.js
-
Brain.js
-
Tensorflow.js
Le code ci-dessous utilise le modèle pré-entrainé MobileNet, issu de la bibliothèque ml5.js, pour classifier des images :
<!DOCTYPE html>
<html>
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.0.0/
p5.min.js"></script>
<script src="https://unpkg.com/ml5@latest/dist/ml5.min.js">
</script>
<body>
<h1>Classification d'image</h1>
<h2>Utilisation de MobileNet et ml5.js</h2>
<div id="result">Chargement ...</div>
<img id="image" src="https://upload.wikimedia.org/wikipedia/
commons/thumb/b/b5/Lion_d%27Afrique.jpg/580px-Lion_d%27Afrique.jpg"
width="100%">
<script>
// Initialisationdu de l'algorithme de classification d'image avec
Image MobileNet.
const classifier = ml5.imageClassifier('MobileNet');
classifier.classify(document.getElementById("image"), gotResult);
// Fonction à lancer quand le résultat arrive
function gotResult(error, results) {
const element = document.getElementById("result"); if (error) {
element.innerHTML...