Intelligence artificielle / machine learning
Qu'est-ce que l'intelligence artificielle ?
Qu'est-ce-que le marchine learning ?
Vidéos / exercices
(non détaillé)
Deep learning et intérêt pour les images
Différences entre machine learning et deep learning.
Application du deep learning : reconnaissance d'images.
(non détaillé)
Vidéo / exercices
Workflow et matrice de confusion
L'obtention d'un réseau : quelles étapes ?
Boucler jusqu'à obtenir une précision satisfaisante.
La matrice de confusion.
Réseau neuronal convolutif / Convolutional Neural Network (CNN)⚓
Qu'est-ce-qu'un CNN ?
Un CNN est une structure composée de couches, permettant d'extraire des caractéristiques d'une image et d'en déduire à quelle classe (catégorie) appartient l'image.
Input layer : couche d'entrée (unique). L'image à analyser. Elle doit être au format attendu par le CNN (largeur hauteur et nb de couleurs)
Output layer : couche de sortie (unique). C'est la classe la plus probable pour l'image (ou catégorie)
Hidden layers : couches intermédiaires cachées (multiples). Ce sont les couches de calcul, il en existe de plusieurs sortes. Ces couches font des calculs sur les images, ou des parties d'images. L'image calculée par une couche peut être réinjectée dans une autre couche.
Ici nous ne rentrons pas dans le détail des couches et des calculs effectués, qui sont d'un niveau mathématique élevé.
Les couches intermédiaires servent à extraire les informations de l'image. En fin de structure, la couche qui nous intéresse est la couche de classification.
La couche de classification est un réseau de N neurones, N étant le nombre de classes à identifier. La couche de classification la plus simple comporterait 2 neurones (output size de la couche), ce qui peut être utile par exemple en médecine, pour classer des images d'analyses cellulaires en 2 catégories
échantillon sain
échantillon pathologique
L'exemple d'AlexNet⚓
Chargement dans Matlab
Le cnn alexNet comporte 25 couches (layers), la couche d'entrée s'appelle 'data', la couche de sortie s'appelle 'output'.
Le graphe des layers d'Alexnet
Chargement des layers d'Alexnet dans une variable
>> layersA = cnn.Layers
layersA =
25x1 Layer array with layers:
1 'data' Image Input 227x227x3 images with 'zerocenter' normalization
2 'conv1' Convolution 96 11x11x3 convolutions with stride [4 4] and padding [0 0 0 0]
3 'relu1' ReLU ReLU
4 'norm1' Cross Channel Normalization cross channel normalization with 5 channels per element
5 'pool1' Max Pooling 3x3 max pooling with stride [2 2] and padding [0 0 0 0]
6 'conv2' Grouped Convolution 2 groups of 128 5x5x48 convolutions with stride [1 1] and padding [2 2 2 2]
7 'relu2' ReLU ReLU
8 'norm2' Cross Channel Normalization cross channel normalization with 5 channels per element
9 'pool2' Max Pooling 3x3 max pooling with stride [2 2] and padding [0 0 0 0]
10 'conv3' Convolution 384 3x3x256 convolutions with stride [1 1] and padding [1 1 1 1]
11 'relu3' ReLU ReLU
12 'conv4' Grouped Convolution 2 groups of 192 3x3x192 convolutions with stride [1 1] and padding [1 1 1 1]
13 'relu4' ReLU ReLU
14 'conv5' Grouped Convolution 2 groups of 128 3x3x192 convolutions with stride [1 1] and padding [1 1 1 1]
15 'relu5' ReLU ReLU
16 'pool5' Max Pooling 3x3 max pooling with stride [2 2] and padding [0 0 0 0]
17 'fc6' Fully Connected 4096 fully connected layer
18 'relu6' ReLU ReLU
19 'drop6' Dropout 50% dropout
20 'fc7' Fully Connected 4096 fully connected layer
21 'relu7' ReLU ReLU
22 'drop7' Dropout 50% dropout
23 'fc8' Fully Connected 1000 fully connected layer
24 'prob' Softmax softmax
25 'output' Classification Output crossentropyex with 'tench' and 999 other classes
Input layer : on voit qu'Alexnet attend en entrée des images de taille 227 x 227 pixels en RGB (profondeur 3)
Dans Matlab, chargement du cnn Alexnet
>> cnn = alexnet
cnn =
SeriesNetwork with properties:
Layers: [25×1 nnet.cnn.layer.Layer]
InputNames: {'data'}
OutputNames: {'output'}
layer 23 = couche de classification. 1000 fully connected layer = couches à 1000 neurones, pour 1000 classes.
Ce qui est cohérent avec la classe 25 (output layer), qui contient 1000 classes ('tench' + 999)
Les 1000 classes d'AlexNet
Affichage de la liste des classes
>> layersA(25).Classes
ans =
1000×1 categorical array
tench
goldfish
great white shark
tiger shark
hammerhead
electric ray
stingray
cock
hen
ostrich
brambling
goldfinch
house finch
........
À quoi ressemblent les CNN utilisés⚓
Utilisation du Deep Learning Designer
Le Deep Learning Designer permet d'ouvrir les réseaux installés dans Matlab, ce qui permet d'étudier les différentes couches d'une manière graphique, de voir leurs propriétés.
Il est ensuite possible de modifier la structure et d'enregistrer le nouveau graphe des layers pour l'utiliser, par exemple pour entraîner un cnn existant sur une banque d'images et ainsi l'adapter à un besoin spécifique.
Comparaison des graphes
Ci-dessous, une comparaison rapide d'Alexnet et de Googlenet, deux cnn entraînés sur 1000 classes.
Structure des couches Alexnet : 25 couches en série
Structure des couches GoogleNet : 144 couche, structure complexe (une couche peut avoir des entrées de plusieurs couches, et envoyer la sortie à plusieurs couches
Comparaison des inputs
Il suffit de zoomer pour voir le détail de chaque couche. La couche d'entrée permet de connaître le format d'image attendu par le réseau.
AlexNet
GoogleNet
Comparaison des couches de sortie
AlexNet : 1000 classes
GoogleNet : 1000 classes
Pistes de réflexion
Comment se différentient ces deux réseaux ? Se pourrait-il que ce comparatif puisse nous aider à choisir un réseau plus à même d'acquérir de la précision sur des images spécifiques ?
Comparer les cnn proposés dans ce projet : alexnet, googlenet, resnet-18, squeezenet, mobilenetv2