Überwachungssysteme zum Einsatz in einem breiten Bereich von Märkten und Applikationen basieren weitgehend auf den Fähigkeiten ihrer eingebetteten Vision-Systeme. Diese Überwachungssysteme bewähren sich in zahlreichen Anwendungen, von der Überwachung einzelner Events und des Verkehrsgeschehens bis zu ISR-Einsätzen (Intelligence, Surveillance and Reconnaissance) und Business Intelligence, als unternehmensbezogene Datenanalyse betrieblicher Aktivitäten. Diese große Bandbreite an unterschiedlichen Einsatzsituationen bringt eine Reihe von systemischen und betrieblichen Herausforderungen mit sich, die von den Systementwicklern bei der Lösungsfindung detailliert berücksichtigt werden müssen. Dazu zählen:

  • Multi Camera Vision – Die Fähigkeit zum Interface mit mehreren homogenen oder heterogenen Bildsensoren.
  • Computer Vision – Die Fähigkeit zur Systementwicklung unter Einsatz von High-Level Bibliotheken und Frameworks wie OpenCV und OpenVX.
  • Machine Learning – Die Fähigkeit zur Nutzung von Frameworks wie Caffe zur Implementierung von Inferenzmaschinen für Machine Learning.
  • Höhere Auflösungen und Frameraten – Beschleunigt die Datenverarbeitung, wie sie für jeden Frame eines Bildes erforderlich ist.

ECK-DATEN

Der Software-Stack Revision bietet den Entwicklern die volle Nutzung der Fähigkeiten der Zynq-7000- und Zynq UltraScale+ MPSoC- Bausteine. Dies ist besonders wichtig, da man nicht ein eigens ausgebildeter Spezialist sein muss, um Algorithmen in programmierbarer Logik zu implementieren. Diese Algorithmen und Machine-Learning Applikationen lassen sich mithilfe von High-Level Frameworks in Industrie-Standards entwickeln. Das verkürzt die Entwicklungszeit der Systeme und ermöglicht dem Entwickler die Erstellung von Systemen, die reaktionsschnell und rekonfigurierbar sind, und außerdem eine optimale Lösung hinsichtlich der Leistungsaufnahme realisieren.

Abhängig von der jeweiligen Applikation verwenden die eingesetzten Überwachungssysteme spezifische Algorithmen, etwa für den optischen Fluss, wenn die Detektion von Bewegungen innerhalb des Bildes gefordert ist. Stereo-Vision bietet die Tiefenerkennung im Bild, während diverse Machine-Learning-Verfahren ebenfalls zur Detektion und Klassifizierung von Objekten im Bild verwendet werden.

Heterogene Systeme auf einem Chip wie der All Programmable Zynq-7000 und das Zynq Ultrascale+ MPSoC von Xilinx werden zunehmend zur Entwicklung von Überwachungs-Applikationen eingesetzt. Diese Bausteine vereinen High-Performance ARM-Kerne zum Aufbau von Verarbeitungssystemen mit der programmierbaren Logikumgebung.

Diese enge Kopplung von programmierbarer Logik und Verarbeitungssystemen erlaubt die Erstellung von Systemen, die im Vergleich zu traditionellen Ansätzen wesentlich reaktionsschneller, zudem rekonfigurierbar und effizienter im Leistungsverbrauch sind. Traditionelle Verfahren mit CPU/GPU-basierten SoCs erfordern den Einsatz des Systemspeichers zum Transfer der Bilder von einer Verarbeitungsstufe zur nächsten. Das bewirkt Verluste im Determinismus, erhöht die Leistungsaufnahme und die Latenz des Ansprechverhaltens im System, da mehrere Datenquellen auf denselben Speicher zugreifen und dabei einen Engpass im Verarbeitungs-Algorithmus auslösen. Dieser Engpass wird noch schwerwiegender, wenn die Ansprüche an Framerate und Bildauflösung steigen.

Dieser Engpass lässt sich beseitigen, wenn man eine Lösung mit einem Zynq-7000 oder Zynq UltraScale+ MPSoC-Baustein implementiert. Diese Bausteine ermöglichen es dem Entwickler, die Bildbearbeitungs-Pipeline innerhalb der programmierbaren Logik des Bausteins zu implementieren, mit dem Aufbau einer echten parallelen Image-Pipeline zur Weiterleitung des Ausgangssignals einer Stufe auf die Eingangsstufe der nächsten. Dies ermöglicht ein deterministisches Ansprechverhalten mit reduzierter Latenz und die Optimierung der Leistungsaufnahme.

Revision-Stack

Bild 1: Traditioneller Ansatz mit CPU/GPU im Vergleich zum Zynq-7000/Zynq UltraScale+ MPSoC. Xilinx

Der Einsatz der programmierbaren Logik zur Implementierung der Bildbearbeitungs-Pipeline eröffnet außerdem die Möglichkeit einer wesentlich vielseitigeren Schnittstellenauslegung als traditionelle Ansätze per CPU/GPU-SoC, die mit fest definiertem Interface arbeiten (Bild 1). Die flexible Natur der I/O-Strukturen in der programmierbaren Logik erlaubt universelle Any-to-Any-Konnektivität und ermöglicht so Schnittstellen in Industrie-Standards wie MIPI, Camera Link, HDMI, und so weiter. Diese Flexibilität erlaubt darüber hinaus auch die Implementierung von maßgeschneiderten Legacy-Schnittstellen mit der Möglichkeit von Aktualisierungen zur Unterstützung der neuesten Interface-Standards. Der Einsatz der programmierbaren Logik ermöglicht auch den Anschluss von mehreren parallelen Kameras.

Kritisch ist hier die Möglichkeit der Implementierung der Algorithmen einer Applikation ohne die Notwendigkeit für die Neuerstellung (rewrite) aller High-Level Algorithmen in einer Hardware-Beschreibungssprache wie Verilog oder VHDL. An dieser Stelle kommt der Revision-Stack (Eigenschreibweise: reVISION) ins Spiel.

Der Revision-Stack

Der Revision-Stack ermöglicht dem Entwickler die Implementierung von Computer-Vision- und Machine-Learning-Verfahren (Bild 2). Dies geschieht durch die Verwendung derselben High-Level Frameworks und Bibliotheken, die auch für den Zynq-7000 und das Zynq UltraScale+ MPSoC eingesetzt werden. Dazu kombiniert Revision einen breiten Bereich von Ressourcen für die Entwicklung von Plattformen, Applikationen und Algorithmen. Der Stack ist in drei unterschiedliche Ebenen unterteilt:

Revision-Stack

Bild 2: Aufbau des Revision-Stack. Xilinx

  • Plattform-Entwicklung – Dies ist die niedrigste Ebene des Stacks und diejenige, auf der die anderen Layer des Stacks aufsetzen. Dieser Layer bewirkt auch die Plattform-Definition für das SDSoC-Tool.
  • Algorithmus-Entwicklung – Der mittlere Layer des Stacks bietet den nötigen Support zur Implementierung der geforderten Algorithmen. Dieser Layer unterstützt außerdem die Beschleunigung der Bildverarbeitung der Inferenzsysteme für das Machine Learning innerhalb der programmierbaren Logik.
  • Applikations-Entwicklung – Die höchste Ebene des Stacks bietet Unterstützung für Industrie-Standard-Frameworks. Diese erlauben die Entwicklung der Applikation unter Nutzung der Layer für die Plattform- und Algorithmus-Entwicklung.

Sowohl die Algorithmus-, als auch die Applikationsebene des Stack sind so ausgelegt, dass sie einen traditionellen Bildbearbeitungsfluss unterstützen, und gleichzeitig auch einen Machine-Learning-Flow beherrschen. Die Algorithmus-Ebene ist für die Unterstützung der Entwicklung von Bildbearbeitungs-Algorithmen unter Verwendung der OpenCV-Bibliothek zuständig. Dies umfasst auch die Fähigkeit zur Beschleunigung einer signifikanten Anzahl von OpenCV-Funktionen (einschließlich dem OpenVX Core Subset) innerhalb der programmierbaren Logik.

Zur Unterstützung von Machine Learning ausgelegt, bietet der Layer zur Algorithmus-Entwicklung mehrere vordefinierte Hardware-Funktionen, die innerhalb der programmierbaren Logik platziert werden können, um eine Machine-Learning-Inferenzmaschine zu implementieren. Auf diese Bildbearbeitungs-Algorithmen und Machine-Learning-Inferenzsysteme wird anschließend zugegriffen: Sie werden im Layer zur Applikationsentwicklung eingesetzt, um die End-Applikation zu entwickeln und Unterstützung für High-Level-Frameworks wie OpenVX und Caffe bereitzustellen.

Der vom Revision-Stack zur Verfügung gestellte Funktionsumfang bietet alle notwendigen Elemente zur Implementierung der für High-Performance-Überwachungssysteme erforderlichen Algorithmen.

Beschleunigung von OpenCV in Revision-Stack

Einer der interessantesten Aspekte des Layers zur Algorithmus-Entwicklung ist die Fähigkeit, darin einen breiten Bereich von OpenCV-Funktionen zu beschleunigen. In diesem Layer kann man die beschleunigungsfähigen OpenCV-Funktionen in vier High-Level-Kategorien gruppieren:

  • Berechnung – Umfasst Funktionen wie die absolute Differenz zwischen zwei Frames, Pixel-Operationen (Addition, Subtraktion und Multiplikation), sowie Gradienten- und Integral-Operationen.
  • Eingangssignalverarbeitung – Bietet Unterstützung für Bittiefen-Konversionen, Kanaloperationen, Histogramm-Entzerrung, Remapping und Resizing.
  • Filterung – Bietet Unterstützung für einen breiten Bereich von Filtern, einschließlich Sobel, Custom Convolution (spezifische Faltungen) und Gauss-Filter.
  • Andere – Bietet einen breiten Bereich von Funktionen, einschließlich Canny/Fast/Harris-Kantendetektion, Schwellenbildung, sowie SVM- und HoG-Klassifikatoren.

Diese Funktionen stellen auch die Kernfunktionen des OpenVX-Subsets dar. Sie bieten eine enge Integration mit dem Applikationsentwicklungs-Layer und Support von OpenVX. Entwickler können diese Funktionen zur Erstellung einer algorithmischen Pipeline in der programmierbaren Logik einsetzen. Diese Möglichkeit zur Implementierung von Funktionen innerhalb der Logik erhöht somit die Performance der implementierten Algorithmen.

Machine Learning in Revision-Stack

Revision ermöglicht die Integration mit Caffe und bietet damit die Fähigkeit zur Implementierung von Machine-Learning-Inferenzmaschinen. Die Integration mit Caffe geschieht sowohl auf der Ebene der Algorithmusentwicklung, als auch der Applikationsentwicklung. Das Caffe-Framework bietet den Entwicklern eine Reihe von Bibliotheken, Modellen und im Voraus abgeglichene Gewichtungen in einer C++-Bibliothek, außerdem Python- und Matlab-Bindings.

Dieses Framework ermöglicht dem Anwender die Erstellung von Netzwerken und deren Training zur Ausführung der gewünschten Operationen, ohne dazu bei Null beginnen zu müssen. Zur Unterstützung der Reuse-Fähigkeit können die Caffe-Nutzer ihre Modelle teilen, und zwar über den Model Zoo, der mehrere Netzwerkmodelle bereitstellt. Sie lassen sich, falls gewünscht, implementieren und auch für einen speziellen Task aktualisieren. Diese Netzwerke und Gewichtungen werden in einer prototxt-Datei definiert, wenn sie in der Machine-Learning-Umgebung implementiert werden. Diese Datei wird zur Definition der Inference Engine herangezogen.

Revision-Stack

Bild 3: Caffe Flow Integration. Xilinx

Revision bietet die Integration mit Caffe, was die Implementierung von Machine-Learning-Inferenzmaschinen so leicht macht wie die Bereitstellung einer prototxt-Datei: Das Framework erledigt den Rest. Diese prototxt-Datei wird anschließend zur Konfigurierung des Prozessorsystems und der Hardware-optimierten Bibliotheken in der programmierbaren Logik verwendet. Die programmmierbare Logik wird zur Implementierung der Inferenzmaschine eingesetzt. Sie bietet Funktionen wie Conv, ReLu, Pooling und andere (Bild 3)

Die Systeme zur Zahlendarstellung in der Machine-Learning-Inferenzmaschine spielen auch eine signifikante Rolle für deren Performance. Machine-Learning-Applikationen nutzen zunehmend effizientere Zahlensysteme auf der Basis von Festkomma-Notierungen mit reduzierter Präzision, etwa INT8. Der Einsatz von Festkommasystemen mit reduzierter Präzision geht ohne signifikanten Verlust an Genauigkeit, wenn man ihn mit dem traditionellen 32 (FP32) Gleitkomma-Ansatz vergleicht. Da die Festkomma-Mathematik außerdem wesentlich leichter zu implementieren ist als das Gleitkomma-Verfahren, führt dieser Übergang auf INT8 in manchen Implementierungen zu effizienteren und schnelleren Lösungen.

Der Einsatz von Festkomma-Zahlensystemen ist ideal für Implementierungen innerhalb der programmierbaren Logik. Dazu bietet der Revision-Stack die Fähigkeit zum Arbeiten mit der INT8-Zahlendarstellung in der programmierbaren Logik. Die Darstellung in INT8 ermöglicht dem Anwender den Einsatz von dedizierten DSP-Blöcken innerhalb der programmierbaren Logik. Die Architektur dieser DSP-Blöcke ermöglicht die Ausführung von zwei gleichlaufenden INT8 Multiply-Accumulate-Operationen, wenn man dieselben Kernel-Gewichtungen verwendet. Dies ermöglicht nicht nur eine High-Performance-Implementierung, es führt auch zu einer reduzierten Leistungsaufnahme. Die flexible Natur der programmierbaren Logik ermöglicht außerdem die leichte Implementierung von neuen Festpunkt-Zahlensystemen mit weiter reduzierter Präzision.