Hey! Sie scheinen aus United States zu kommen, möchten Sie auf die Englisch Webseite wechseln?
Switch to Englisch site
Skip to main content

Movidius erfindet Deep Learning neu

NCS_d37b02bc950687e638090e36288f7de750d2083d.jpg

Neural Compute Stick ermöglicht KI in integrierten Anwendungen mit niedriger Leistungsaufnahme.

Künstliche Intelligenz (KI) ist eines jener Konzepte, wie auch das Konzept von sauberer Energie aus Kernfusion, die seit Jahrzehnten das Versprechen vor sich her tragen, einen tiefgreifenden Einfluss auf die Gesellschaft zu nehmen – und die Entwicklungen der letzten Jahre lassen KI endlich tatsächlich in einer größeren Zahl praktischer Anwendungen zum Tragen kommen. Dennoch ist es eine noch nicht gelöste Herausforderung, dass viele wesentliche Anwendungen, wie die Verarbeitung optischer Daten, äußerst rechenintensiv sind und deshalb die lokale Verarbeitung in Geräten mit geringem Stromverbrauch unmöglich machen.

Movidius – ein Unternehmen, das jetzt zu Intel gehört – ändert das jetzt mit der Myriad 2 Vision Processing Unit (VPU), die softwareprogrammierbares maschinelles Sehen bei superniedriger Leistungsaufnahme bietet.

In diesem Beitrag werfen wir einen ersten Blick auf die Myriad VPU-Technologie und das zugehörige SDK und wir machen erste Praxiserfahrungen mit dem Neural Compute Stick (NCS), der eine preisgünstige Entwicklung und Prototypenerstellung ermöglicht.

100 GFLOPS für 1 Watt

Myriad21_a36513c7cc195c1915fb3346e2e6b3ce73377346.jpg

Quelle: Datenblatt Movidius Myriad 2 VPU

Der Neural Compute Stick (139-3655) von Movidius bietet fantastische Leistung für Anwendungen zur Verarbeitung optischer Daten, nämlich mehr als 100 GFLOPS bei einer Leistungsaufnahme von lediglich 1 Watt. Erreicht wird das über ein 600-MHz-System-on-Chip (SoC), das 12 128-Bit-VLIW-Prozessoren integriert, die um 2 MB On-Chip-Speicher mit einer Übertragungsrate von 400 GB/s angeordnet sind.

Hauptmerkmale:

  • Unterstützung für FP16, FP32 und Ganzzahl-Operationen mit 8-, 16- und 32-Bit-Genauigkeit
  • Echtzeit-Inferenz auf dem Gerät ohne Verbindung zur Cloud
  • Einsetzen vorhandener Convolutional Neural Network (CNN)-Modelle oder individuell ausgebildeter Netzwerke
  • Komplette Daten- und Stromversorgung erfolgt über einen einzelnen USB-3.0-Anschluss an einen Host-PC

Zwar gibt es einen USB-3.0-Anschluss, aber für viele Anwendungen sollte ein USB-2.0-Anschluss genügen. Beachten Sie, dass für erhöhte Leistung auch mehrere NCS über einen geeigneten USB-Hub als Netzwerk zusammengeschlossen werden können.

Caffe-Unterstützung

Unterstützung für Anwendungen des maschinellen Lernens werden über das Open-Source-Caffe-Framework bereitgestellt, das vom BAIR Lab (Berkeley Artificial Intelligence Research) entwickelt wird. Die Leitprinzipien von Caffe sind folgende:

  • Ausdrucksform: Modelle und Optimierungen sind als Klartextschemen anstelle von Code definiert.
  • Geschwindigkeit: Für Forschung und Industrie gleichermaßen ist Geschwindigkeit entscheidend in Hinblick auf modernste Modelle und massive Datenumfänge.
  • Modularität: Neue Aufgaben und Einstellungen erfordern Flexibilität und Erweiterung.
  • Offenheit: Wissenschaft und angewandter Fortschritt verlangen gemeinsamen Code, Referenzmodelle und Reproduzierbarkeit.
  • Community: Akademische Forschung, Startup-Prototypen und industrielle Anwendungen gewinnen samt und sonders Stärke durch die gemeinsame Diskussion und Entwicklung in einem BSD-2-Projekt.

Die Projekt-Website bietet eine Rundreise durch Anatomie und Funktionen von Caffe. Wenn Sie, wie ich selbst, wenig Erfahrung mit KI-Technologie haben, gibt es eine ganze Menge, was man darauf mitnehmen kann. Bedenken sind in dieser Hinsicht überflüssig, denn das Neural Compute (NC) SDK von Movidius bietet das Framework gemeinsam mit der Hardwareunterstützung im Paket und darüber hinaus Beispielanwendungen, die auf vorhandenen Modellen neuronaler Netzwerke aufsetzen. Mit anderen Worten: In null Komma nichts haben Sie die Sache im Griff und prüfen die Leistungen von Netzwerken und der NCS-Hardware.

SDK-Installation

NCS_example031_b6dc86b7d1ac74ed95bfb384e88e9a3386b55ad6.jpg

Ein Computer mit Betriebssystem Ubuntu 16.04 ist für die Installation des NC SDK erforderlich. Unter Umständen könnten vielleicht auch andere Distributionen zur Zusammenarbeit bewegt werden, aber die genannte ist die einzige, die angegeben wird.

Es folgt eine Zusammenfassung der erforderlichen Schritte und es wird empfohlen, dass Sie das PDF-Dokument Getting Started Guide (Erste-Schritte-Anleitung) und andere offizielle Handbücher für genauere Anweisungen herunterladen.

Nachdem das NC SDK heruntergeladen wurde, kann es folgendermaßen installiert werden:

$ 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

Das kann eine Weile dauern, während das Toolkit und die zugehörigen Verknüpfungen installiert werden. Beachten Sie, dass das Setup-Skript Ihre ~/.bashrc-Datei aktualisiert, um die Umgebungsvariable PYTHONPATH entsprechend festzulegen. Beispielsweise lautet die bei der Standardinstallation hinzugefügte Zeile:

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

Sollten andere Benutzer das SDK ebenfalls nutzen wollen, müssten sie diese Zeile ihrer ~/.bashrc-Datei genauso hinzufügen.

Angenommen, wir befinden uns nach wie vor im bin-Verzeichnis, können wir anschließend die Caffe-Modelle für den Beispiel-Code installieren:

$ cd data

$ ./dlnets.sh

Wenn wir jetzt ins Verzeichnis zurück navigieren, in dem das SDK ursprünglich entpackt worden ist, können wir die API installieren:

$ cd ../..

$ tar xzvf MvNC_API-1.07.07.tgz

$ cd ncapi

$ ./setup.sh

Es gibt eine Reihe von Beispielen, die aus dem bin-Verzeichnis heraus ausgeführt werden können, um den NCS-Betrieb auszuprobieren.

$ cd ../bin

$ make example00

$ make example01

$ make example02

$ make example03

Beispiel: Schlussfolgerungen aus einem Videostream

coffee_mug1_63fc1f088f0459a8af395ba3ceb5d5c611083cf9.jpg

Beispiel Python Stream_infer

Jetzt können wir uns einem interessanteren Beispiel widmen. Dafür wird ein Video-Eingabegerät gebraucht und wir haben uns für die Verwendung der Webcam Logitech C920 Full HD (125-4272) entschieden, weil sie über ausgezeichnete Linux-Unterstützung verfügt.

$ cd ../ncapi/tools

$ ./get_models.sh

$ ./convert_models.sh

$ cd ../py_examples/stream_infer

$ python3 stream_infer.py

shower_cap1_f06ff3be07988e14156d30a3bb279ef114eebc22.jpg

Autsch! 60,60 % Duschhaube?! Na gut, wir sollten nicht den Überbringer der Nachricht erschießen – das NCS hat einfach nur die schwere Arbeit erledigt und die Schlussfolgerung haben wir dem Convolutional Neural Network (CNN) zu verdanken. Und das ist vielleicht auch irgendwie verständlich. Wie auch immer, oben können wir sehen, dass das gleiche Beispiel bei einem Kaffeebecher viel besser funktioniert hat. Das Gleiche gilt für eine große Zahl anderer Objekte.

Hier entscheidend ist die Geschwindigkeit, mit der unsere KI zu Schlussfolgerungen in der Lage ist – und natürlich die aufgewendete Energie. Auf jeden Fall scheint das System die Schlussfolgerungen schnell zu ziehen.

Das im Beispiel stream_infer.py eingesetzte Standardmodell nennt sich SqueezeNet und ist ein CNN, das Genauigkeit in ähnlicher Weise wie ein anderes namens AlexNet erzielt. Letzteres hat das schon ungefähr 4 Jahre mehr auf dem Buckel und wurde darauf trainiert, die 1,3 Millionen hochauflösenden Bilder im LSVRC-2010 ImageNet Training Set in die 1000 verschiedene Kategorien zu klassifizieren. Allerdings soll SqueezeNet das angeblich mit einem Modell erreichen, das 510 Mal kleiner ist als das von AlexNet.

stream_infer.py kann so konfiguriert werden, dass es entweder auf SqueezeNet oder auf AlexNet zurückgreift. So kann deren Leistung auf dem NCS verglichen werden. Das ist einfach eine Aufgabe des (Aus-)Kommentierens einiger Zeilen in am Anfang der Python-Datei. Es gibt auch Gender- und GoogleNet-Modelle, die auf gleiche Weise konfiguriert werden können. Zum Beispiel:

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

Das Beispiel stream_infer.py sucht im Verzeichnis NETWORK_DIRECTORY nach den Dateien „graph“-, „stat.txt“- und „categories.txt“. Wenn wir die Größe der graph-Datei für AlexNet und SqueezeNet vergleichen:

graphSize1_a2d9b802cedf8eb33b3132a47e8551baf5d499dc.jpg

Nicht so ein großer Unterschied angesichts von 510 Mal für den „binary graph“, aber immer noch ein beträchtlicher Größenunterschied.

Netzwerk-Kompilierung und -Profiling

CompileProfile1_d4b9897b3546f58da417bd4049a2d2c3a6317eb1.jpg

Quelle: Movidius-NCS-Toolkit-Handbuch

Neue CNNs – zum Beispiel für das Klassifizieren von Bildtypen, die nicht bereits von vorhandenen CNNs abgedeckt werden – würden mithilfe eines angemessenen Frameworks entwickelt und ausgebildet. In der Folge kann das Netzwerk mithilfe des NCS Toolkit, das als Teil des SDK mitgeliefert wird, in eine graph-Datei kompiliert und profiliert werden.

Auf integrierte Plattformen abzielen

Obwohl die API ursprünglich auf demselben Computer wie das Toolkit installiert werden muss (ein x86-64-System unter Ubuntu 16.04), können die Bibliotheken, Header usw. in der Folge auch auf anderen Plattformen installiert werden. Und tatsächlich wird mit dem SDK ein Satz von Paketen für Raspbian Jessie bereitgestellt. Das bedeutet: Werden diese Pakete sowie die Abhängigkeiten aus dem Raspbian-Repository installiert, muss in stream_infer.py nur noch eine einzige Zeile geändert werden, damit dieses Beispiel auch auf einem Raspberry Pi läuft.

Typische Anwendungen

MotoMod1_fcb7a250f38e1b16a238283f2e30c0cf282f8400.jpg

VPU von Movidius, ausgewählt für die 4K-VR-Pixelverarbeitung im neuen Motorola Moto Mod. Quelle: movidius.com

Anwendungen für maschinelles Sehen sind unter anderem:

  • Dronen und Robotik
  • Erweiterte und virtuelle Realität
  • Wearables
  • Intelligente Sicherheitsfunktionen

Es ist nicht schwer, sich vorzustellen, wie die Myriad VPU in Überwachungskameras eingesetzt werden könnte, die zum Beispiel ein in der Einfahrt geparktes Fahrzeug identifizieren oder zwischen einem Haustier und einem Einbrecher unterscheiden könnten. Gleichermaßen einfach können Sie sich bestimmt vorstellen, um wie viel wertvoller ein Haushaltsroboter (zum Beispiel ein Staubsauger) oder Dronenanwendungen werden können, bei denen Sie unter Umständen möchten, das bestimmte Objekte ausgespart oder speziell gesucht werden. Das wären nur einige der Einsatzmöglichkeiten und es ist ziemlich klar, dass eine Menge weiterer folgen werden.

Erste Gedanken

Die Movidius-Technologie ermöglicht bereits die praktische Anwendung von KI in vielen Anwendungen der wirklichen Welt und eröffnet weitere Anwendungsmöglichkeiten in allermodernsten Produkten, zum Beispiel bei der 4K-VR-Pixelverarbeitung für Smartphone-Addons und Systeme für das Aufspüren und Vermeiden durch Dronen. Die Verfügbarkeit des Neural Compute Stick bedeutet, dass jedermann mit der Myriad 2 VPU sofort mit dem Experimentieren beginnen und auf ganz bequeme Weise vorhandenen integrierten Plattformen mächtige Möglichkeiten des maschinellen Lernens hinzufügen kann.

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