

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Classification des images - MXNet
<a name="image-classification"></a>

L'algorithme de classification SageMaker d'images Amazon est un algorithme d'apprentissage supervisé qui prend en charge la classification multi-étiquettes. Il prend une image comme entrée et génère une ou plusieurs étiquettes assignées à cette image. Il utilise un réseau neuronal convolutif qui peut être entraîné intégralement ou à l'aide de l'apprentissage par transfert lorsqu'un grand nombre d'images d'entraînement ne sont pas disponibles. 

Le format d'entrée recommandé pour les algorithmes de classification d'images Amazon SageMaker AI est Apache MXNet [Recordio](https://mxnet.apache.org/api/faq/recordio). Toutefois, vous pouvez également utiliser des images brutes au format .jpg ou .png. Reportez-vous à [cette discussion](https://mxnet.apache.org/api/architecture/note_data_loading) pour un aperçu général de la préparation et du chargement efficaces des données pour les systèmes de machine learning. 

**Note**  
Pour maintenir une meilleure interopérabilité avec les frameworks d'apprentissage profond existants, ce format est différent des formats de données protobuf couramment utilisés par les autres algorithmes Amazon SageMaker AI.

Pour plus d'informations sur les réseaux convolutifs, consultez : 
+ [Deep residual learning for image recognition](https://arxiv.org/abs/1512.03385) Kaiming He, et al., 2016 – Conférence IEEE sur la reconnaissance d'image et la reconnaissance de modèle
+ [ImageNet base de données d'images](http://www.image-net.org/)
+ [Classification des images avec Gluon-CV et MXNet](https://gluon-cv.mxnet.io/build/examples_classification/index.html)

**Topics**
+ [Interface d'entrée/de sortie pour l'algorithme de classification d'images](#IC-inputoutput)
+ [Recommandation pour l'instance EC2 relative à l'algorithme de classification d'images](#IC-instances)
+ [Exemples de blocs-notes de classification d'images](#IC-sample-notebooks)
+ [Fonctionnement de la classification d'images](IC-HowItWorks.md)
+ [Hyperparamètres de classification d'images](IC-Hyperparameter.md)
+ [Réglage d'un modèle de classification d'images](IC-tuning.md)

## Interface d'entrée/de sortie pour l'algorithme de classification d'images
<a name="IC-inputoutput"></a>

L'algorithme SageMaker AI Image Classification prend en charge les types de contenu Recordio (`application/x-recordio`) et image (`image/png``image/jpeg`, et`application/x-image`) pour l'entraînement en mode fichier, et prend en charge le type de contenu Recordio (`application/x-recordio`) pour l'entraînement en mode tube. Toutefois, vous pouvez également entraîner les modèles en mode pipe (tube) en utilisant les fichiers image (`image/png`, `image/jpeg` et `application/x-image`), sans créer de fichiers RecordIO, en recourant au format manifeste augmenté.

L'entraînement distribué est pris en charge pour le mode file et le mode pipe. Lorsque vous utilisez le type de contenu RecordIO en mode pipe, vous devez définir le `S3DataDistributionType` de `S3DataSource` sur `FullyReplicated`. L'algorithme prend en charge un modèle entièrement répliqué dans lequel vos données sont copiées sur chaque machine.

L'algorithme prend en charge `image/png`, `image/jpeg` et `application/x-image` pour l'inférence.

### Entraînement avec le format RecordIO
<a name="IC-recordio-training"></a>

Si vous utilisez le format RecordIO pour l'entraînement, spécifiez les canaux `train` et `validation` en tant que valeurs pour le paramètre `InputDataConfig` de la demande [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html). Spécifiez un fichier RecordIO (`.rec`) dans le canal `train` et un fichier RecordIO dans le canal `validation`. Définissez le type de contenu des deux canaux dans `application/x-recordio`. 

### Entraînement avec le format Image
<a name="IC-image-training"></a>

Si vous utilisez le format Image pour l'entraînement, spécifiez les canaux `train`, `validation`, `train_lst` et `validation_lst` en tant que valeurs pour le paramètre `InputDataConfig` de la requête [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html). Spécifiez les données d'image individuelle (fichiers `.jpg` ou `.png`) pour les canaux `train` et `validation`. Spécifiez un fichier `.lst` dans chacun des canaux `train_lst` et `validation_lst`. Définissez le type de contenu pour les quatre canaux dans `application/x-image`. 

**Note**  
SageMaker L'IA lit les données d'entraînement et de validation séparément des différents canaux. Vous devez donc stocker les données d'entraînement et de validation dans différents dossiers.

Un fichier `.lst` est un fichier de valeurs séparées par des tabulations à trois colonnes qui contient une liste de fichiers image. La première colonne spécifie l'index de l'image, la deuxième colonne spécifie l'index d'étiquette de classe pour l'image, et la troisième colonne spécifie le chemin d'accès relatif du fichier image. L'index d'image de la première colonne doit être unique parmi toutes les images. L'ensemble des index d'étiquette de classe est numéroté successivement, la numérotation devant commencer par 0. Par exemple, 0 pour la classe « cat », 1 pour la classe « dog », et ainsi de suite pour les classes supplémentaires. 

 Voici un exemple de fichier `.lst` : 

```
5      1   your_image_directory/train_img_dog1.jpg
1000   0   your_image_directory/train_img_cat1.jpg
22     1   your_image_directory/train_img_dog2.jpg
```

Par exemple, si vos images d'entraînement sont stockées dans `s3://<your_bucket>/train/class_dog`, `s3://<your_bucket>/train/class_cat`, et ainsi de suite, spécifiez le chemin d'accès de votre canal `train` sous la forme `s3://<your_bucket>/train`, qui est le répertoire de niveau supérieur pour vos données. Dans le fichier `.lst`, spécifiez le chemin d'accès relatif à un fichier individuel nommé `train_image_dog1.jpg` dans le répertoire de classe `class_dog` sous la forme `class_dog/train_image_dog1.jpg`. Vous pouvez également stocker tous vos fichiers image dans un sous-répertoire du répertoire `train`. Dans ce cas, utilisez ce sous-répertoire comme chemin d'accès relatif. Par exemple, `s3://<your_bucket>/train/your_image_directory`. 

### Entraînement avec le format d'image Manifeste augmenté
<a name="IC-augmented-manifest-training"></a>

Le format manifeste augmenté permet de procéder à l'entraînement en mode Pipe (Tube) en utilisant des fichiers image sans avoir à créer de fichiers RecordIO. Vous devez spécifier les canaux d'entraînement et de validation en tant que valeurs du paramètre `InputDataConfig` de la demande [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html). Si vous utilisez ce format, un fichier manifeste S3 contenant la liste des images et leurs annotations associées doit être généré. Le fichier manifeste doit être au format [JSON Lines](http://jsonlines.org/), où chaque ligne représente un exemple. Les images sont spécifiées à l'aide de la balise `'source-ref'` qui pointe vers l'emplacement S3 de l'image. Les annotations sont fournies sous la valeur du paramètre `"AttributeNames"`, comme indiqué dans la demande [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html). Il peut également contenir des métadonnées supplémentaires sous la balise `metadata`, mais celles-ci sont ignorées par l'algorithme. Dans l'exemple suivant, `"AttributeNames"` est contenu dans la liste d'images et les références d'annotation `["source-ref", "class"]`. La valeur d'étiquette correspondante est `"0"` pour la première image et `“1”` pour la deuxième image :

```
{"source-ref":"s3://image/filename1.jpg", "class":"0"}
{"source-ref":"s3://image/filename2.jpg", "class":"1", "class-metadata": {"class-name": "cat", "type" : "groundtruth/image-classification"}}
```

L'ordre des `"AttributeNames"` dans les fichiers d'entrée est important lors de l'entraînement de l' ImageClassification algorithme. Ce dernier accepte les données acheminées dans un ordre spécifique, avec `image` en premier, suivi de `label`. Dans cet exemple, les AttributeNames « » sont donc fournis en `"source-ref"` premier, suivis de`"class"`. Lorsque vous utilisez l' ImageClassification algorithme avec Augmented Manifest, la valeur du `RecordWrapperType` paramètre doit être`"RecordIO"`.

L'entraînement avec plusieurs étiquettes est également pris en charge en spécifiant un tableau de valeurs JSON. L'hyperparamètre `num_classes` doit être défini pour correspondre au nombre total de classes. Il existe deux formats d'étiquette valides : multi-hot et class-id. 

Dans le format multi-hot, chaque étiquette est un vecteur multi-hot codé de toutes les classes, où chaque classe prend la valeur 0 ou 1. Dans l'exemple suivant, il existe trois classes. La première image est étiquetée avec les classes 0 et 2, tandis que la deuxième image est étiquetée avec la classe 2 seulement : 

```
{"image-ref": "s3://amzn-s3-demo-bucket/sample01/image1.jpg", "class": "[1, 0, 1]"}
{"image-ref": "s3://amzn-s3-demo-bucket/sample02/image2.jpg", "class": "[0, 0, 1]"}
```

Dans le format class-id, chaque étiquette est une liste des ID de classe, issues de [0, `num_classes`), qui s'appliquent au point de données. L'exemple précédent devient alors :

```
{"image-ref": "s3://amzn-s3-demo-bucket/sample01/image1.jpg", "class": "[0, 2]"}
{"image-ref": "s3://amzn-s3-demo-bucket/sample02/image2.jpg", "class": "[2]"}
```

Le format multi-hot est le format par défaut, mais il peut être défini explicitement dans le type de contenu avec le `label-format` paramètre suivant : `"application/x-recordio; label-format=multi-hot".` Le format class-id, qui est le format généré par GroundTruth, doit être défini explicitement : `"application/x-recordio; label-format=class-id".`

Pour plus d'informations sur les fichiers manifeste augmenté, consultez [Fichiers manifestes augmentés dans les tâches d’entraînement](augmented-manifest.md).

### Entraînement incrémentiel
<a name="IC-incremental-training"></a>

Vous pouvez également amorcer l'entraînement d'un nouveau modèle avec les artefacts d'un modèle que vous avez déjà entraîné avec l' SageMaker IA. L'entraînement progressif permet de gagner du temps lorsque vous souhaitez entraîner un nouveau modèle avec des données identiques ou similaires. SageMaker Les modèles de classification d'images basés sur l'IA ne peuvent être ensemencés qu'avec un autre modèle de classification d'images intégré formé à l' SageMaker IA.

Pour utiliser un modèle préentraîné dans la demande [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html), spécifiez `ChannelName` comme « modèle » dans le paramètre `InputDataConfig`. Définissez le canal de modèle `ContentType` sur `application/x-sagemaker-model`. Les valeurs des hyperparamètres en entrée du nouveau modèle et du modèle préentraîné que vous chargez sur le canal de modèle doivent être identiques à celles des paramètres d'entrée `num_layers`, `image_shape` et `num_classes`. Ces paramètres définissent l'architecture réseau. Pour le fichier de modèle préentraîné, utilisez les artefacts du modèle compressé (au format .tar.gz) produits par AI. SageMaker Pour les données d'entrée, vous pouvez utiliser les formats RecordIO ou image.

### Inférence avec l'algorithme de classification d'images
<a name="IC-inference"></a>

Les modèles générés peuvent être hébergés pour l'inférence et prennent en charge les formats d'image `.jpg` et `.png` encodés en tant que type de contenu `image/png, image/jpeg` et `application/x-image`. L'image d'entrée est redimensionnée automatiquement. La sortie correspond aux valeurs de probabilité pour toutes les classes encodées au format JSON ou au [format texte JSON Lines](http://jsonlines.org/) pour la transformation des lots. Le modèle de classification d'images traite une seule image par demande et génère une seule ligne dans le fichier au format JSON ou JSON Lines. Voici un exemple de réponse au format JSON Lines :

```
accept: application/jsonlines

 {"prediction": [prob_0, prob_1, prob_2, prob_3, ...]}
```

Pour plus d'informations sur l'entraînement et l'inférence, consultez les exemples d'instance de bloc-notes de classification d'images référencés dans l'introduction.

## Recommandation pour l'instance EC2 relative à l'algorithme de classification d'images
<a name="IC-instances"></a>

Pour la classification des images, nous prenons en charge les instances P2, P3, G4dn et G5. Nous recommandons d'utiliser les instances GPU avec davantage de mémoire pour l'entraînement avec des tailles de lot importantes. Vous pouvez également exécuter l'algorithme sur plusieurs GPU et des paramètres multi-machines pour un entraînement distribué. Les instances de CPU (telles que C4) et de GPU (P2, P3, G4dn ou G5) peuvent être utilisées pour l'inférence.

## Exemples de blocs-notes de classification d'images
<a name="IC-sample-notebooks"></a>

Pour un exemple de bloc-notes utilisant l'algorithme de classification d'images SageMaker AI, voir [Création et enregistrement d'un modèle de classification d' MXNet images via des SageMaker pipelines](https://github.com/aws-samples/amazon-sagemaker-pipelines-mxnet-image-classification/blob/main/image-classification-sagemaker-pipelines.ipynb). Pour savoir comment créer et accéder à des instances de bloc-notes Jupyter que vous pouvez utiliser pour exécuter l'exemple dans SageMaker AI, consultez. [Instances de SageMaker blocs-notes Amazon](nbi.md) Une fois que vous avez créé une instance de bloc-notes et que vous l'avez ouverte, sélectionnez l'onglet **Exemples d'SageMaker IA** pour voir la liste de tous les exemples d' SageMaker IA. Vous trouverez des exemples de blocs-notes de classification d'images dans la **présentation des algorithmes Amazon**. Pour ouvrir un bloc-notes, cliquez sur son onglet **Use (Utiliser)** et sélectionnez **Create copy (Créer une copie)**.