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 Démarrer avec la classification d’images.

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");

Affichez les noms des classes.

classNames = categories(imdsTrain.Labels)
classNames = 10x1 cell
    {'0'}
    {'1'}
    {'2'}
    {'3'}
    {'4'}
    {'5'}
    {'6'}
    {'7'}
    {'8'}
    {'9'}

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. 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];

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

Spécifier les options d’apprentissage

Spécifiez les options d’apprentissage. Le choix des options nécessite une analyse empirique. Pour explorer différentes configurations dans les options d’apprentissage au cours de vos expérimentations, vous pouvez utiliser l’application Experiment Manager.

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

Entraîner le réseau de neurones

Entraînez le réseau de neurones avec la fonction trainnet. Pour la classification, utilisez la perte d’entropie croisée. Par défaut et selon disponibilité, la fonction trainnet utilise un GPU. L’utilisation d’un GPU nécessite une licence 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). Sinon, la fonction utilise le CPU. Pour spécifier l’environnement d’exécution, utilisez l’option d’apprentissage ExecutionEnvironment.

net = trainnet(imdsTrain,layers,"crossentropy",options);

Tester le réseau de neurones

Pour tester le réseau de neurones, classez les données de validation et calculez la précision de la classification.

Réalisez des prédictions avec la fonction minibatchpredict et convertissez les scores en étiquettes avec la fonction scores2label. Par défaut et selon disponibilité, la fonction minibatchpredict utilise un GPU.

scores = minibatchpredict(net,imdsValidation);
YValidation = scores2label(scores,classNames);

Calculez la précision de la classification. La précision est le pourcentage d’étiquettes correctement prédites.

TValidation = imdsValidation.Labels;
accuracy = mean(YValidation == TValidation)
accuracy = 0.9896

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