Convolutional Neural Networks sind inzwischen ein fester Bestandteil des modernen algorithmischen Werkzeugkastens im Bereich der maschinellen Bildverarbeitung. Diese Netzwerke auf Embedded-Geräten zu bringen, stellt jedoch eine Herausforderung dar. Auf Arm®-Prozessoren existiert die von Arm bereitgestellte und optimierte Bibliothek Common Microcontroller Software Interface Standard (CMSIS). Sie nutzt zum Beispiel für quantisierte Netzwerke auf ARMv7-M-CPUs mit DSP-Erweiterung spezielle Instruktionen, um dieselbe Berechnung auf mehreren Daten gleichzeitig durchzuführen, sog. Single Instruction Multiple Data (SIMD).
Die Flaschenhälse in einem Convolutional Neural Network sind am häufigsten die Convolutional Layer selbst. Dies war auch der Fall bei einem unserer Kunden. Wir optimierten den Convolutional Layer von CMSIS für den exakten Anwendungsfall unseres Kundens und führten weitere Mikroarchitektur-Optimierungen für den verwendeten Cortex®-M4-Prozessor durch. Dadurch war es uns möglich die Convolutional Layer in der Kundenanwendung um den Faktor 3 zu beschleunigen.
Ein paar schnelle Fakten
Hardware:
- CPU: Arm Cortex-M4
Betriebssystem:
- Keines (Bare Bone)
Compiler:
- GNU Compiler Collection
Zusammenfassung der von uns erzielten Ergebnisse:
- Beschleunigung von Convolutional Layers in CMSIS 5 um den Faktor 3.