Quand le Deep Learning permet l’apprentissage par renforcement des robots industriels – 5ième partie
Au cours des précédents billets de cette série, vous avez pu découvrir et appréhender la méthodologie mise en place pour intégrer des technologies innovantes au sein d'une solution industrielle telle que peut l'être le robot industriel IIWA de KUKA Robotics.
Dans ce cinquième et dernier billet de la série, nous allons faire le bilan de cette expérience, en donnant quelques résultats préliminaires, et essayant de vous fournir une vision de ce qui aurait pu être fait différemment et les extensions envisagées et/ou envisageables.
Les avantages et faiblesses du modèle entrainé
L'un des points cruciaux de notre plateforme concerne la précision du modèle de #DeepLearning entrainé. En effet, de ce dernier dépend toute l'intelligence du scénario.
La complexité des modèles de Deep Learning ainsi que celle des données sur lesquelles ils agissent les rendent particulièrement difficiles à interpréter et/ou visualiser.
Depuis quelques années, notamment pour les modèles de vision par ordinateurs, dans le cadre des réseaux convolutionnels, des méthodes de visualisations ont été proposées. Parmi celles-ci, nous pouvons citer :
- Visualiser les filtres
- Visualiser les activations pour une image donnée
- Chercher, pour chaque filtre de convolution, l'image maximisant l'activation du filtre
- Utiliser des filtres de déconvolution
Ces différentes méthodes sont plus ou moins aisées à mettre en œuvre et chacune permet de mettre en évidence des caractéristiques différentes sur le modèle appris.
Nous avons utilisé ici la seconde méthode afin de pouvoir visualiser les activations du réseau en fonction d'une image donnée.
Pour l'exemple, nous avons utilisé une canette de soda, d'une marque assez célèbre dont voici la sortie des 64 filtres de convolutions sur la première couche (l'entrée) de notre réseau de neurones profond.
Le résultat est ci-dessous :
Figure 1 : Visualisation des 64 premiers filtres de convolutions du réseau de neurones
L'un des faits marquants concerne l'activation des différents filtres de convolution. En effet, certains filtres sont très actifs, alors que d'autres sont, à l'inverse, totalement passifs.
Ce phénomène est courant dans les réseaux de convolutions qui agissent comme extracteur d'informations. Chaque filtre est entrainé de manière à détecter certains types de motifs, avec des motifs pas forcément présents dans toutes les images que l'on pourrait fournir en entrée.
Cette prédominance de chacun des filtres à réagir à un motif donné explique pourquoi, dans l'exemple ci-dessus, certains d'entre eux sont complètements blancs, ou noirs, dénotant ainsi l'absence du motif recherché par le filtre en question.
Concernant les filtres actifs, nous pouvons aussi noter que ces derniers sont très actifs sur la zone précise où se situe la canette, et passifs dans le reste de l'image. L'information extraite ici est donc très pertinente, et facilitera grandement le travail des couches suivantes, mettant donc en lumière ce principe de hiérarchisation dans l'extraction de l'information utile.
Enfin, pour conclure sur les performances de notre modèle de Deep Learning, la généralisation de ce dernier n'était pas optimale, notamment sur la classe des canettes de soda. Le jeu de données utilisé, qui pour rappel comportait environ 6000 images, demeure assez restreint pour des modèles avec autant de paramètres/neurones.
Concernant les canettes plus précisément, nous avons pu constater des cas de sur apprentissage, résultant d'une mauvaise généralisation de l'algorithme. La principale cause identifiée provient directement du jeu de données, lequel, pour la catégorie des canettes, possède un clair déséquilibre en proposant énormément de canette d'une marque très célèbre de soda, la résultante de ce déséquilibre étant des zones d'activations très ciblées sur le logo de la marque en question, plutôt que sur la forme générale d'une canette.
Travaux futurs et améliorations envisagées
Ce cas d'usage permettait de poser la base à un autre cas d'usage plus ambitieux permettant de synchroniser les mouvements du robot, en vue d'une tâche donnée, et ce sans aucune programmation préalable, simplement par observations successives des états de ce dernier.
Les différents sous-systèmes constituant le projet développé pour la circonstance permettent à présent de réaliser ce genre d'opération, et les évolutions du Framework CNTK qui devraient arriver à la fin du mois faciliteront la réalisation de ce projet. Et oui, d'autres sont encore attendues par rapport aux évolutions soulignées dans le billet CNTK, quoi de neuf ?. Ainsi en va le monde aujourd'hui, le cloud, etc. Vous avez dit évolution en continue ?!
Enfin, s'il fallait changer quelque chose dans l'approche que nous avons eu, notre premier choix se porterait sur le modèle de Deep Learning mis en place. Le corpus d'image à notre disposition, étant d'une importance relativement faible comme déjà souligné, nous opterions pour un apprentissage dit « par transfert » (Transfert Learning). Ce type d'apprentissage comme nous l'avons abordé utilise un modèle généraliste déjà entrainé en tentant de le spécialiser pour la tâche donnée.
Ce type d'apprentissage permettrait de bénéficier de la généralisation obtenue sur une base d'apprentissage plus large. Cela réduirait le temps d'apprentissage nécessaire et pourrait offrir de meilleurs résultats que l'approche que nous avons eu ici.
Assez de discours, passons à l'image !
Une petite vidéo ;-)
Cliquer ici pour visionner la vidéo
En conclusion
Comme mentionné précédemment, ce billet constitue le dernier de la série. Nous espérons que vous avez apprécié ce cas d'usage et notre parcours quant à l'élaboration d'une solution de bout-en-bout permettant d'y répondre, nous l'espérons de façon pertinente.
A vous de vous lancez !