Hé! Vous semblez être en United States, souhaitez-vous utiliser notre site English ?
Switch to English site
Skip to main content

Movidius fait monter en puissance le deep learning

NCS_d37b02bc950687e638090e36288f7de750d2083d.jpg

L'IA rendue possible dans les applications embarquées de faible puissance par Neural Compute Stick.

L'Intelligence artificielle (IA) est, à l'instar de l'énergie propre produite à partir de la fusion nucléaire, l'une des choses qui, depuis des décennies, est appelée à retentir profondément sur la société — et les progrès réalisés ces dernières années permettent enfin d'exploiter l'IA dans un plus grand nombre d'applications pratiques. Cependant, le problème qui se pose de longue date est que de nombreuses applications clés, telles que le traitement de la vision, sont gourmandes en calculs et excluent par conséquent la transformation locale des dispositifs de faible puissance.

Movidius — qui fait désormais partie d'Intel — est en train de changer cette situation grâce à son unité VPU (Vision Processing Unit) Myriad 2, qui offre une visibilité de machine programmable par logiciel à ultrabasse consommation.

Dans ce billet, nous allons examiner dans un premier temps la technologie VPU Myriad et son SDK connexe, et nous familiariser avec le Neural Compute Stick (NCS) qui permet le développement et le prototypage à bas coût.

100 Gflops/watt

Myriad21_a36513c7cc195c1915fb3346e2e6b3ce73377346.jpg

Source : Présentation du produit VPU Myriad 2 de Movidius

Le Movidius Neural Compute Stick (139-3655) offre des performances exceptionnelles pour les applications de traitement de la visibilité, de plus de 100 GFlops pour une consommation électrique d'environ 1 watt seulement, par le biais d'un système sur puce (SoC) de 600 MHz, qui intègre 12 processeurs VLIW à 128 bits regroupés dans une mémoire intégrée de 2 Mo offrant des taux de transfert de l'ordre de 400 Gbit/s.

Ses principales caractéristiques sont les suivantes :

  • Prise en charge de FP16, FP32 et des opérations de nombre entier avec précision de 8, 16 et 32 bits
  • Inférence sur circuit en temps réel sans connexion au Cloud
  • Déploiement de modèles de réseau neuronal convolutionnel (CNN) existants ou de réseaux spécialement formés
  • Toutes les données et l'alimentation sont fournies sur un simple port USB 3.0 sur un PC hôte.

Même s'il est équipé d'un port USB 3.0, le port USB 2.0 devrait convenir à de multiples usages. Notez également que pour obtenir de meilleures performances, on peut mettre en réseau plusieurs NCS via un concentrateur USB adéquat.

Prise en charge de Caffe

La prise en charge d'applications d'apprentissage en profondeur est fournie par le framework de Caffe en open source qui a été développé par le laboratoire Berkeley Artificial Intelligence Research (BAIR). Les principes orientatifs de Caffe sont les suivants :

  • Expression : les modèles et les optimisations sont définis sous forme de schémas en texte clair plutôt qu'en code.
  • Vitesse : pour les chercheurs et les industriels, la vitesse est cruciale pour les modèles de pointe et les données massives.
  • Modularité : il faut de la souplesse et des possibilités d'extension pour les nouvelles tâches et les nouveaux environnements.
  • Ouverture d'esprit : le progrès scientifique et ses applications nécessitent une approche commune en termes de code, de modèles de référence et de reproductibilité.
  • Communauté : la recherche académique, les prototypes de startup et les applications industrielles partagent leurs points forts communs par une concertation et une évolution en commun dans le cadre d'un projet BSD-2.

Le site Web du projet propose une vue d'ensemble de l'anatomie et des fonctions de Caffe. Si comme moi vous n'avez qu'une petite expérience dans la technologie de l'IA, vous aurez un tas de choses à assimiler. Ne craignez rien cependant, car le SDK de Movidius Neural Compute (NC) rassemble le framework et le support matériel, ainsi que des exemples d'applications qui exploitent les modèles de réseau neuronal existants. Autrement dit, vous êtes opérationnel en un rien de temps, et en mesure d'évaluer les performances des réseaux et du matériel du NCS.

Installation du SDK

Installation du SDK

NCS_example031_b6dc86b7d1ac74ed95bfb384e88e9a3386b55ad6.jpg

Un ordinateur fonctionnant sous Ubuntu 16.04 est requis pour l'installation du SDK NC. D'autres distributions pourraient fonctionner, mais c'est la seule qui a été spécifiée.

Vous trouverez ci-après un résumé des mesures prises. Il est conseillé de télécharger le Guide de démarrage au format PDF et d'autres documents officiels pour des instructions plus détaillées.

Une fois téléchargé, le SDK NC peut être installé comme suit :

$ sudo apt-get update

$ sudo apt-get upgrade

$ tar xvf MvNC_SDK_1.07.07.tgz

$ tar xzvf MvNC_Toolkit-1.07.06.tgz

$ cd bin

$ ./setup.sh

Cette opération peut prendre un peu de temps, car le kit d'outils et ses dépendances connexes seront installés. Notez que le script de configuration met à jour votre fichier ~/.bashrc afin de configurer la variable d'environnement PYTHONPATH en conséquence. Par ex., avec l'emplacement d'installation par défaut, la ligne ajoutée est :

export PYTHONPATH=$env:"/opt/movidius/caffe/python":$PYTHONPATH

Pour autoriser d'autres utilisateurs à utiliser le SDK, ceux-ci devront également ajouter cette ligne à leur fichier ~/.bashrc.

En supposant que nous sommes encore dans le répertoire bin, nous pouvons alors installer les modèles de Caffe pour l'exemple de code :

$ cd data

$ ./dlnets.sh

En revenant au répertoire où le SDK a été extrait pour la première fois, nous pouvons alors installer l'API :

$ cd ../..

$ tar xzvf MvNC_API-1.07.07.tgz

$ cd ncapi

$ ./setup.sh

Il existe une série d'exemples pouvant être exécutés depuis le répertoire bin pour tester le fonctionnement du NCS.

$ cd ../bin

$ make example00

$ make example01

$ make example02

$ make example03

Exemple d'inférence de flux vidéo

coffee_mug1_63fc1f088f0459a8af395ba3ceb5d5c611083cf9.jpg

Python stream_infer example

Passons maintenant à un exemple particulièrement intéressant ! Un dispositif d'entrée vidéo étant nécessaire pour l'opération, nous avons décidé d'utiliser la Webcam Logitech C920 en Full HD (125-4272), car elle bénéficie d'une excellente prise en charge de Linux.

$ cd ../ncapi/tools

$ ./get_models.sh

$ ./convert_models.sh

$ cd ../py_examples/stream_infer

$ python3 stream_infer.py

shower_cap1_f06ff3be07988e14156d30a3bb279ef114eebc22.jpg

Ouille ! Un bonnet de douche 60,60% ? ! OK, ce n'est pas de ma faute — le NCS a juste fait le gros travail et nous devons remercier le réseau neuronal convolutionnel (CNN) utilisé pour l'inférence. Reconnaissons que c'est sans doute compréhensible. Quoi qu'il en soit, de ce qui précède, nous constatons qu'avec le même exemple, on s'en est mieux sorti avec une tasse à café ainsi qu'avec d'autres objets.

Ce qui compte est la vitesse à laquelle l'IA peut faire des inférences — et vu l'énergie utilisée, je ne vois pas comment il serait possible que celles-ci ne soient pas rapides.

Le modèle par défaut utilisé par l'exemple stream_infer.py est appelé SqueezeNet, un CNN qui obtient une précision équivalente à celle du modèle AlexNet qui le précède d'environ 4 ans, et qui a été entraîné pour classifier les 1,3 million d'images à haute résolution de l'ensemble de données ImageNet LSVRC-2010 en 1 000 différentes classes ; même si on estime que SqueezeNet y est parvenu avec un modèle 510x plus petit que celui d'AlexNet.

L'exemple stream_infer.py peut être configuré pour utiliser soit SqueezeNet soit AlexNet, ce qui permet de comparer leurs performances sur le NCS. Il s'agit simplement de (dé)commenter les lignes en haut du fichier Python. Il existe également les modèles Gender et GoogleNet qui sont configurables de la même façon. Par ex. :

NETWORK_IMAGE_WIDTH = 224 # the width of images the network requires

NETWORK_IMAGE_HEIGHT = 224 # the height of images the network requires

NETWORK_IMAGE_FORMAT = "RGB" # the format of the images the network requires

NETWORK_DIRECTORY = "../../networks/GoogLeNet/" # directory of the network

L'exemple stream_infer.py recherche les fichiers "graph", "stat.txt" et "categories.txt" dans NETWORK_DIRECTORY. Si on compare la taille du fichier de graphique pour AlexNet et SqueezeNet :

graphSize1_a2d9b802cedf8eb33b3132a47e8551baf5d499dc.jpg

La différence n'atteint pas vraiment 510x pour le fichier graphique, mais elle demeure grande en termes de taille de fichier.

Network compilation and profiling

CompileProfile1_d4b9897b3546f58da417bd4049a2d2c3a6317eb1.jpg

Source : Documentation du kit d'outils NCS de Movidius

De nouveaux CNN — par ex., pour classifier les types d'images recouvertes par un CNN existant — seront conçus et entraînés sur la base d'un framework approprié. Le réseau sera ensuite compilé en un fichier graphique et profilé à l'aide du kit d'outils NCS qui accompagne le SDK.

Ciblage de plates-formes embarquées

Même s'il faut d'abord installer l'API sur le même ordinateur que le kit d'outils (système Ubuntu 16.04 x86-64), les bibliothèques, les en-têtes, etc. seront ensuite installés sur d'autres plates-formes. De fait, un ensemble de paquets pour Raspbian Jessie est fourni avec le SDK. Ainsi, après l'installation de ces dépendances supplémentaires du référentiel Raspbian, une seule ligne est conservée dans l'exemple stream_infer.py à modifier afin que cet exemple puisse fonctionner sur un Raspberry Pi.

Applications type

MotoMod1_fcb7a250f38e1b16a238283f2e30c0cf282f8400.jpg

VPU Movidius sélectionné pour le traitement de pixels VR de 4K dans le nouveau Motorola Moto Mod. Source : movidius.com

Les applications de visibilité de la machine incluent :

  • Drones et robotique
  • Réalité virtuelle et augmentée
  • Appareils portables
  • Sécurité intelligente

On voit aisément comment l'unité VPU de Myriad VPU pourrait être exploitée dans les caméras de sécurité afin, par exemple, d'identifier un véhicule garé dehors et faire la différence entre un cambrioleur et un animal de compagnie. Imaginez également la grande valeur ajoutée qu'elle pourrait apporter à un robot ménager — par ex., un aspirateur — et dans les applications de drones, où vous voudriez peut-être éviter ou rechercher certains objets. Toutes ces possibilités illustrent les utilisations de cette technologie, et manifestement, il en sortira beaucoup plus encore.

Réflexions initiales

La technologie Movidius permet déjà la mise en œuvre pratique de l'IA dans un grand nombre d'applications réelles, et continue de se rendre utile dans les produits de pointe, tels que le traitement des pixels VR de 4K pour les modules complémentaires des smartphones et pour les systèmes "voir et éviter" des drones. La disponibilité de Neural Compute Stick signifie que tout le monde peut immédiatement commencer à explorer l'unité VPU de Myriad 2, et ajouter aisément de puissantes capacités d'apprentissage en profondeur aux plates-formes embarquées existantes.

Andrew Back

Open source (hardware and software!) advocate, Treasurer and Director of the Free and Open Source Silicon Foundation, organiser of Wuthering Bytes technology festival and founder of the Open Source Hardware User Group.
DesignSpark Electrical Logolinkedin