La machine peut-elle déjà reconnaitre un enfant jouant dans une flaque d’eau ?

Publié le 27 avril 2017 par Pjgrizel

Les technologies de reconnaissance d’images se développent de plus en plus et certains craignent déjà d’être espionnés par leurs webcams, les caméras de vidéo surveillances ou même par leur portable. Où en sommes-nous réellement dans le domaine ? Est-il déjà possible de détecter automatiquement ce que vous faîtes ? Mythe ou réalité?

De la reconnaissance contextuelle dans une image.

La reconnaissance d’image associée à la vision par ordinateur est une des dimensions croissantes du Machine Learning et de la data science. Depuis plus de vingt ans, publications et algorithmes sur le sujet se multiplient.
Malgré tous ces efforts, les ordinateurs n’ont encore que des capacités de reconnaissance inférieures à celles d’un enfant de trois ans. Pour un ordinateur, reconnaitre et comprendre le contexte d’une image est très complexe. Toutefois, depuis 2015, les premiers algorithmes réellement efficaces de reconnaissance contextuelle ont été développés.

À votre avis, que voit un ordinateur dans cette image ?

Comment la machine apprend ?

Pour permettre à un algorithme d’apprendre, il est exposé à un grand nombre d’exemples, des images étiquetées de chats, de voitures, … L’algorithme va alors chercher à maximiser sa précision sur ce jeu de données d’entrainement pour apprendre des correspondances entre une image et le mot qui la représente.

Lorsque l’on désire obtenir la description d’une nouvelle image, l’algorithme va appliquer les correspondances entre la nouvelle image et ce qu’il a appris des images d’entrainement. Tous les algorithmes actuels de Machine Learning (même en dehors de la reconnaissance d’image) fonctionnent selon ce principe.

Reconnaitre des chiffres

Exemples de chiffres issus de MNIST

La reconnaissance de caractères a été pionnière dans la reconnaissance d’image. Reconnaitre une adresse ou un code postal permet depuis presque vingt ans de faire des économies substantielles pour les services postaux de nombreux pays en remplaçant les hommes par la machine et en améliorant la vitesse de traitement.
Depuis 1998, les capacités des reconnaissances des écrits manuscrits des machines sont proches de celle de l’homme. Sur le jeu de données MNIST composé de chiffres manuscrits, près de 98% des chiffres sont reconnus avec le réseau de neurones convolutionnel convNet.

Le fonctionnement de cet algorithme imite le fonctionnement de la vision chez l’homme. Plusieurs filtres sont appliqués sur les différentes zones de l’image. Chacun des filtres va apprendre à reconnaitre un motif dans l’image, tandis que certains filtres apprendront à reconnaitre la boucle du 2 d’autres reconnaitront la base du deux. Plus nombreux sont les filtres dans les réseaux de neurones, plus les motifs appris pourront être complexes.

Les dernières couches du réseau mettent en commun les motifs détectés. Par exemple, si des éléments appartenant tous à un 2, comme sa boucle haute et sa base, sont détectés, le réseau de neurone en déduira que nous avons belle et bien affaire à un 2.

Structure d’un réseau de neurone convolutionnel

Voilà, nous savons reconnaitre des caractères !

Reconnaitre un chat

Alors qu’un enfant de deux ans est capable de reconnaitre un chat, il nous aura fallu plus de 70 ans pour faire de même avec un ordinateur. La technologie utilisée pour la reconnaissance d’images réelles est la même que celle utilisée pour reconnaitre des chiffres, c’est toujours un réseau de neurones convolutionnel. Le délai qui s’est écoulé entre la reconnaissance de caractère et la reconnaissance d’objets réels s’explique par deux facteurs :

  • Les images réelles et correctement étiquetées sont rares, il aura fallu attendre 2008 et ImageNet pour avoir une banque d’images étiquetées en anglais.
  • La puissance et le nombre d’images requises pour l’entrainement sont plus grands pour les objets réels que pour les chiffres.
Un chat « ideal »

Pour le comprendre, prenons l’exemple d’un chat, le chat peut être décrit comme un ensemble de formes, de couleurs et de texture. Nous imaginons tous un chat avec deux oreilles pointues, une bouille proche de celle du Chat Potté et un corps fin.

Ce chat idéal est simple à reconnaitre, mais dans les situations réelles, la souplesse légendaire des chats réserve parfois des mauvaises surprises aux ordinateurs.

Un chat beaucoup moins idéal

Dans cette photo, nous reconnaissons facilement un chat. Un ordinateur auquel nous aurions appris que le chat se compose de deux oreilles, puis d’une tête et d’un corps ne le pourrait pas. La reconnaissance d’image doit donc être capable de s’adapter aux différentes variations des objets présentes dans les situations réelles.

Alors que les représentations des chiffres manuscrits sont consistantes, la représentation d’un même objet varie grandement dans la nature. Il a donc fallu des réseaux de neurones avec un plus grand nombre de filtres (et donc plus de puissance de calcul) et encore plus d’images pour l’entrainement. Il aura donc fallu attendre 2015 pour avoir une précision proche de l’homme sur un jeu d’images réelles (quelques pourcents d’erreur sur CIFAR-100). C’est bon, notre ordinateur sait lui aussi reconnaitre un chat, et donc aussi un enfant, une voiture, …

De l’objet à l’image :  reconnaitre le chien, le chat, l’âne et la poule dans une même image.

Maintenant que la reconnaissance d’objets simples est acquise, il faut être capable de séparer les différents objets et leurs limites spatiales. Regardons l’exemple ci-dessous, l’image contient quatre animaux, la difficulté principale pour l’ordinateur est de séparer les différents objets pour ensuite les reconnaitre.

Du coq à l’âne

Deux algorithmes principaux existent actuellement pour séparer des objets :

  • « Bounding box » : En quadrillant l’image, on détermine quels carrés sont les plus susceptibles de contenir un objet. On entoure ainsi chaque objet d’une boite qui permet de la séparer des autres.
  • Méthode par densité : Au lieu de se restreindre à une boîte rectangulaire, l’algorithme suit les contours de l’objet.

En pratique, la « Bounding box » est la méthode la plus utilisée. Une fois les objets séparés, un algorithme de reconnaissance d’image classique détermine de quel objet il s’agit. L’algorithme de détection d’image est appliqué à chacun des rectangles contenant un objet.

La méthode est aujourd’hui relativement fiable et efficace, et s’applique même en temps réel comme dans la vidéo ci-dessous.

https://www.youtube.com/watch?v=K9a6mGNmhbc

De l’image à la situation : Etablir le lien entre le joueur et sa balle

Un joueur de baseball

L’image ci-dessus contient un joueur de baseball qui joue manifestement un match. Toutefois en appliquant la méthode de l’étape, voici ce que l’ordinateur reconnait.

Output d’un algorithme de détection d’objets

L’ordinateur reconnait bien les différents objets mais ne les met pas en lien, il ne peut pas dire que c’est un homme en train de jouer au baseball. Nous voudrions que l’ordinateur reconnaisse « un homme en train de jouer au base-ball » ou « un joueur de base-ball ». La difficulté de cette tâche surpasse tout ce que nous avons vu avant :

  • L’algorithme doit distinguer les différents objets.
  • L’algorithme doit reconnaitre individuellement les différents objets et les traduire dans un langage et une représentation qui lui est propre.
  • Il doit les mettre en lien dans une grammaire qui lui est propre.
  • Il doit traduire cette grammaire dans une langage compréhensible par les humains.

Pour effectuer cette tâche, en 2015 Fei-Fei & Karpathy de l’Université de Stanford ont proposé l’architecture suivante reprenant le découpage précédant :

  • Dans un premier temps, les objets sont séparés dans des boîtes.
  • A l’aide d’un réseau de neurone, les différents objets sont traduits et mise en lien dans le langage de l’ordinateur.
  • Un dernier réseau de neurone établit une correspondance entre la représentation apprise par l’ordinateur et le langage (en l’occurrence l’anglais).

Ci-dessous quelques résultats issus de l’algorithme (issus de http://cs.stanford.edu/people/karpathy/deepimagesent/).

Résultats issus de l’algorithme de Fei-Fei & Karpathy (2015)

L’algorithme distingue bien les différents objets et les actions réalisées par les différents protagonistes. Il reconnait que l’homme joue à la guitare, que le garçon fait un back flip et que la veste orange est une veste de sécurité.

La difficulté principale pour entrainer un algorithme comme celui-ci est la disponibilité des données, les images annotées et décrite précisément sont rares (même en anglais). Le modèle dépend donc fortement des données disponibles ce qui amène parfois à des résultats aberrants et souvent drôles.

Exemple 1 : Dark Vador dans un terminal d’aéroport ou un homme sur son canapé ?

L’ordinateur voit: « Un homme assis sur une canapé avec un ordinateur portable »

Ici, l’algorithme rate complètement la description de la situation, il y a plusieurs explications :

  • Le tapis roulant ressemble fortement à un canapé, les valises avec leur couleur noire et leur forme carrée ne sont pas si éloignées d’un ordinateur qui lui, reconnait Dark Vador comme un homme. Ainsi, comme la conjonction de l’homme, du canapé et de l’ordinateur est la moins improbable pour le réseau de neurone, il retient cette combinaison et en déduit qu’il s’agit d’un homme assis sur un canapé avec son ordinateur.
  • L’algorithme reconnait bien qu’il y a un homme sur la photo, mais pas Dark Vador. Le les données d’entrainement ne contenaient probablement pas d’image de Dark Vador et de sabre laser. L’explication est la même pour le terminal d’aéroport.

L’erreur s’explique donc ici par l’exotisme de la situation et des objets, personne n’a encore vu Dark Vador dans un aéroport. En entrainant l’algorithme sur des photos de Star Wars et d’aéroport, il aurait probablement été capable de reconnaitre la situation et le contexte.

Exemple 2 : funiculaire ou surfeur ?

L’ordinateur voit : “une personne sur un snowboard descendant une colline”

On peut affirmer avec certitude que l’algorithme a été exposé à des tramway/trains, des montagnes et des rails. Contrairement à la situation précédente, l’algorithme devrait donc être en mesure de reconnaitre la situation. L’erreur est ici probablement dû à un déséquilibre dans le jeu de données utilisé pour l’apprentissage. Celui-ci contient probablement beaucoup d’exemples de skieurs et de snowboardeurs dans une montagne. Toutefois, le jeu de données contient peu ou pas d’exemples de funiculaire dans une montagne.
Du point de vue du réseau de neurone, l’association du train et de la montagne est donc très improbable, il n’y a pas été confronté. Il ne retient donc pas l’association des deux et passe à côté du contexte réel de l’image.

On voit donc dans les deux exemples l’importance des données disponibles, de l’expérience de l’ordinateur et les limites de la génération de description. Celle-ci fonctionne bien dans les situations courantes et fréquentes mais pas dans les cas plus exotiques. De fait, la génération des descriptions des images reste très loin de ce qu’un enfant d’un jeune âge saurait faire.

Des essais récents ont été fait pour la description textuelle de vidéo (comme un télétexte), et en sont encore à leurs balbutiements.

L’application à une vidéo ajoute une dimension de complexité supplémentaire, les images se succèdent et sont liées les unes aux autres. La contextualisation ne peut donc plus seulement se faire au niveau de l’image mais aussi avec une dimension temporelle. Prenons un exemple simple, celui d’un flash-back. Comment faire comprendre à l’ordinateur la rupture ? Est-ce que les personnages et leurs liens sont toujours les mêmes ?

Ainsi, bien que les technologies pour la reconnaissance contextuelle d’images existent et progressent, elles ne sont pas encore au point pour une utilisation industrielle pour décoder des situations complexes. Si quelqu’un vous espionne, c’est donc plus surement un homme qu’une machine.

Sources :

Rich feature hierarchies for accurate object detection and semantic segmentation Tech report (v5):
https://arxiv.org/pdf/1311.2524.pdf
ImageNet – Wikipédia : https://en.wikipedia.org/wiki/ImageNet
MNIST – Yann Lecun : http://yann.lecun.com/exdb/mnist/
Learning to segment object candidate: https://arxiv.org/pdf/1506.06204.pdf
Inside-Outside Net: Detecting Objects in Context with Skip Pooling and Recurrent Neural Networks: https://arxiv.org/abs/1512.04143
Visual semantic alignements: http://www.cv-foundation.org/openaccess/content_cvpr_2015/papers/Karpathy_Deep_Visual-Semantic_Alignments_2015_CVPR_paper.pdf
Generation of image description with Semantic alignment: http://cs.stanford.edu/people/karpathy/deepimagesent/generationdemo/
http://cs.stanford.edu/people/karpathy/deepimagesent/
Exemple of video description generation:
https://motherboard.vice.com/en_us/article/watch-a-neural-network-try-to-describe-a-live-feed-of-amsterdams-streets

Cet article a été rédigé par Antoine Guillot pour NumeriCube.