Table of Contents
Introduction : Pourquoi un apprentissage profond pour la classification des images?
La classification des images, qui consiste à attribuer une étiquette à une image à partir d'un ensemble de catégories prédéfinies, est devenue la pierre angulaire de la vision informatique moderne. Du diagnostic médical à la conduite autonome, la classification précise entraîne d'innombrables applications réelles. L'apprentissage profond, en particulier les réseaux neuronaux convolutionnels (RCN), a considérablement amélioré la précision de la classification, dépassant souvent les performances humaines sur les ensembles de données repères.
MATLAB est depuis longtemps un favori parmi les ingénieurs et les scientifiques pour l'informatique numérique et le prototypage. La Boîte à outils Deep Learning étend cette capacité avec des couches pré-construites, des fonctions de formation et une accélération matérielle transparente. Que vous soyez étudiant explorant des réseaux neuronaux ou un professionnel déployant un classificateur en temps réel, la boîte à outils offre un workflow structuré qui couvre la préparation des données, la conception de modèles, la formation, l'évaluation et le déploiement.
Aperçu de la Boîte à outils pour l'apprentissage approfondi
La Deep Learning Toolbox (anciennement la Neural Network Toolbox) fournit un ensemble complet de fonctions et d'applications pour la conception, la formation et la simulation de réseaux neuronaux profonds. Elle supporte une large gamme d'architectures, notamment:
- Réseaux neuronaux convolutionnels (RCN) pour les données d'image et spatiales.
- Réseaux neuronaux récurrents (RNN) et LSTM pour les données de séquence et de série chronologique.
- Réseaux de transformation pour les tâches de traitement et de vision du langage naturel.
- Réseaux d'adversaires génériques (RAG)[ pour la génération d'images.
La boîte à outils s'intègre à l'écosystème plus large de MATLAB, y compris la boîte à outils de traitement d'image, la boîte à outils de vision informatique et la boîte à outils de calcul parallèle, permettant des solutions de bout en bout.
- Modèles pré-formés tels que AlexNet, VGG-16/19, GoogLeNet, ResNet, Inception et EfficientNet, qui peuvent être utilisés pour transférer l'apprentissage ou l'extraction de fonctionnalités.
- Augmentation des données[ par l'intermédiaire de l'objet , permettant des transformations sur le vol comme la rotation, l'échelle, la traduction et la réflexion pour agrandir artificiellement les ensembles d'entraînement et réduire le surajustement.
- Différenciation automatique et prise en charge GPU en utilisant Parallel Computing Toolbox et MATLAB=s intégrés pour une formation plus rapide.
- Outils de visualisation[ comme et pour inspecter les architectures de couches, les cartes d'activation et les progrès de la formation.
- options de déploiement[ incluant la génération de code, l'exportation vers TensorFlow ou ONNX, et l'intégration directe avec le matériel embarqué via MATLAB Coder.
Comprendre les réseaux neuronaux convolutionnels pour la classification des images
Ces réseaux apprennent les caractéristiques hiérarchiques : les premières couches détectent les bords et les textures, les couches moyennes reconnaissent les formes et les parties et les couches plus profondes identifient les objets. MATLAB=S Deep Learning Toolbox implémente tous les types de couches standard – convolution2dLayer, maxPooling2dLayer, FulllyConnectedLayer, softmaxLayer et classificationLayer – ce qui rend simple l'assemblage d'architectures personnalisées. La boîte à outils supporte également les innovations modernes comme la normalisation par lots, l'abandon et les connexions résiduelles.
Pourquoi utiliser MATLAB pour la conception de CNN?
Par rapport aux cadres comme TensorFlow ou PyTorch, MATLAB offre plusieurs avantages uniques :
- Environnement interactif[: L'application permet la construction de réseaux de glisser-déposer, ce qui est idéal pour les débutants ou le prototypage rapide.
- Débogage intégré[: Vous pouvez passer par la formation des itérations et inspecter les activations à n'importe quel niveau, simplifier le diagnostic du modèle.
- Efficacité de la mémoire[: MATLAB gère automatiquement la mémoire GPU, évitant les erreurs courantes hors mémoire qui abîment le codage manuel.
- Suivis métriques encastrés[: La formation enregistre automatiquement les mesures de précision, de perte et de validation, qui peuvent être tracées en temps réel.
Préparation des données : La fondation d'un classificateur réussi
Peu importe la complexité du modèle, les mauvaises données conduisent à de mauvaises performances. MATLAB fournit plusieurs utilitaires pour gérer efficacement les ensembles de données d'image.
Utilisation
La fonction est la méthode standard pour charger de grandes collections d'images. Elle étiquette automatiquement les images basées sur les noms de dossiers, prend en charge la division en ensembles de formation, validation et test, et peut lire des images du disque en lots pour éviter le débordement de mémoire. Par exemple:
imds = imageDatastore('path/to/images', 'IncludeSubfolders', true, 'LabelSource', 'foldernames');
[imdsTrain, imdsValidation, imdsTest] = splitEachLabel(imds, 0.7, 0.15, 'randomized');
Augmentation des données avec
Pour améliorer la généralisation, en particulier avec des données limitées, vous pouvez appliquer des transformations aléatoires pendant l'entraînement. MATLAB , supporte:
- Rotation aléatoire (0-360 degrés)
- Réflexions horizontales/verticales aléatoires
- Échelle aléatoire et traduction
- Ajustements de la hauteur et du contraste
Ces transformations sont appliquées à la volée, ce qui signifie que le modèle voit une image légèrement différente à chaque époque sans stocker de multiples copies sur disque. Cela réduit considérablement le surajustement et améliore la robustesse.
Manipulation des ensembles de données asymétriques
Les ensembles de données du monde réel ont souvent des distributions de classes inégales. MATLAB offre des couches de classification pondérées () et peut calculer les poids de classes automatiquement à partir des fréquences des ensembles de formation.
Transfert d'apprentissage : Accélérer le développement avec des modèles pré-qualifiés
La formation d'un CNN profond à partir de zéro sur un petit ensemble de données est rarement pratique. Le transfert d'apprentissage fait appel à un modèle pré-formé sur un grand ensemble de données (par exemple ImageNet) et le met au point pour une nouvelle tâche. MATLAB rend ce processus exceptionnellement simple.
Chargement d'un réseau pré-formé
Utilisez ou , , etc. Ces fonctions téléchargent automatiquement le modèle si ce n'est déjà présent sur le disque. Les réseaux sont retournés sous forme d'objet ou , préservant les poids et la structure des couches.
Modifier le réseau pour une tâche personnalisée
Les couches finales d'un réseau pré-formé sont conçues pour la classification de 1000 classes ImageNet. Pour l'adapter à votre nombre de classes (par exemple, 5), vous remplacez la couche entièrement connectée et la couche de classification:
lgraph = layerGraph(net);
newLayers = [
fullyConnectedLayer(numClasses, 'Name', 'fc_new', 'WeightLearnRateFactor', 10, 'BiasLearnRateFactor', 10)
softmaxLayer('Name', 'softmax_new')
classificationLayer('Name', 'classoutput_new')
];
lgraph = replaceLayer(lgraph, 'fc1000', newLayers(1));
lgraph = replaceLayer(lgraph, 'fc1000_softmax', newLayers(2));
lgraph = replaceLayer(lgraph, 'ClassificationLayer_fc1000', newLayers(3));
Extraction de la qualité et de la fonctionnalité
Deux stratégies communes:
- Extraction de caractéristiques[: Geler les couches précoces (fixer leur taux d'apprentissage à 0) et former uniquement les nouvelles couches de classification. Utile lorsque le nouvel ensemble de données est petit et similaire à l'ensemble de données original.
- Talonnage final[: Former toutes les couches avec un faible taux d'apprentissage. Mieux lorsque le nouvel ensemble de données est plus grand ou significativement différent d'ImageNet. MATLAB vous permet de définir des facteurs de taux d'apprentissage par couche (comme indiqué ci-dessus) pour contrôler la quantité d'adaptation de chaque couche.
Conseils pratiques pour l'apprentissage du transfert dans le MATLAB
- Redimensionner toujours les images en fonction de la taille d'entrée prévue par le réseau pré-entraînement (p. ex. 224x224 pour ResNet). Utilisez le pour une redimensionnement efficace pendant la formation.
- Utiliser les données de validation pour surveiller les surajustements; si la précision de validation se situe tôt, réduire le nombre d'époques d'entraînement.
- Expérimentez avec différentes architectures pré-formées. Les modèles plus légers comme MobileNet sont plus rapides mais moins précis; les modèles plus profonds comme ResNet-152 offrent une plus grande précision à un coût de calcul.
Formation du classificateur : Options, Hyperparamètres et Surveillance
Une fois le réseau défini et les données préparées, vous appelez avec le datastore, le graphique de calque et les options de formation.
Configuration des options de formation
La fonction vous permet de contrôler pratiquement tous les aspects de la formation :
- Solver: 'sgdm' (coulissement stochastique avec élan), 'adam' ou 'rmsprop'. Adam converge souvent plus vite pour un réglage fin.
- : Typiquement 1e-4 pour le réglage fin, 1e-3 pour l'entraînement à partir de zéro.
- MiniBatchSize: Dépend de la mémoire GPU; les valeurs communes sont 32, 64 ou 128.
- MaxEpochs: Nombre de passages complets à travers les données de formation. Commencez par 10-20 pour le réglage fin.
- ValidationData: Fournir un datastore de validation pour surveiller les performances de chaque époque.
- Fréquence de validation: Combien d'itérations entre les vérifications de validation.
- Plots: 'progressing-progress' pour voir des parcelles vivantes de précision et de perte.
- ApprendreRateÉchéancier[: Baissez le taux d'apprentissage après un certain nombre d'époques (p. ex., «par pièce»).
- L2Regularisation: Décroissance du poids pour éviter une suradaptation (par défaut 1e-4).
Suivi des progrès de la formation
Si la précision de la validation cesse d'améliorer pendant que la précision de la formation continue, le modèle est sur-adapté : il faut ajouter l'abandon, réduire la taille du réseau ou utiliser une augmentation plus forte. La boîte à outils enregistre également les informations sur la formation dans une structure qui peut être analysée plus tard.
Arrêt précoce et contrôle
Bien que non intégré directement, vous pouvez mettre en œuvre l'arrêt précoce en utilisant la propriété des options de formation. Sinon, utilisez l'option pour enregistrer des réseaux intermédiaires chaque nombre fixe d'époques, en vous assurant de ne pas perdre de progrès.
Évaluation du rendement du modèle
Après la formation, vous devez vérifier que le modèle généralise bien aux données invisibles. MATLAB fournit plusieurs outils d'évaluation.
Classification des images d'essai
YPred = classify(net, imdsTest);
YTest = imdsTest.Labels;
accuracy = sum(YPred == YTest) / numel(YTest);
Matrice de confusion et métriques par classe
Utilisez pour visualiser où le modèle fait des erreurs. Pour la précision par classe, le rappel et le score F1, utilisez:
confMat = confusionmat(YTest, YPred);
Ensuite, calculez manuellement les paramètres ou utilisez la sortie avec l'option pour obtenir des scores de prédiction pour l'analyse ROC.
ROC et ASC
Pour la classification binaire ou les scénarios un-vers-tous, vous pouvez tracer les courbes caractéristiques de fonctionnement du récepteur (ROC) en utilisant .
Déploiement : Prendre le modèle à la production
La force de MATLAB s'étend au-delà du prototypage, il offre plusieurs voies pour déployer des modèles formés dans des applications réelles.
Exportation vers d'autres cadres
- TeneurFlow/Keras: Utilisez pour exporter au format ONNX, puis convertissez-le en TensorFlow.
- PyTorch: Chemin d'exportation ONNX similaire.
Codeur MATLAB et codeur GPU
Générez le code C/C++ autonome de votre réseau formé en utilisant le codeur MATLAB. Il est idéal pour intégrer des classificateurs dans des systèmes de bureau ou intégrés sans nécessiter un runtime MATLAB. GPU Coder génère le code CUDA pour les GPU NVIDIA, permettant une inférence en temps réel au bord.
MATLAB Compiler et serveur de production
Packagez le classificateur comme un exécutable autonome ou une bibliothèque partagée. MATLAB Production Server vous permet de déployer des modèles comme des API RESTful qui peuvent être consommés par des applications web, des applications mobiles ou des logiciels d'entreprise.
Déployer vers le matériel embarqué
Avec le support de Deep Learning Toolbox pour ARM Cortex-A et NVIDIA Jetson, vous pouvez déployer des réseaux optimisés directement sur des systèmes embarqués. La fonction peut générer du code optimisé pour le matériel qui s'intègre dans des environnements restreints par les ressources.
Applications et études de cas dans le monde réel
Les ingénieurs et les chercheurs ont utilisé MATLAB , Boîte à outils d'apprentissage profond pour la classification des images dans de nombreux domaines :
- Imagerie médicale: Classer les rayons X pulmonaires pour la détection de pneumonie, les images de fond rétinien pour le classement de la rétinopathie diabétique et les diapositives d'histopathologie pour le diagnostic du cancer.
- Conduite autonome[: Reconnaissance des signaux de circulation, des piétons et des marques de voie au moyen de réseaux mobiles déployés sur des systèmes embarqués de véhicules.
- Agriculture: Identifier les maladies végétales à partir des images de feuilles, trier les fruits par maturité.
- Fabrication: Inspection visuelle des défauts sur les lignes de montage, souvent avec inférence en temps réel avec le codeur GPU.
- Sécurité: Reconnaissance faciale et détection d'objets dans les images de surveillance.
Pour des exemples concrets, voir MATLAB=s tutoriel officiel d'apprentissage de transfert et cet article sur l'apprentissage profond en imagerie médicale.
Comparaison du MATLAB avec d'autres cadres d'apprentissage approfondi
Bien que MATLAB ne soit pas open-source, sa chaîne d'outils offre une intégration inégalée aux ingénieurs qui travaillent déjà dans l'écosystème MATLAB. Pour les équipes qui nécessitent des solutions libres, TensorFlow ou PyTorch pourrait être préféré.
- Soixante d'utilisation: Pas besoin de gérer les environnements Python, les conflits de versions ou l'enfer de dépendance.
- Intégration de Simulink[: Pour la modélisation au niveau du système, vous pouvez intégrer des blocs d'apprentissage profond dans des simulations plus grandes.
- Traitement du signal et de l'image [ : Les étapes de prétraitement peuvent être écrites dans la même langue sans importer de bibliothèques supplémentaires.
Pour les projets où la collaboration avec des utilisateurs non-MATLAB est essentielle, l'exportation vers ONNX assure l'interopérabilité. En savoir plus sur l'exportation d'ONNX ici.
Pièges courants et comment les éviter
- Input size discord[: Vérifiez toujours que le calque d'entrée correspond à la taille de vos images. Utilisez pour redimensionner.
- Sur-ajustement : Augmenter l'augmentation, ajouter des couches d'abandon, réduire la capacité du réseau ou utiliser une régularisation plus forte.
- Formation lente: Assurez-vous que vous avez un GPU compatible et que MATLAB l'utilise (vérifiez avec ). Activez les travailleurs parallèles si vous avez plusieurs GPU.
- Erreurs de mémoire: Réduire la taille de mini-lot ou utiliser des tableaux pour les ensembles de données hors mémoire.
- Ignorer le déséquilibre de classe: Vérifiez toujours la distribution des étiquettes; utilisez une perte pondérée ou un suréchantillonnage.
Sujets avancés : Boucles de formation personnalisée et recherche
Pour les chercheurs qui font des recherches de pointe, MATLAB prend en charge les boucles de formation personnalisées en utilisant des objets et la différenciation automatique. Vous pouvez mettre en œuvre de nouvelles couches, des fonctions de perte ou des procédures de formation (p. ex. méta-apprentissage, formation contradictoire).
Conclusion
De l'apprentissage direct aux architectures personnalisées, la boîte à outils simplifie chaque étape tout en maintenant la flexibilité nécessaire pour les applications avancées. Son intégration avec l'écosystème plus large de MATLAB, combiné à de multiples options de déploiement, en fait un excellent choix pour la recherche académique et le déploiement industriel. En suivant le flux de travail structuré décrit dans cet article, vous pouvez exploiter tout le potentiel d'apprentissage profond pour vos projets de classification d'images.