Main Content

Démarrer avec la classification d’images

Cet exemple montre comment utiliser l’application Deep Network Designer pour créer 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.

Charger les images

Chargez les exemples de données numériques sous la forme d'un datastore d’images. Pour accéder à ces données, ouvrez l’exemple en tant que live script. La fonction imageDatastore étiquète automatiquement les images en fonction des noms de dossiers. Le jeu de données comporte 10 classes et chaque image du jeu de données a une taille de 28 x 28 x 1 pixels.

unzip("DigitsData.zip")

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

classNames = categories(imds.Labels);

Partitionnez les données entre des jeux d’apprentissage, de validation et de test. Utilisez 70 % des images pour l’apprentissage, 15 % pour la validation et 15 % pour les tests. Spécifiez "randomized" pour affecter la proportion spécifiée de fichiers de chaque classe aux nouveaux jeux de données. La fonction splitEachLabel divise le datastore d’images en trois nouveaux datastores.

[imdsTrain,imdsValidation,imdsTest] = splitEachLabel(imds,0.7,0.15,0.15,"randomized");

Définir l’architecture du réseau

Pour créer le réseau, utilisez l’application Deep Network Designer.

deepNetworkDesigner

Pour créer un réseau vierge, arrêtez-vous sur Blank Network et cliquez sur New.

Dans le volet Designer, définissez l’architecture du réseau de neurones à convolution. Faites glisser des couches depuis la Layer Library et connectez-les. Pour trouver rapidement des couches, utilisez la zone de recherche Filter layers dans le volet Layer Library. Pour modifier les propriétés d’une couche, cliquez sur la couche et modifiez les valeurs dans le volet Properties.

Faites glisser ces couches dans l’ordre et connectez-les de manière séquentielle. Tout d’abord, faites glisser une couche imageInputLayer sur le canevas et définissez InputSize à 28,28,1.

Ensuite, faites glisser ces couches sur le canevas et connectez-les dans l’ordre :

  • convolution2dLayer

  • batchNormalizationLayer

  • reluLayer

Connectez ensuite une couche fullyConnectedLayer et définissez OutputSize au nombre de classes présent dans les données, 10 dans cet exemple.

Enfin, ajoutez une couche softmaxLayer.

Pour vérifier que le réseau est prêt pour l’apprentissage, cliquez sur Analyze. Deep Learning Network Analyzer n’indique aucune erreur ni aucun avertissement. Le réseau est donc prêt pour l’apprentissage. Pour exporter le réseau, cliquez sur Export. L’application enregistre le réseau sous la variable net_1.

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. Comme l’objectif est la classification, utilisez la perte d’entropie croisée.

net = trainnet(imdsTrain,net_1,"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.9780

Visualisez certaines des prédictions.

numValidationObservations = numel(imdsValidation.Files);
idx = randi(numValidationObservations,9,1);

figure
tiledlayout("flow")
for i = 1:9
    nexttile
    img = readimage(imdsValidation,idx(i));
    imshow(img)
    title("Predicted Class: " + string(YValidation(idx(i))))
end

Pour poursuivre votre apprentissage du Deep Learning, vous pouvez essayer d’utiliser des réseaux préentraînés et l’apprentissage par transfert. Vous trouverez un exemple dans En savoir plus sur l’apprentissage par transfert.

Voir aussi

|

Sujets associés