La vision par ordinateur est l’un des domaines les plus influents de l’intelligence artificielle, changeant presque tous les aspects de nos vies, au même titre que l’IA générative. De l’analyse d’images médicales aux véhicules autonomes en passant par les systèmes de sécurité, la vision par ordinateur basée sur l’IA est essentielle pour améliorer la sécurité, l’efficacité et les soins de santé grâce à des technologies telles que la détection d’objets, la reconnaissance faciale et la classification d’images.
Mais la vision par ordinateur ne fait pas que des vagues dans des domaines spécialisés; cela fait également partie des applications grand public que nous utilisons quotidiennement. Amélioration de la mise au point de l’appareil photo, édition de photos, reconnaissance de texte en temps réel et numérisation avec l’appareil photo d’un smartphone, permettant aux appareils domestiques intelligents tels que les caméras de sécurité de détecter et d’alerter les utilisateurs en cas de mouvement, d’estimation de pose pour les applications de suivi de la condition physique, d’identification des calories et des aliments pour les applications de suivi de régime, identification des visages pour déverrouiller les téléphones, détection et classification des visages pour organiser les photos par personne dans des albums. Ces applications font désormais partie intégrante des expériences quotidiennes de millions de personnes.
Source : Real Computer Vision par Boris Denisenko sur Moyen
La plupart des ingénieurs en machine learning ne créent pas leurs modèles à partir de zéro pour donner vie à ces fonctionnalités. Au lieu de cela, ils s’appuient sur des modèles open source existants. Bien qu’il s’agisse de l’approche la plus réalisable, étant donné que la création d’un modèle à partir de zéro est d’un coût prohibitif, il reste encore beaucoup de travail à faire avant que le modèle puisse être utilisé dans une application.
Premièrement, le modèle open source peut résoudre un scénario similaire, mais pas exactement celui dont un ingénieur a besoin. Par exemple, un ingénieur ML peut avoir besoin d’une application qui compare différentes boissons, mais le modèle disponible est conçu pour comparer des produits alimentaires. Bien qu’il fonctionne bien avec les aliments, il peut avoir des difficultés lorsqu’il est appliqué aux boissons.
Deuxièmement, les conditions réelles que ces modèles doivent exécuter diffèrent souvent considérablement des environnements pour lesquels ils ont été initialement conçus. Par exemple, un modèle peut comporter des centaines de millions de paramètres, ce qui le rend trop volumineux et trop gourmand en calcul pour être exécuté, disons, sur un smartphone. Tenter d’exécuter un tel modèle sur un appareil doté de ressources de calcul limitées entraîne un ralentissement des performances, une décharge excessive de la batterie ou un échec d’exécution.
S’adapter aux scénarios et aux conditions du monde réel
Cela amène tôt ou tard la plupart des ingénieurs appliquant l’apprentissage automatique pour la vision par ordinateur dans les applications grand public à faire face à la nécessité de :
- Adapter un modèle open source existant pour l’adapter à leur scénario spécifique.
- Optimiser le modèle pour fonctionner avec des capacités limitées.
L’adaptation d’un modèle n’est pas quelque chose que l’on peut faire en toute simplicité. Vous commencez avec un modèle pré-entraîné et vous l’adaptez à votre tâche spécifique. Cela implique de modifier une multitude de paramètres : le nombre de couches, le nombre de neurones dans chaque couche, le taux d’apprentissage, la taille du lot, etc. Le nombre de combinaisons possibles peut être impressionnant, avec potentiellement des millions de configurations différentes à tester. C’est là qu’intervient l’optimisation des hyperparamètres (HPO). HPO contribue à rationaliser ce processus, vous permettant de trouver la meilleure configuration plus rapidement que si vous ajustiez manuellement les paramètres séparément.
Une fois que vous avez adapté le modèle à votre scénario, le prochain défi consiste à le faire fonctionner sur un appareil aux ressources limitées. Par exemple, vous devrez peut-être déployer le modèle sur un smartphone doté de seulement 6 Go de RAM. Dans de tels cas, la compression du modèle devient essentielle pour réduire la taille du modèle et le rendre gérable pour les appareils dotés d’une mémoire et d’une puissance de traitement limitées.
Techniques d’optimisation des hyperparamètres (HPO)
L’optimisation des hyperparamètres consiste à trouver le meilleur ensemble de paramètres pour votre réseau neuronal afin de minimiser les erreurs sur une tâche spécifique. Disons que vous entraînez un modèle à estimer l’âge d’une personne à partir d’une photo. L’erreur dans ce contexte fait référence à l’écart entre l’estimation de l’âge du modèle et l’âge réel de la personne – mesuré, disons, en nombre d’années pendant lesquelles elle est erronée.
Recherche par grille
La recherche par grille est une méthode de force brute qui trouve la combinaison optimale en testant tous les ensembles de paramètres possibles. Vous partez d’un modèle existant et l’adaptez à votre tâche. Ensuite, vous modifiez systématiquement les paramètres, comme le nombre de neurones ou de couches, pour voir comment ces changements affectent l’erreur du modèle. La recherche par grille consiste à tester chaque combinaison de ces paramètres pour trouver celle qui produit l’erreur la plus faible. Le défi est qu’il existe de nombreux paramètres que vous pouvez ajuster, chacun avec un large éventail de valeurs potentielles.
Même si cette méthode garantit la recherche de la meilleure option, elle prend énormément de temps et est souvent peu pratique.
Recherche aléatoire
Une autre approche est la recherche aléatoire, dans laquelle vous échantillonnez au hasard une partie des combinaisons possibles au lieu de tester chaque combinaison. Cette méthode consiste à sélectionner des valeurs aléatoires pour chaque paramètre dans une plage spécifiée et à tester ces combinaisons. Bien que cette méthode soit plus rapide que la recherche par grille, elle ne garantit pas le meilleur résultat. Cependant, il est probable qu’il trouvera une bonne solution, sinon optimale. C’est un compromis entre vitesse et précision.
Par exemple, s’il existe 1 000 combinaisons de paramètres possibles, vous pouvez en échantillonner et tester 100 au hasard, ce qui ne prendrait qu’un dixième du temps par rapport au test de toutes les combinaisons.
HPO utilisant des algorithmes d’optimisation
Les méthodes de réglage des hyperparamètres basées sur l’optimisation utilisent différentes approches mathématiques pour trouver efficacement les meilleurs réglages de paramètres. Par exemple, l’optimisation bayésienne utilise des modèles probabilistes pour guider la recherche, tandis que TetraOpt, un algorithme développé par l’auteur et l’équipe, utilise l’optimisation par train tenseur pour mieux naviguer dans les espaces de grande dimension. Ces méthodes sont plus efficaces que la recherche par grille ou aléatoire car elles visent à minimiser le nombre d’évaluations nécessaires pour trouver les hyperparamètres optimaux, en se concentrant sur les combinaisons les plus prometteuses sans tester toutes les possibilités.
De tels algorithmes d’optimisation permettent de trouver plus rapidement de meilleures solutions, ce qui est particulièrement utile lorsque les évaluations de modèles nécessitent des calculs coûteux. Ils visent à fournir les meilleurs résultats avec le moins d’essais.
Techniques de compression du modèle ML
Une fois qu’un modèle fonctionne en théorie, son exécution dans des conditions réelles constitue le prochain défi. Prenez, par exemple, ResNet pour la reconnaissance faciale, YOLO pour la gestion du trafic et l’analyse sportive, ou VGG pour le transfert de style et la modération de contenu. Bien que puissants, ces modèles sont souvent trop grands pour les appareils aux ressources limitées, tels que les smartphones ou les caméras intelligentes.
Les ingénieurs ML se tournent vers un ensemble de techniques de compression éprouvées pour rendre les modèles plus efficaces pour de tels environnements. Ces méthodes — quantification, élagage, décomposition matricielle et distillation des connaissances — sont essentielles pour réduire la taille et les exigences de calcul des modèles d’IA tout en préservant leurs performances.
Quantification
Source : Maîtrisez l’art de la quantification par Jan Marcel Kezmann sur Moyen
La quantification est l’une des méthodes les plus populaires pour compresser les réseaux de neurones, principalement parce qu’elle nécessite un minimum de calculs supplémentaires par rapport aux autres techniques.
L’idée de base est simple : un réseau de neurones comprend de nombreuses matrices remplies de nombres. Ces nombres peuvent être stockés dans différents formats sur un ordinateur, tels que virgule flottante (par exemple, 32,15) ou nombre entier (par exemple, 4). Différents formats occupent différentes quantités de mémoire. Par exemple, un nombre au format float32 (par exemple, 3.14) occupe 32 bits de mémoire, tandis qu’un nombre au format int8 (par exemple, 42) ne prend que 8 bits.
Si les numéros d’un modèle sont initialement stockés au format float32, ils peuvent être convertis au format int8. Ce changement réduit considérablement l’empreinte mémoire du modèle. Par exemple, un modèle occupant initialement 100 Mo pourrait être compressé à seulement 25 Mo après quantification.
Taille
Comme mentionné précédemment, un réseau neuronal se compose d’un ensemble de matrices remplies de nombres, appelés « poids ». L’élagage est le processus de suppression des poids « sans importance » de ces matrices. En éliminant ces poids inutiles, le comportement du modèle reste largement inchangé, mais les besoins en mémoire et en calcul sont considérablement réduits.
Par exemple, imaginez que l’une des matrices du réseau neuronal ressemble à ceci :
Après la taille, cela pourrait ressembler à ceci :
Les tirets (« – ») indiquent où les éléments ont été supprimés lors de l’élagage. Ce modèle simplifié nécessite moins de ressources informatiques pour fonctionner.
Décomposition matricielle
La décomposition matricielle est une autre méthode de compression efficace qui consiste à décomposer (ou « décomposer ») les grandes matrices d’un réseau neuronal en plusieurs matrices plus petites et plus simples.
Par exemple, disons que l’une des matrices d’un réseau neuronal ressemble à ceci :
La décomposition matricielle nous permet de remplacer cette seule grande matrice par deux plus petites.
Lorsqu’elles sont multipliées entre elles, ces matrices plus petites donnent le même résultat que celui d’origine, garantissant ainsi que le comportement du modèle reste cohérent.
Cela signifie que nous pouvons remplacer la matrice de la première image par les matrices de la seconde.
La matrice d’origine contient 9 paramètres, mais après décomposition, les matrices n’en contiennent ensemble que 6, ce qui entraîne une réduction d’environ 33 %. L’un des principaux avantages de cette méthode est sa capacité à compresser considérablement les modèles d’IA, plusieurs fois dans certains cas.
Il est important de noter que la décomposition matricielle n’est pas toujours parfaitement précise. Parfois, une petite erreur d’approximation est introduite au cours du processus, mais les gains d’efficacité compensent souvent cet inconvénient mineur.
Distillation des connaissances
La distillation des connaissances est une technique permettant de construire un modèle plus petit, connu sous le nom de « modèle de l’étudiant », en transférant des connaissances à partir d’un modèle plus vaste et plus complexe, appelé « modèle de l’enseignant ». L’idée clé est de former le modèle le plus petit aux côtés du modèle plus grand afin que le modèle étudiant apprenne à imiter le comportement du modèle enseignant.
Voici comment cela fonctionne : vous transmettez les mêmes données via le grand réseau neuronal (l’enseignant) et le réseau compressé (l’élève). Les deux modèles produisent des résultats, et le modèle étudiant est formé pour générer des résultats aussi similaires que possible à ceux de l’enseignant. De cette façon, le modèle compressé apprend à fonctionner de la même manière que le modèle plus grand mais avec moins de paramètres.
La distillation peut être facilement combinée avec la quantification, l’élagage et la décomposition matricielle, où le modèle de l’enseignant est la version originale et l’étudiant la version compressée. Ces combinaisons permettent d’affiner la précision du modèle compressé.
En pratique, les ingénieurs combinent souvent ces techniques pour maximiser les performances de leurs modèles lors de leur déploiement dans des scénarios réels.
L’IA évolue selon deux voies parallèles. D’une part, cela alimente des progrès impressionnants dans des domaines tels que les soins de santé, repoussant les limites de ce que nous pensions possible. D’un autre côté, il est tout aussi crucial d’adapter l’IA aux conditions du monde réel, car elle permettra d’introduire des technologies avancées dans la vie quotidienne de millions de personnes, souvent de manière transparente et inaperçue. Cette dualité reflète l’impact de la révolution des smartphones, qui a transformé l’informatique, autrefois perturbatrice et coûteuse, en une technologie accessible et pratique pour tous.
Les techniques d’optimisation abordées dans cet article sont celles que les ingénieurs utilisent pour faire de l’IA une partie tangible de la vie quotidienne. Cette recherche est en cours et de grandes entreprises technologiques (comme Meta, Tesla ou Huawei) et des laboratoires de recherche investissent des ressources importantes pour trouver de nouvelles façons d’optimiser les modèles. Cependant, des techniques HPO et des méthodes de compression bien mises en œuvre aident déjà les ingénieurs du monde entier à intégrer les derniers modèles dans des scénarios et des appareils quotidiens, créant ainsi des produits impressionnants pour des millions de personnes aujourd’hui et faisant avancer l’industrie grâce à leurs découvertes publiées et open source.