Main Content

Créer un réseau simple de classification d’image

Cet exemple montre comment créer et entraîner un réseau de neurones à convolution simple pour la classification Deep Learning. Les réseaux de neurones à convolution sont des outils essentiels pour le Deep Learning et conviennent parfaitement à la reconnaissance d'images.

Cet exemple illustre comment :

  • Charger des images.

  • Définir l’architecture du réseau.

  • Spécifier les options d’apprentissage.

  • Entraîner le réseau.

  • Prédire les étiquettes des nouvelles données et calculer la précision de la classification.

Vous trouverez un exemple illustrant comment créer et entraîner de manière interactive un réseau simple pour la classification d’images dans Créer un réseau simple de classification d’images avec Deep Network Designer.

Charger les données

Décompressez les exemples de données numériques et créez un datastore d’images. La fonction imageDatastore étiquète automatiquement les images en fonction des noms de dossiers.

unzip("DigitsData.zip")

imds = imageDatastore("DigitsData", ...
    'IncludeSubfolders',true, ...
    'LabelSource','foldernames');

Divisez les données en jeux de données d’apprentissage et de validation de sorte que chaque catégorie dans le jeu d’apprentissage contienne 750 images et que le jeu de validation contienne les images restantes pour chaque étiquette. splitEachLabel divise le datastore d’images en deux nouveaux datastores de données pour l’apprentissage et la validation.

numTrainFiles = 750;
[imdsTrain,imdsValidation] = splitEachLabel(imds,numTrainFiles,'randomized');

Définir l’architecture du réseau

Définissez l’architecture du réseau de neurones à convolution. Spécifiez la taille des images dans la couche d’entrée du réseau et le nombre de classes dans la couche entièrement connectée avant la couche de classification. Chaque image est de taille 28 x 28 x 1 pixels et il y a 10 classes.

inputSize = [28 28 1];
numClasses = 10;

layers = [
    imageInputLayer(inputSize)
    convolution2dLayer(5,20)
    batchNormalizationLayer
    reluLayer
    fullyConnectedLayer(numClasses)
    softmaxLayer
    classificationLayer];

Pour plus d’informations sur les couches de Deep Learning, veuillez consulter List of Deep Learning Layers.

Entraîner le réseau

Spécifiez les options d’apprentissage et entraînez le réseau.

Par défaut et selon disponibilité trainNetwork utilise un GPU, sinon il utilise un CPU. L’apprentissage sur un GPU nécessite Parallel Computing Toolbox™ et un dispositif GPU supporté. Pour plus d'information sur les dispositifs supportés, veuillez consulter GPU Computing Requirements (Parallel Computing Toolbox). Vous pouvez également spécifier l’environnement d’exécution en utilisant l’argument 'ExecutionEnvironment' de type nom-valeur dans trainingOptions.

options = trainingOptions('sgdm', ...
    'MaxEpochs',4, ...
    'ValidationData',imdsValidation, ...
    'ValidationFrequency',30, ...
    'Verbose',false, ...
    'Plots','training-progress');

net = trainNetwork(imdsTrain,layers,options);

Figure Training Progress (03-Aug-2023 23:43:54) contains 2 axes objects and another object of type uigridlayout. Axes object 1 with xlabel Iteration, ylabel Loss contains 11 objects of type patch, text, line. Axes object 2 with xlabel Iteration, ylabel Accuracy (%) contains 11 objects of type patch, text, line.

Pour plus d’informations sur les options d’apprentissage, veuillez consulter Set Up Parameters and Train Convolutional Neural Network.

Tester le réseau

Classez les données de validation et calculez la précision de la classification.

YPred = classify(net,imdsValidation);
YValidation = imdsValidation.Labels;
accuracy = mean(YPred == YValidation)
accuracy = 0.9888

Pour poursuivre sur le Deep Learning, vous pouvez essayer d’utiliser un réseau préentraîné pour d’autres tâches. Résolvez de nouveaux problèmes de classification sur vos images avec l’apprentissage par transfert ou l’extraction de caractéristiques. Vous trouverez des exemples dans Start Deep Learning Faster Using Transfer Learning et Train Classifiers Using Features Extracted from Pretrained Networks. Pour en savoir plus sur les réseaux préentraînés, veuillez consulter Pretrained Deep Neural Networks.

Voir aussi

|

Sujets associés