[PYTHON] Warum DetectMultiScale () auf Raspberry Pi B + langsam ist

Wenn der Personendetektor mit der Kombination von OpenCV + Python betrieben wird, Die Verarbeitungsgeschwindigkeit ist viel langsamer als von der Taktrate erwartet Ich habe es mit Raspberry Pi B + gespürt. Notieren Sie sich den Grund.

hog=cv2.HOGDescriptor() hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector()) hogParams = {'winStride': (8, 8), 'padding': (32, 32), 'scale': 1.05} human, r = hog.detectMultiScale(im, **hogParams)

Eine Methode namens detectMultiScale () wird von mehreren Threads auf Intels Multi-Core-CPUs verwendet. Daher funktioniert der Single-Core-Raspberry Pi B + von ARM nicht mit mehreren Threads.

Wenn Sie sich die Beschreibung von hog.cpp im eigentlichen Modul ansehen, können Sie sehen, dass die Erkennungsverarbeitung für jede Bildgröße parallel ausgeführt wird, wie unten gezeigt. void HOGDescriptor::detectMultiScale( const Mat& img, vector& foundLocations, vector& foundWeights, double hitThreshold, Size winStride, Size padding, double scale0, double finalThreshold, bool useMeanshiftGrouping) const { //中略 parallel_for_(Range(0, (int)levelScale.size()), HOGInvoker(this, img, hitThreshold, winStride, padding, &levelScale[0], &allCandidates, &mtx, &tempWeights, &tempScales)); //後略 }

In der Tat im Windows Task-Manager Leistung Betrachten Sie den Betriebsstatus jedes Kerns in Zum Zeitpunkt von detectMultiScale () können Sie sehen, dass mehrere Kerne funktionieren. Auf der anderen Seite macht detect () das nicht.

Dies gilt auch für C ++ und Python.

Weil es mit Intel Threading Building Blocks (TBB) implementiert wird Im Quad-Core von RaspberryPi2, es sei denn, Sie haben eine andere Multithread-Implementierung Es scheint, dass die Vorteile von Quad Core nicht genossen werden.

Nachtrag: cv::parallel_for_ Informationen zur Verwendung finden Sie im hinzugefügten Referenzmaterial. cv::parallel_for_ Scheint Threads in einem anderen Framework in Umgebungen zu verwalten, in denen Intel TBB nicht verfügbar ist. In TBB wird gesagt, dass das Erstellen und Beenden von Threads nicht explizit beschrieben wird.

Nachtrag: Parallele Verarbeitung durch OpenCV TBB Es wird beschrieben, wie TBB und Änderungen während CMake von OpenCV installiert werden.

Threading Building Blocks Es ist unverzichtbar, CMake nach dem Erhalten.

OpenCV-Memorandum Ich habe OpenCV 2.4.11 mit Raspberry Pi 2 erstellt [Erstellen von OpenCV 2.4.10 auf Raspberry Pi 2] (http://iwaki2009.blogspot.jp/2015/02/raspberry-pi-2-opencv-2410.html) Laut Raspberry Pi 2 können Sie TBB von der Quelle installieren. Der letztere Artikel beschreibt die CMake-Einstellungen.

** Verweise ** "Parallelisierung und Beschleunigung der Verarbeitung durch TBB" http://opencv.jp/opencv2-x-tips/opencv_performance_with_tbb

"Versuchen Sie es mit cv :: parallel_for_" https://github.com/atinfinity/lab/wiki/cv :: parallel_for_% E3% 82% 92% E4% BD% BF% E3% 81% A3% E3% 81% A6% E3% 81% BF% E3% 82% 8B

Recommended Posts

Warum DetectMultiScale () auf Raspberry Pi B + langsam ist
USB-Boot auf Raspberry Pi 4 Model B.
Erstellen Sie eine OpenCV-Python-Umgebung auf Raspberry Pi B +
Pigpio auf Himbeer-Pi
Einführung von Ceph mit Kubernetes auf Raspberry Pi 4B (ARM64)
Cython auf Raspberry Pi
Himbeere pi 1 Modell b, Python
Pyenv auf Raspberry Pi eingeführt
Verwenden Sie NeoPixel mit Himbeerkuchen
Installieren Sie OpenCV4 auf Raspberry Pi 3
Installieren Sie TensorFlow 1.15.0 auf Raspberry Pi
[Hinweis] Installieren von VMware ESXi auf Arm Fling auf Raspeye 4B
Port FreeRTOS auf Raspberry Pi 4B
Testen der Kommunikation mit Raspberry Pi
Himbeer pi 1 Modell b, knotenroter Teil 17
MQTT auf Raspberry Pi und Mac
Himbeer Pi 4 Centos7 auf Docker installieren
Installieren Sie ghoto2 auf Raspberry Pi (Hinweis)
Versuchen Sie es mit ArUco mit Raspberry Pi
OpenCV-Installationsverfahren auf Raspberry Pi
Ein- / Ausschalten von Raspberry Pi mit Arduino
Erkennen Sie den Schalterstatus mit Raspberry Pi 3
Installieren Sie OpenMedia Vault 5 auf Raspberry Pi 4
L Chika mit Himbeer-Pi C #
Erstellen Sie wxPython unter Ubuntu 20.04 auf Himbeer-Pi 4
Telefonische Benachrichtigung, wenn eine Bewegung der Überwachungskamera auf dem Raspberry Pi erkannt wird
Raspberry Pi "Honwaka Benachrichtigungslampe" Teil 2
Erkennen Sie "Helligkeit" mit Python auf Raspberry Pi 3!
Raspberry Pi "Honwaka Benachrichtigungslampe" Teil 1
Aktivieren Sie die serielle UART + -Kommunikation mit Raspberry Pi
Adafruit Python BluefruitLE arbeitet mit Raspeye.
Beschleunigen Sie Deep Learning mit der Rasperry Pi 4-CPU
Stellen Sie den Swap Space unter Ubuntu auf Raspberry Pi ein
Normal programmieren mit Node-RED-Programmierung mit Raspberry Pi 3
Verwenden Sie den Grove-Sensor mit Raspberry Pi
Installieren Sie das 64-Bit-Betriebssystem (Bate) auf Raspberry Pi
Deaktivieren Sie IPv6, wenn ssh von Raspeye 4 sehr langsam ist
Installieren Sie Docker-Compose unter 64-Bit-Raspberry-Pi-Betriebssystem
Lassen Sie einen Servomotor mit Python auf Raspberry Pi 3 laufen
Raspberry Pi "Honwaka Benachrichtigungslampe" Teil 3
Arbeiten mit Sensoren in Mathematica auf Raspberry Pi
Ermitteln Sie die Temperatur mit Python auf Raspberry Pi 3!
Matrixmultiplikation auf Raspberry Pi GPU (Teil 2)
So installieren Sie NumPy auf Raspeye
Arbeiten mit GPS in Python für Raspberry Pi 3
Ich habe versucht, Flask auf Raspberry Pi 3 Model B + mit Nginx und uWSGI auszuführen
Erkennen Sie Schiebeschalter mit Python auf Raspberry Pi 3!
Erstellen Sie eine Django-Umgebung auf Raspai (MySQL)
Versuchen Sie, QR-Code mit Raspberry Pi zu verwenden
Erkennen Sie Magnetschalter mit Python auf Raspberry Pi 3!
Genießen Sie die elektronische Arbeit mit GPIO von Raspberry Pi
Schalten Sie Ihren PC mit Himbeer-Pi ein / aus
Grove - Temperatur- und Feuchtigkeitssensor (DHT11) mit Raspberry Pi
Stellen Sie DHT11 mit Raspeye + Python zur Verfügung (Hinweis)
Cross-Compilierung für Raspberry Pi Zero unter Ubuntu gestartet
Lassen Sie den Summer mit Python auf Raspberry Pi 3 erklingen!
Zeigen Sie die CPU-Temperatur alle 5 Sekunden auf dem Raspberry Pi 4 an