Le défi avec TinyML est d’extraire les performances/efficacité maximales avec l’empreinte la plus faible pour les charges de travail d’IA sur du matériel de classe microcontrôleur. Le pipeline TinyML-CAM, développé par une équipe de chercheurs en apprentissage automatique en Europe, montre ce qu’il est possible de réaliser sur un matériel relativement bas de gamme avec une caméra.
Plus précisément, ils ont réussi à atteindre plus de 80 FPS de reconnaissance d’image sur la carte ESP32-CAM à moins de 10 $ avec le pipeline open-source TinyML-CAM prenant environ 1 Ko de RAM. Cela devrait fonctionner sur d’autres cartes MCU avec une caméra, et la formation ne semble pas complexe puisqu’on nous dit qu’il faut environ 30 minutes pour mettre en œuvre une tâche personnalisée.

Les chercheurs notent que des solutions telles que TensorFlow Lite pour microcontrôleurs et Edge Impulse permettent déjà l’exécution de charges de travail ML, sur des cartes MCU, à l’aide de réseaux de neurones (NN). Cependant, ceux-ci prennent généralement beaucoup de mémoire, entre 50 et 500 Ko de RAM, et prennent 100 à 600 ms pour l’inférence, obligeant les développeurs à sélectionner des NN peu complexes et/ou peu précis.
Les chercheurs ont donc décidé d’utiliser des algorithmes non NN plus efficaces (comme Decision Tree, SVM) en tirant parti de leur alternative de bibliothèques « Eloquent Arduino » pour TFLite for Microcontrollers afin de concevoir le pipeline TinyML-CAM qui fonctionne en quatre étapes :
- Collecte de données via un serveur de caméra (résolution 160 × 120) et MjpegCollector demandant aux utilisateurs un nom de classe et collectant des images pendant une durée donnée jusqu’à ce que l’utilisateur quitte
- Extraction de caractéristiques en quatre étapes :
- Convertir les images collectées de RVB en gris
- Exécutez l’extracteur de caractéristiques Histogram of Oriented Gradients (HOG) pour générer des vecteurs de caractéristiques (utilise des images de résolution inférieure 40 x 30 pour accélérer la tâche)
- Exécutez Pairplot Visualization pour obtenir une compréhension visuelle du caractère informatif des entités extraites
- Exécutez l’algorithme de réduction de dimensionnalité UMAP (Uniform Manifold Approximation and Projection) pour prendre un vecteur de caractéristiques et le comprimer à la longueur 2
- Formation classificateur
- Portage en C++ – Convertissez le composant HOG et le classificateur (Pairplot) en code C++, ou plus exactement un fichier d’en-tête (.h)
Le fichier d’en-tête peut ensuite être ajouté à un Arduino Sketch, le programme compilé et exécuté sur la carte. Vous trouverez le code source, les instructions pour l’installer sur le matériel ESP32 et une vidéo de démonstration sur GitHub.

Pour tester la solution, ils entraînent l’ESP32-CAM à reconnaître un Raspberry Pi Pico, un Arduino Portenta H7 ou un Wio Terminal. Les performances sont excellentes pour ce type de carte, et l’encombrement est vraiment faible, mais les chercheurs notent que les cartes Portenta et Pi ont souvent été mal étiquetées lors de l’analyse Pairplot, et s’attendent à ce que ce problème soit corrigé en améliorant la qualité de l’ensemble de données.
En plus de consulter le code source sur GitHub, vous trouverez également des informations supplémentaires dans un court document de recherche de 4 pages.
Via Hackster.io
-
APKLVSR ESP32 Module CAM pour carte de développement ESP32 USB C ESP32-CAM avec antennes 2,4 G IPEX + module de carte TF OV2640, DC 5 V Dual-Core WiFi Bluetooth, pour Arduino (2 pièces)
-
AYWHP 1 carte de développement ESP32 CAM WiFi Bluetooth ESP32 CAM MB ESP32 Dual-Core avec caméra OV2640 + antennes 2,4 G IPEX, type C, avec emplacement pour carte TF, compatible avec Arduino
