[PYTHON] Pourquoi detectMultiScale () est lent sur Raspberry Pi B +

Lorsque le détecteur de personne est utilisé avec la combinaison OpenCV + Python, La vitesse de traitement est beaucoup plus lente que prévu à partir de la vitesse d'horloge Je l'ai ressenti avec Raspberry Pi B +. Notez la raison.

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

Une méthode appelée detectMultiScale () est utilisée par plusieurs threads sur les processeurs multicœurs d'Intel. En conséquence, le Raspberry Pi B + monocœur d'ARM ne fonctionne pas avec plusieurs threads.

Si vous regardez la description de hog.cpp dans le module actuel, vous pouvez voir que le traitement de détection est effectué en parallèle pour chaque taille d'image comme indiqué ci-dessous. 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)); //後略 }

En fait, dans le Gestionnaire des tâches de Windows, les performances En regardant l'état de fonctionnement de chaque cœur Au moment de detectMultiScale (), vous pouvez voir que plusieurs cœurs fonctionnent. D'un autre côté, detect () ne fait pas cela.

C'est la même chose pour C ++ et Python.

Parce qu'il est implémenté à l'aide de blocs de construction Intel Threading (TBB) Dans le quad core de RaspberryPi2, sauf si vous avez une autre implémentation multithread Il semble que les avantages du quad core ne seront pas appréciés.

Post-scriptum: cv::parallel_for_ Veuillez vous référer au matériel de référence ajouté pour savoir comment l'utiliser. cv::parallel_for_ Semble gérer les threads dans un autre cadre dans des environnements où Intel TBB n'est pas disponible. Dans TBB, on dit que la création et l'arrêt des threads ne sont pas explicitement décrits.

Post-scriptum: Dans Traitement parallèle par OpenCV TBB Il décrit comment installer TBB et les modifications pendant CMake d'OpenCV.

Threading Building Blocks Il est indispensable à CMake après avoir obtenu.

Mémorandum OpenCV J'ai construit OpenCV 2.4.11 avec Raspberry Pi 2 [Construire OpenCV 2.4.10 sur Raspberry Pi 2] (http://iwaki2009.blogspot.jp/2015/02/raspberry-pi-2-opencv-2410.html) Selon Raspberry Pi 2, vous pouvez installer TBB à partir de la source. Le dernier article décrit les paramètres de CMake.

** Les références ** "Parallélisation et accélération du traitement par TBB" http://opencv.jp/opencv2-x-tips/opencv_performance_with_tbb

"Essayez d'utiliser 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

Pourquoi detectMultiScale () est lent sur Raspberry Pi B +
Démarrage USB sur Raspberry Pi 4 modèle B
Construire un environnement OpenCV-Python sur Raspberry Pi B +
pigpio sur Raspberry pi
Introduction de Ceph avec Kubernetes sur Raspberry Pi 4B (ARM64)
Cython sur Raspberry Pi
raspberry pi 1 modèle b, python
Introduction de pyenv sur Raspberry Pi
Utilisez NeoPixel avec la tarte aux framboises
Installez OpenCV4 sur Raspberry Pi 3
Installez TensorFlow 1.15.0 sur Raspberry Pi
[Remarque] Installation de vmware ESXi sur Arm Fling sur Raspeye 4B
Portez FreeRTOS vers Raspberry Pi 4B
Test de la communication UART avec Raspberry Pi
Raspberry pi 1 modèle b, partie rouge noeud 17
MQTT sur Raspberry Pi et Mac
raspberry pi 4 centos7 installer sur docker
Installez ghoto2 sur Raspberry Pi (Remarque)
Essayez d'utiliser ArUco avec Raspberry Pi
Procédure d'installation d'OpenCV sur Raspberry Pi
Allumer / éteindre le Raspberry pi avec Arduino
Détecter l'état du commutateur avec Raspberry Pi 3
Installez OpenMedia Vault 5 sur Raspberry Pi 4
L Chika avec Raspberry Pi C #
Construisez wxPython sur Ubuntu 20.04 sur Raspberry Pi 4
Notification téléphonique lorsque le mouvement de la caméra de surveillance est détecté sur Raspberry Pi
Raspberry Pi "Lampe de notification Honwaka" Partie 2
Détectez la "luminosité" en utilisant python sur Raspberry Pi 3!
Raspberry Pi "Lampe de notification Honwaka" Partie 1
Activer la communication série UART + avec Raspberry Pi
Adafruit Python BluefruitLE fonctionne sur Raspeye.
Accélérez l'apprentissage en profondeur avec le processeur Rasperry Pi 4
Définir l'espace d'échange sur Ubuntu sur Raspberry Pi
Programmation normale avec la programmation Node-RED avec Raspberry Pi 3
Utiliser le capteur Grove avec Raspberry Pi
Installez la version 64 bits du système d'exploitation (bate) sur Raspberry Pi
Lorsque ssh de Raspeye 4 est très lent, il est bon de désactiver IPv6
Installez docker-compose sur le système d'exploitation Raspberry Pi 64 bits
Exécutez un servomoteur en utilisant python sur Raspberry Pi 3
Raspberry Pi "Lampe de notification Honwaka" Partie 3
Travailler avec des capteurs dans Mathematica sur Raspberry Pi
Détectez la température à l'aide de python sur Raspberry Pi 3!
Multiplication matricielle sur GPU Raspberry Pi (partie 2)
Comment installer NumPy sur Raspeye
Travailler avec le GPS en Python pour Raspberry Pi 3
J'ai essayé d'exécuter Flask sur Raspberry Pi 3 Model B + en utilisant Nginx et uWSGI
Détectez les interrupteurs à glissière à l'aide de python sur Raspberry Pi 3!
Construire un environnement Django sur Raspai (MySQL)
Essayez d'utiliser le code QR avec Raspberry Pi
Détectez les commutateurs magnétiques à l'aide de python sur Raspberry Pi 3!
Profitez du travail électronique avec GPIO de Raspberry Pi
Allumez / éteignez votre PC avec Raspberry Pi
Grove - Capteur de température et d'humidité (DHT11) avec Raspberry Pi
Rendre DHT11 disponible avec Raspeye + python (Remarque)
Démarrage de la compilation croisée pour Raspberry Pi Zero sur Ubuntu
Sonnez le buzzer en utilisant python sur Raspberry Pi 3!
Afficher la température du processeur toutes les 5 secondes sur Raspberry Pi 4