Main Content

La traduction de cette page n'est pas à jour. Cliquez ici pour voir la dernière version en anglais.

Introduction au Deep Network Designer

Cet exemple montre comment utiliser Deep Network Designer pour adapter un réseau GoogLeNet préentraîné dans le but de classer une nouvelle collection d’images. Ce processus, nommé apprentissage par transfert, est généralement beaucoup plus rapide et facile que l’apprentissage d’un nouveau réseau car vous pouvez utiliser les caractéristiques apprises pour une nouvelle tâche avec un nombre réduit d’images d’apprentissage. Utilisez Deep Network Designer pour préparer de manière interactive un réseau pour l’apprentissage par transfert.

Extraire les données pour l’apprentissage

Dans l’espace de travail, décompressez les données.

unzip('MerchData.zip');

Sélectionner un réseau préentraîné

Ouvrez Deep Network Designer.

deepNetworkDesigner

Chargez un réseau GoogLeNet préentraîné en le sélectionnant depuis la page d’accueil de Deep Network Designer. Si vous devez télécharger le réseau, cliquez sur Install pour ouvrir l'Add-On Explorer.

Deep Network Designer affiche une vue dézoomée de l’ensemble du réseau. Explorez la représentation du réseau. Pour zoomer avec la souris, utilisez Ctrl+ la roulette de défilement de la souris (scroll wheel).

Charger un jeu de données

Pour charger les données dans Deep Network Designer, sur l’onglet Data, cliquez sur Import Data > Import Image Classification Data.

Dans la liste Data source, sélectionnez Folder. Cliquez sur Browse et sélectionnez le dossier MerchData.

La boîte de dialogue permet également de séparer les données de validation dans l’application. Divisez les données avec la répartition suivante : 70 % de données d’apprentissage et 30 % de données de validation.

Spécifiez les opérations d'augmentation à réaliser sur les images d’apprentissage. Pour cet exemple, appliquez une réflexion aléatoire sur l’axe des x, une rotation aléatoire sur la plage [-90,90] degrés et un changement d'échelle aléatoire sur la plage [1,2].

Cliquez sur Import pour importer les données dans Deep Network Designer.

Deep Network Designer vous permet d’inspecter visuellement la répartition des données d’apprentissage et de validation dans l’onglet Data. Dans cet exemple, vous voyez qu’il y a cinq classes dans le jeu de données. Vous pouvez également afficher des observations aléatoires de chaque classe.

Deep Network Designer redimensionne les images, pendant l’apprentissage, pour les adapter à la taille en entrée du réseau. Pour voir la taille des entrées du réseau, dans l’onglet Designer, cliquez sur imageInputLayer. Ce réseau a une taille en entrée de 224 par 224.

Éditer le réseau pour l’apprentissage par transfert

Pour réentraîner un réseau préentraîné afin de classer de nouvelles images, adaptez la dernière couche capable d'apprendre et la couche de classification finale du réseau au nouveau jeu de données. Dans GoogLeNet, ces couches sont respectivement nommées 'loss3-classifier' et 'output'.

Dans l’onglet Designer, cliquez sur la dernière couche entière connectée, 'loss3-classifier'. Au bas du volet Properties, cliquez sur Unlock Layer. Dans la boîte de dialogue d’avertissement qui apparaît, cliquez sur Unlock Anyway. Les propriétés des couches sont alors déverrouillées afin que vous puissiez les adapter à votre nouvelle tâche.

Avant R2023b : Pour modifier les propriétés des couches, vous devez remplacer les couches au lieu de les déverrouiller.

Définissez OutputSize au nombre de classes voulues dans le nouveau jeu de données, dans cet exemple, 5.

Modifiez les taux d’apprentissage de sorte que l’apprentissage soit plus rapide dans les nouvelles couches que dans les couches transférées. Définissez WeightLearnRateFactor et BiasLearnRateFactor à 10.

Sélectionnez la couche de classification, 'output', et cliquez sur Unlock Layer, puis cliquez sur Unlock Anyway. Pour la couche de sortie déverrouillée, vous n’avez pas besoin de définir OutputSize. Au moment de l’apprentissage, Deep Network Designer définit automatiquement les classes de sortie de la couche à partir des données.

Vérifier le réseau

Vérifiez votre réseau en cliquant sur Analyze. Le réseau est prêt pour l’apprentissage si Deep Learning Network Analyzer n’indique aucune erreur.

Entraîner le réseau

Pour entraîner le réseau avec les paramètres par défaut, sous l’onglet Training, cliquez sur Train.

Si vous voulez plus de contrôle sur l’apprentissage, cliquez sur Training Options et choisissez les paramètres à utiliser. Les options d’apprentissage par défaut conviennent mieux aux jeux de données volumineux. Pour de petits jeux de données, utilisez des valeurs inférieures pour les paramètres MiniBatchSize (taille des mini-lots) et ValidationFrequency (fréquence de validation). Pour plus d’informations sur la sélection d’options d’apprentissage, voir trainingOptions.

Pour cet exemple, définissez InitialLearnRate à 0.0001, MaxEpochs à 8 et ValidationFrequency à 5. Comme il y a 55 observations, définissez MiniBatchSize à 11 afin de diviser les données d’apprentissage uniformément et de s’assurer de l’utilisation de l’ensemble du jeu d’apprentissage pendant chaque epoch.

Pour entraîner le réseau avec les options d’apprentissage spécifiées, cliquez sur OK puis sur Train.

Deep Network Designer vous permet de visualiser et de surveiller la progression de l’apprentissage. Vous pouvez ensuite éditer les options d’apprentissage et réentraîner le réseau, si nécessaire.

Exporter les résultats de l’apprentissage

Pour exporter les résultats de l’apprentissage, sélectionnez Export > Export Trained Network and Results sous l’onglet Training. Deep Network Designer exporte le réseau entraîné sous la variable trainedNetwork_1 et les informations d’apprentissage sous la variable trainInfoStruct_1.

Vous pouvez également générer le code MATLAB permettant de recréer le réseau et les options d’apprentissage utilisées. Sélectionnez Export > Generate Code for Training sous l’onglet Training.

Tester le réseau entraîné

Sélectionnez une nouvelle image à classer avec le réseau entraîné.

I = imread("MerchDataTest.jpg");

Redimensionnez l’image de test à la taille en entrée du réseau.

I = imresize(I, [224 224]);

Classez l’image de test avec le réseau entraîné.

[YPred,probs] = classify(trainedNetwork_1,I);
imshow(I)
label = YPred;
title(string(label) + ", " + num2str(100*max(probs),3) + "%");

Pour plus d’informations, notamment sur les réseaux préentraînés, voir Deep Network Designer.

Voir aussi

Sujets associés