Introduction
Les réseaux de neurones à convolution profonde sont devenus les méthodes de pointe pour les tâches de classification d’images. Cependant, l’une de leurs plus grandes limites est qu’ils nécessitent beaucoup de données annotées (images dont la classe à prédire est connue). Par exemple, un réseau ayant pour unique tâche de reconnaître des chats, devra être entraîné avec des milliers de photos de chats avant qu’il ne puisse discerner cet animal d’une autre entité avec une bonne précision. Autrement dit, plus le jeu de données d’apprentissage est important, meilleure sera la précision de l’algorithme.
Cette contrainte n’est pas négligeable car il est difficile voire parfois impossible de collecter des quantités aussi importantes de données. Dans de nombreux cas on aimerait que les réseaux de neurones apprennent de nouveaux concepts avec peu de données, c’est à dire, qu’ils aient un comportement proche de l’homme.
Le one-shot learning est le paradigme qui formalise ce problème. Ce dernier, fait référence aux problèmes de deep learning, dans lesquels le modèle ne dispose que d’une instance (image) par classe dans son jeu de données d’apprentissage et doit apprendre à ré-identifier cette instance dans les données de test. Dans la suite, nous présentons deux approches : le deep learning classique et le one-shot learning.
#1 Classification d’images via le deep learning
Dans le cas d’une classification standard, l’image d’entrée est introduite dans une série de couches de convolution, qui génère une distribution de probabilités sur toutes les classes (généralement à l’aide de la fonction softmax). Par exemple, si on essaye de classer une image comme étant un « chat », un « chien », un « cheval » ou un « éléphant », pour chaque image d’entrée appartenant à l’une de ces classes, quatre probabilités seront générées, indiquant le niveau de confiance avec lequel le réseau a étiqueté l’image.
Deux points importants doivent être notés ici.
Tout d’abord, pendant le processus d’apprentissage, le réseau a besoin d’un grand nombre d’images pour chaque classe (chat, chien, cheval et éléphant).
Ensuite, si le réseau est entraîné uniquement sur ces 4 classes, « chat », « chien », « cheval » et « éléphant », comme dans l’exemple ci-dessus, il ne sera pas en mesure d’étiqueter correctement l’image d’un zèbre. En effet lorsque l’image du zèbre sera donnée en entrée au réseau, ce dernier sortira quatre probabilités, chacune exprimant le niveau de confiance avec lequel l’image appartient aux classes « chat », « chien », « cheval » ou « éléphant ». Pour que le réseau reconnaisse également les images de zèbre, il faudra d’abord obtenir un grand nombre d’images de cet animal, puis ré-entraîner le modèle.
Il existe des applications pour lesquelles très peu de données sont disponibles pour un très grand nombre de classes. De plus, il peut être nécessaire de modifier la base de données, en supprimant ou en ajoutant une classe. Le coût de la collecte de données et du ré-entraînement devient donc trop élevé, ce qui est problématique. Un exemple typique est la reconnaissance faciale. Une organisation qui souhaite mettre en place un tel système pour ses employés doit construire une base de données contenant beaucoup d’images de visages différents. Si l’organisation en question se basait sur un modèle de deep learning classique (un réseau ConvNet, par exemple), elle serait aussi obligée de ré-entraîner son modèle de classification à chaque fois qu’un nouvel employé la rejoint. Cela est en pratique impossible, particulièrement pour les grandes organisations où le recrutement est un processus continu quasi quotidien.
#2 Classification via One-shot learning
Reprenons notre exemple de reconnaissance faciale. Au lieu de classer directement une image d’entrée (lors de la phase de test) selon l’une des personnes de l’organisation, un modèle de One-shot learning utilisera une image de référence de la personne en entrée et générera un score de similarité indiquant les probabilités que les deux images d’entrée appartiennent à la même personne. Le score de similarité est typiquement compris entre 0 et 1 et est calculé à l’aide d’une fonction sigmoïde ; où 0 désigne aucune similitude et 1 désigne une similitude complète. Tout nombre compris entre 0 et 1 est interprété en conséquence.
Ainsi, un modèle de One-shot learning n’apprend pas à classer une image directement dans l’une des classes de sortie. Il s’agit plutôt d’apprendre une fonction de similarité, qui prend deux images en entrée et exprime à quel point elles sont similaires. Par conséquent, l’image de test prendra la classe de l’image ayant générée la similarité maximale.
Ce type d’algorithmes possède deux avantages :
Pour apprendre le réseau n’a pas besoin d’un grand nombre d’instances par classe.
Dans le cas de la reconnaissance faciale, pour un nouvel employé rejoignant l’organisation, le modèle qui détectera l’individu n’aura besoin que d’une seule image de son visage et cette dernière sera stockée dans la base de données des employés. En utilisant ceci comme image de référence, le modèle calcule la similarité pour toute instance qui lui est présentée.
Cas d’usages du One-shot learning
En pratique, plusieurs applications utilisent le One-shot learning :
· Des systèmes de reconnaissances faciales ont été mis en place à grande échelle ces dernières années. En effet, Google, Apple, Facebook, Amazon et Microsoft (GAFAM) ainsi que plusieurs pays en ont implémenté. FaceNet, proposé par Google en juin 2015, a atteint un nouveau record de précision de 99,63%. Le gouvernement Français va déployer Alicem, un système de reconnaissance faciale pour smartphone qui sert à se connecter aux services publics. Un autre exemple est le système de reconnaissance faciale pour les employés de Baidu (le principal moteur de recherche chinois), comme montré par Andrew Ng dans cette vidéo.
· La découverte de médicaments où les données sont très rares.
· La vérification de signature offline est très utile pour les banques et autres organismes publics et privés.
Entrainement d’un modèle de One-shot learning
L’entraînement d’un réseau de neurones profonds pour apprendre les patterns utiles au One-shot learning s’effectue en deux étapes.
Premièrement, le modèle est entraîné à réaliser la tâche de vérification. Cette tâche introduit dans le modèle des paires d’images étiquetées qui doivent être classifiées comme appartenant à la même classe (« pareil ») ou à deux classes différentes (« différent »).
Deuxièmement, les prédictions « pareil / différent » sont utilisées dans le cadre du One-shot learning pour identifier de nouvelles images. Ceci est fait en prenant la probabilité « pareil » maximale produite par le modèle après avoir été entraîné à la tâche de vérification.
Implémentation d’un algorithme de One-shot learning
Un algorithme de One-shot learning peut être mis en œuvre à l’aide d’un réseau Siamois. Ce réseau est composé de deux ConvNet identiques entièrement connectés avec les mêmes poids et acceptant deux images différentes. Contrairement à un réseau ConvNet normal qui utilise la fonction softmax pour obtenir la classification, ici, la sortie d’une couche entièrement connectée est considérée comme un codage (vecteurs de caractéristiques) à dimension fixe de l’image d’entrée. Le premier réseau produit le codage de la première image d’entrée et le second réseau produit le codage de la deuxième image d’entrée. En supposant que le modèle soit correctement entraîné, nous pouvons faire l’hypothèse suivante :
Si les deux images d’entrée appartiennent à la même classe, leurs vecteurs de caractéristiques doivent également être similaires, tandis que si les deux images d’entrée appartiennent à des classes différentes, leurs vecteurs de caractéristiques seront également différents.
Ainsi, la différence absolue entre les deux vecteurs de caractéristiques, élément par élément, doit être très différente dans le dernier cas. Et par conséquent, le score de similarité généré par la couche Sigmoïde en sortie doit également être différent dans ce cas. C’est l’idée centrale derrière les réseaux Siamois.
Conclusion
Nous nous sommes focalisés, dans cet article, sur la classification d’images via les techniques de deep learning. Nous avons commencé par présenter le cas classique en utilisant des réseaux ConvNet. Du fait que ces réseaux nécessitent des milliers, voire des millions, d’images pour être entraînés, pose un sérieux problème dans plusieurs des cas pratiques. Le One-shot learning se porte comme solution à ce problème. Au cours de cet article, nous avons présenté comment un tel algorithme est entraîné, implémenté, et dans quelle situation il est utilisé. Cependant, tout comme chaque nouvelle technologie, ce n’est pas un système parfait. Certains facteurs pourraient nuire à la classification ou la reconnaissance, notamment :
Manque de résolution (l’image a été prise trop loin)
Éblouissement important sur les lunettes ou le port de lunettes de soleil
Cheveux longs masquant la partie centrale du visage
Mauvais éclairage qui causerait une sur ou une sous-exposition du visage
Ces précautions prises en compte, cette nouvelle approche permet d’ouvrir un champ d’application extrêmement vaste (reconnaissance d’objet, détection de faux, authentification, identification de défauts, maintenance, etc.) qui ne demande qu’à être exploré.
Si vous voulez en savoir plus, n’hésitez pas à nous contacter !
Rédigé par Mohammed Ghesmoune, Consultant Data Driven Business
Thanks to Ula La Paris, Max Mauray, Lucas Leroux, and Julien Ayral. Notes [1] Source