Lors de sa sortie en juin, je vous ai présenté le nouveau module AI de la Fondation Raspberry Pi. Vous trouverez ses caractéristiques dans cet article mais ce sont surtout les 13 téra-opérations par seconde (TOPS) du module Hailo-8L qui sont impressionnants. Couplé au port PCIe poussé en GEN 3.0 du Raspberry Pi 5, on obtient un ensemble impressionnant par sa vitesse de traitement d’un flux vidéo. Dans cet article, je vous explique le montage, la configuration et l’utilisation de ce module d’Intelligence artificielle.
Au sommaire :
Module AI HAILO-8L pour le Raspberry Pi 5
Installation
Cet article est basé sur le tutoriel de la Fondation disponible ici en anglais. Matériel utilisé :
- Raspberry Pi 5 8Go
- Ventilateur officiel (très fortement conseillé !)
- Carte M2 HAT + PCIe
- Caméra Raspberry Pi 3 montée sur le Raspberry Pi
- Module Hailo-8L + Pad thermique dessous + Radiateur dessus
- Carte SD Samsung 64Go (Attention une 16Go est trop petite !)
- Alimentation officielle 5v/5A
- Raspberry Pi OS Bookworm Full à jour en date du 5 août 2024
Démarrez avec un Raspberry Pi 5 fraîchement installé avec un OS Bookworm 64 bits et mettez à jour le système avant de commencer.
Mise à jour du bootloader
Vérifiez que votre Raspberry Pi 5 possède la dernière version de firmware
sudo rpi-eeprom-update
Si la date est postérieure au 6 décembre 2023 c’est bon :
Ici c’est ok, le firmware date du 20 avril 2024 mais on voit qu’il y en a un plus récent ! Je vais mettre à jour vers la dernière version.
sudo raspi-config
Allez dans Advanced Options > Bootloader Version > Choisissez Puis validez. Confirmez que vous souhaitez bien démarrer sur le nouveau bootloader au prochain reboot.
Mettez le firmware à jour avec la commande
sudo rpi-eeprom-update -a
Rebootez si vous souhaitez activer le nouveau Bootloader tout de suite.
Installation de la carte M2 HAT+
Je vous ai expliqué dans cet article comment installer la carte avec un disque SSD NVMe. L’installation de la carte avec le module HAilo-8L est absolument identique. Débranchez le Raspberry Pi de l’alimentation et installez la carte HAT.
Passer le bus PCIe en Gen. 3.0
Suivez les instructions ci-dessous pour activer PCIe Gen 3.0. Cette étape est facultative, mais fortement recommandée pour obtenir les meilleures performances avec votre kit AI. Vous trouverez le descriptif en anglais en suivant ce lien.
Modification de la vitesse PCIe via config.txt
La connexion PCIe est certifiée pour les vitesses Gen 2.0 (5 GT/sec), mais vous pouvez forcer les vitesses Gen 3.0 (10 GT/sec). Pour activer les vitesses PCIe Gen 3.0, avec nano ajoutez la ligne suivante ala fin du fichier /boot/firmware/config.txt :
1 |
<span class="py">dtparam</span><span class="p">=</span><span class="s">pciex1_gen=3</span> |
Modification de la vitesse PCIe via raspi-config
Si vous n’êtes pas à l’aise avec nano, faites la modif avec raspi-config :
Choisissez Advanced Options > PCIe Speed > Répondez YES pour autoriser le mode Gen 3 pour PCIe > Finish et redémarrez.
Après cette modif vous pourrez utiliser le module Hailo-8L au mieux de ses possibilités.
Installer les dépendances
Pour utiliser le kit Hailo, il convient d’installer les dépendances :
1 |
<span class="nb">sudo </span>apt <span class="nb">install </span>hailo-all |
Ça représente… un paquet de paquets ! Il y en a pour 870Mo de place occupée en plus. Répondez O pour installer les paquets. Soyez patient(e)
Cette opération va installer les composants logiciels suivants :
- Le firmware Hailo
- Le runtime softwareHailoRT. Voir HailoRT GitHub Repo pour plus d’informations.
- Hailo TAPPAS Core package : Dérivé du dépôt TAPPAS, ce core package inclut des éléments de GStreamer, des fonctions de post-traitement et des outils supplémentaires utilisés par ce dépôt. Il est essentiel pour développer des applications sur le Pi mais ne comprend pas d’applications autonomes. Voir Hailo TAPPAS GitHub pour plus d’informations et de documentation.
- Les démos du logiciel de post-traitement Hailo rpicam-apps. Voir Raspberry Pi Official Examples pour plus d’informations.
Quand c’est fini, rebootez le Raspberry Pi.
Vérification de l’installation
On va s’assurer que la carte Hailo-8L est reconnue et que tout fonctionne correctement. Tapez la commande suivante :
1 |
hailortcli fw-control identify |
Si vous obtenez quelque chose comme ci-dessus, c’est tout bon, vous pouvez aussi vérifier les logs du noyau
dmesg | grep -i hailo
qui doivent donner ces informations :
Il reste à vérifier que la caméra est opérationnelle :
1 |
rpicam-hello <span class="nt">-t</span> 10s |
Cette opération permet de démarrer la caméra et d’afficher une fenêtre de prévisualisation pendant dix secondes.
Une fois que vous avez vérifié que tout est installé correctement, il est temps de lancer quelques démonstrations. En attendant je vais me faire un café… A tout de suite !
Quelques démos
La suite d’applications de caméra rpicam-apps met en œuvre un framework de post-traitement. Cette section contient quelques étapes de post-traitement de démonstration qui mettent en évidence certaines capacités du kit AI.
Les démonstrations suivantes utilisent rpicam-hello, qui affiche par défaut une fenêtre de prévisualisation. Vous pouvez toutefois utiliser d’autres applications rpicam, notamment rpicam-vid et rpicam-still. Vous devrez peut-être ajouter ou modifier certaines options de ligne de commande pour rendre les commandes de la démo compatibles avec les autres applications.
Pour commencer, téléchargez les fichiers JSON de post-traitement nécessaires aux démonstrations. Ces fichiers déterminent les étapes de post-traitement à exécuter et configurent le comportement de chaque étape. Par exemple, vous pouvez activer, désactiver, renforcer ou affaiblir la force du filtrage temporel dans les démonstrations de détection d’objets. Vous pouvez également activer ou désactiver le dessin du masque de sortie dans la démonstration de segmentation.
Pour télécharger l’ensemble des fichiers JSON de post-traitement, clonez le répertoire rpicam-apps. Exécutez la commande suivante pour ne cloner que le commit le plus récent du repo, afin d’économiser de l’espace :
1 |
git clone <span class="nt">--depth</span> 1 https://github.com/raspberrypi/rpicam-apps.git ~/rpicam-apps |
Attention : Les commandes fournies dans les sections suivantes utilisent les fichiers JSON de ce référentiel. Pour faciliter la référence à ces fichiers, cette commande crée le répertoire cloné rpicam-apps dans votre dossier personnel. Si vous modifiez l’emplacement de ce répertoire, vous devez également modifier les commandes de démonstration ci-dessous pour faire référence au nouvel emplacement des fichiers JSON.
Détection d’objet
Cette démo affiche des boîtes autour des objets détectés par un réseau neuronal. Pour désactiver le viseur, utilisez l’option -n. Pour obtenir une sortie purement textuelle décrivant les objets détectés, ajoutez l’option -v 2. Exécutez la commande suivante pour essayer la démo sur votre Raspberry Pi :
1 |
rpicam-hello <span class="nt">-t</span> 0 <span class="nt">--post-process-file</span> ~/rpicam-apps/assets/hailo_yolov6_inference.json <span class="nt">--lores-width</span> 640 <span class="nt">--lores-height</span> 640 |
Là il voit bien les objets et il les entoure mais ce modèle a encore besoin de se perfectionner, il voit de gauche à droite une brosse à dents, une banane (?) et une valise.
La main est bien vue comme une personne et mon étiqueteuse peut passer pour un téléphone (pourquoi pas ?)
La pas de souci c’est bien un clavier
On peut essayer d’autres modèles comme Yolov8
1 |
rpicam-hello <span class="nt">-t</span> 0 <span class="nt">--post-process-file</span> ~/rpicam-apps/assets/hailo_yolov8_inference.json <span class="nt">--lores-width</span> 640 <span class="nt">--lores-height</span> 640 |
Pas mal! bon, pour moi ça va il voit une personne mais surtout il y a un sac posé dans le fond et il l’a bien identifié
100% aussi ici il appelle l’écran une TV mais on peut confondre
enfin sur la montre c’est OK aussi
Essayons Yolov5 spécialisé pour les personnes et les visages
1 |
rpicam-hello <span class="nt">-t</span> 0 <span class="nt">--post-process-file</span> ~/rpicam-apps/assets/hailo_yolov5_personface.json <span class="nt">--lores-width</span> 640 <span class="nt">--lores-height</span> 640 |
Ici le modèle a bien identifié la personne et encadré le visage.
Dernier test avec YoloX
1 |
rpicam-hello <span class="nt">-t</span> 0 <span class="nt">--post-process-file</span> ~/rpicam-apps/assets/hailo_yolox_inference.json <span class="nt">--lores-width</span> 640 <span class="nt">--lores-height</span> 640 |
Celui-ci reconnait la main, le clavier et la souris.
Avec ces démos on voit que le pouvoir de reconnaissance d’un modèle dépend de son entraînement. Il essaye de trouver dans ses connaissance ce qui se rapproche le plus de ce qu’il a en stock… D’où le % indiqué qui donne la confiance dans la détection d’objet.
Segmentation
La segmentation d’images consiste à découper de façon automatique une image en zones de pixels appartenant à une même classe d’objets. La segmentation d’images a de nombreuses applications, notamment en imagerie médicale. Ici la souris est indiquée en vert comme étant un ensemble de pixels. Mais ça marche aussi pour une personne. Bon, je n’ai pas envie d’apparaître en vert 😀
On peut aussi tester la pose qui trace un « squelette » sur un corps humain.
1 |
rpicam-hello <span class="nt">-t</span> 0 <span class="nt">--post-process-file</span> ~/rpicam-apps/assets/hailo_yolov8_pose.json <span class="nt">--lores-width</span> 640 <span class="nt">--lores-height</span> 640 |
Lecture de vidéos
Un autre volet du traitement est la lecture de vidéo en pipeline. L’article de référence en anglais est ici. On va commencer par cloner le dossier d’exemples :
1 |
git clone https://github.com/hailo-ai/hailo-rpi5-examples.git |
puis on va dans le répertoire qui a été téléchargé :
1 |
<span class="pl-c1">cd</span> hailo-rpi5-examples |
Pour exécuter les exemples, vous devez vous assurer que votre environnement est correctement configuré. Pour cela on utilise le fichier pkgconfig hailo-tappas-core pour obtenir les dépendances Hailo.
Vous pouvez tout configurer en utilisant le script suivant. Ce script définira les variables d’environnement nécessaires et activera l’environnement virtuel Hailo (s’il n’existe pas, il le créera).
1 |
<span class="pl-c1">source</span> setup_env.sh |
Assurez-vous d’être dans l’environnement virtuel (c’est indiqué par (venv_hailo_rpi5_examples) qui se trouve devant la ligne de commande et exécutez la commande suivante :
Note : pour sortir de l’environnement virtuel utilisez la commande : deactivate
1 |
pip install -r requirements.txt |
puis
1 |
./download_resources.sh |
Pour pouvoir utiliser des modèles réentrainés, vous devez compiler le post-processus localement. Ce post-processus sera intégré à Hailo TAPPAS dans la prochaine version. Pour compiler le post-processus, exécutez le script suivant :
1 |
./compile_postprocess.sh |
Lorsque c’est fait, vous pouvez lancer la première démo de détection de personnes. Le fichier detection0.mp4 se trouve dans le dossier resources (avec un seul s !) :
python basic_pipelines/detection.py –input resources/detection0.mp4
Dans cette copie de l’écran du RasPi on voit la détection sur les images et l’affichage des frames (images individuelles du film) avec les personnes détectées et le % de fiabilité de la détection. J’ai mis plusieurs vidéos dans le dossier resources et lancé la détection :
On peut voir que même si la foule est dense Hailo s’en sort bien et détecte tout le monde… Regardez comme ça défile dans la fenêtre de texte !
Avec les véhicules et les personnes ça fonctionne également très bien.
Hailo détecte aussi bien les personnes que les véhicules 😛
En circulation chargée on détecte aussi bien les motos que les voitures ou les camions… Par contre vous voyez que la charge et la température CPU augmentent et que le ventilateur PWM est le bienvenu !
On peut aussi afficher la posture (pose) des passants
1 |
python basic_pipelines/pose_estimation.py --input resources/detection0.mp4 |
Quand vous avez terminé n’oubliez pas de sortir de l’environnement virtuel Python !
Ça chauffe !
Oui, ça chauffe ! Déjà le CPU, on voit que l’air qui sort sous la carte (entre les prises USB) est chaud, que la plaque du Raspberry Pi (qui sert aussi à dissiper la chaleur) est chaude également au niveau du connecteur GPIO, mais plus loin aussi. La truc blanc qu’on voit à gauche de la prise USB centrale, c’est la clé USB qui contient les vidéos 😀 (MAX = 68°)
Pour ce qui est du module Hailo, la caméra ne détecte pas la température correctement car il est en métal blanc mais chaud sous le doigt. Je vais donc l’équiper d’un petit dissipateur pour faire descendre un peu sa température.
Conclusion
Avec ce module Hailo-8L, la fondation met l’IA à portée du maker. Certes on n’est pas au niveau de Chat-GPT mais on a déjà accès à du traitement d’image plutôt véloce. Amusez vous bien avec ce module et si vous créez des applis sympa n’hésitez pas à les signaler, je les ajouterai ci-dessous.
Le module est disponible (complet monté avec la carte M2 HAT+ ) chez Kubii pour 79,80€, actuellement (aout 2024) en précommande pour une livraison en septembre. C’est lié à la politique de la Fondation qui produit des lots de matériel et les envoie aux revendeurs, qui ne sont pas responsables des temps d’attente…
Sources
https://code4fukui.github.io/mediapipe-test/
https://github.com/hailo-ai/hailo-rpi5-examples/blob/main/doc/install-raspberry-pi5.md
https://github.com/hailo-ai/hailo-rpi5-examples
https://github.com/hailo-ai/hailo-rpi5-examples/blob/main/doc/install-raspberry-pi5.md#how-to-set-up-raspberry-pi-5-and-hailo-8l
sur https://github.com/hailo-ai/hailo-rpi5-examples/blob/main/doc/install-raspberry-pi5.md#verify-installation
https://www.raspberrypi.com/documentation/accessories/ai-kit.html
https://github.com/hailo-ai/hailo-rpi5-examples/blob/main/doc/basic-pipelines.md#detection-example
Est-ce que ce module est dédié à la vidéo ? Ou bien serait-il possible de lui faire faire autre chose, comme de la reconnaissance vocale sans passer par les GAFA avec ?
Bonjour
pour le moment il est destiné à traiter les flux vidéo
Hailo est en train de porter Whisper sur son module, il devrait y avoir du nouveau au sujet de la reco vocale
c’est une affaire à suivre !
https://community.hailo.ai/t/whisper-support-for-rpi5-hailo8l-kit/488/2
Ping : Module AI HAILO-8L pour le Raspberry Pi 5
Ping : Configurer et utiliser la Caméra Pi AI Raspberry Pi - Framboise 314, le Raspberry Pi à la sauce française....
bonjour ,
pardonnez moi mes lacunes pour ce qui est de la connaissance parfaite des modules rasp , je ne suis qu’un amateur averti mais curieux dans ce domaine ,
est t’il possible d’envisager avec ce module , un apprentissage et une reconnaissance d’objets ou même d’erreurs dans une intégration rasp/klipper afin de détecter les possibles problème d’impression ?
il existe bien obico pour ce genre d’application , mais cela rend une machine dépendant de ce logiciel … et peu évolutif également …
Bonjour
A terme oui mais pour le moment il n existe rien d’autre que ce qui est dispo en exemple.
Il faudra créer des modèles avec un apprentissage sur des centaines (milliers ?) de photos et c est assez complexe…
il va falloir attendre un peu
cdt
francois