Algorithme de segmentation sémantique - Amazon SageMaker

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.

Algorithme de segmentation sémantique

L'algorithme de segmentation SageMaker sémantique fournit une approche fine au niveau des pixels pour développer des applications de vision par ordinateur. Il balise chaque pixel d'une image avec une étiquette de classe d'un ensemble prédéfini de classes. Le balisage est fondamental pour la compréhension des scènes, aspect crucial d'un nombre croissant d'applications de vision par ordinateur, telles que les véhicules à conduite automatique, les diagnostics par imagerie médicale et la détection par robot.

À titre de comparaison, SageMaker Classification des images - MXNet il s'agit d'un algorithme d'apprentissage supervisé qui analyse uniquement des images entières, en les classant dans l'une des multiples catégories de sortie. L'algorithme Détection d'objets - MXNet est un algorithme d'apprentissage supervisé qui détecte et classifie toutes les instances d'un objet dans une image. Il indique l'emplacement et l'échelle de chaque objet dans l'image avec un cadre de délimitation rectangulaire.

Comme l'algorithme de segmentation sémantique classe chaque pixel d'une image, il fournit également des informations sur les formes des objets contenus dans l'image. La sortie de la segmentation est représentée sous la forme d'une image en niveaux de gris, appelée masque de segmentation. Un masque de segmentation est une image avec la même forme que l'image d'entrée.

L'algorithme de segmentation SageMaker sémantique est construit à l'aide du framework MxNet Gluon et de la boîte à outils Gluon CV. Il vous offre le choix entre trois algorithmes intégrés pour entraîner un réseau neuronal profond. Vous pouvez utiliser l'algorithme FCN (Fully Convolutional Network), l'algorithmePyramid Scene Parsing (PSP) ou le V3. DeepLab

Chacun des trois algorithmes possède deux composants distincts :

  • Le backbone (ou encodeur) : réseau qui produit des cartes d'activation de fonctions fiables.

  • Le décodeur : réseau qui construit le masque de segmentation à partir des cartes d'activation codées.

Vous avez également le choix entre plusieurs dorsales pour les algorithmes FCN, PSP et DeepLab V3 : ResNet 50 ou 101. ResNet Ces dorsales comprennent des artefacts préentraînés qui ont été initialement entraînés pour la tâche de ImageNetclassification. Vous pouvez ajuster ces backbones en vue de la segmentation à l'aide de vos propres données. Vous pouvez également initialiser et entraîner ces réseaux à partir de zéro à l'aide de vos seules données. Les décodeurs ne sont jamais préentraînés.

Pour déployer le modèle entraîné à des fins d'inférence, utilisez le service SageMaker d'hébergement. Pendant l'inférence, vous pouvez demander le masque de segmentation soit comme une image PNG ou sous la forme d'un ensemble de probabilités pour chaque classe pour chaque pixel. Vous pouvez utiliser ces masques dans le cadre d'un pipeline plus grand qui inclut un traitement supplémentaire d'images en aval ou d'autres applications.

Exemples de blocs-notes de segmentation sémantique

Pour un exemple de bloc-notes Jupyter qui utilise l'algorithme de segmentation SageMaker sémantique pour entraîner un modèle et le déployer pour effectuer des inférences, consultez l'exemple de segmentation sémantique. Pour obtenir des instructions sur la création et l'accès aux instances de bloc-notes Jupyter dans lesquelles vous pouvez exécuter l'exemple SageMaker, consultez. Instances Amazon SageMaker Notebook

Pour afficher la liste de tous les SageMaker exemples, créez et ouvrez une instance de bloc-notes, puis cliquez sur l'onglet SageMaker Exemples. Les blocs-notes d'exemples de segmentation sémantiques sont situés sous Introduction aux algorithmes d'Amazon. Pour ouvrir un bloc-notes, choisissez son onglet Use (Utiliser), puis Create copy (Créer une copie).

Interface d'entrée/sortie pour l'algorithme de segmentation sémantique

SageMaker la segmentation sémantique suppose que l'ensemble de données de formation du client se trouve sur Amazon Simple Storage Service (Amazon S3). Une fois entraîné, il génère les artefacts du modèle résultant sur Amazon S3. Le format de l'interface d'entrée pour la segmentation SageMaker sémantique est similaire à celui de la plupart des ensembles de données de benchmarking de segmentation sémantique standardisés. Le jeu de données dans Amazon S3 devrait être présenté dans deux canaux, un pour train et un pour validation à l'aide de quatre répertoires, deux pour les images et deux pour les annotations. Les annotations sont censées être des images PNG décompressées. L'ensemble de données peut également avoir une carte d'étiquettes qui décrit la façon dont les mappages d'annotation sont établis. Dans le cas contraire, l'algorithme utilise une valeur par défaut. Il prend également en charge le format d'image de manifeste augmenté (application/x-image) pour l'entraînement en mode d'entrée Pipe directement à partir d'Amazon S3. Pour l'inférence, un point de terminaison accepte les images avec un type de contenu image/jpeg.

Fonctionnement de l'entraînement

Les données d'entraînement sont scindées en quatre répertoires : train, train_annotation, validation et validation_annotation. Il y a un canal pour chacun de ces répertoires. L'ensemble de données devrait également disposer d'un fichier label_map.json par canal pour train_annotation et pour validation_annotation, respectivement. Si vous ne fournissez pas ces fichiers JSON, SageMaker fournit la carte d'étiquettes définie par défaut.

L'ensemble de données spécifiant ces fichiers doit ressembler à l'exemple suivant :

s3://bucket_name | |- train | | - 0000.jpg | - coffee.jpg |- validation | | - 00a0.jpg | - bananna.jpg |- train_annotation | | - 0000.png | - coffee.png |- validation_annotation | | - 00a0.png | - bananna.png |- label_map | - train_label_map.json | - validation_label_map.json

Chaque image JPG des répertoires train et validation dispose d'une image d'étiquette PNG correspondante avec le même nom dans les répertoires validation_annotation et train_annotation. Cette convention de dénomination contribue à l'algorithme permettant d'associer une étiquette à son image correspondante au cours de l'entraînement. Les canaux train, train_annotation, validation et validation_annotation sont obligatoires. Les annotations sont des images PNG à un seul canal. Le format fonctionne aussi longtemps que les métadonnées (modes) de l'image permettent à l'algorithme de lire les annotations d'image en un entier non signé 8 bits à canal unique. Pour plus d'informations sur notre prise en charge des modes, consultez la documentation sur la bibliothèque d'images Python. Nous vous recommandons d'utiliser le pixel 8 bits, en mode P couleur vraie.

L'image qui est encodée est un entier simple 8 bits lorsque vous utilisez les modes. Pour passer de ce mappage à la carte d'une étiquette, l'algorithme utilise un fichier de mappage par canal, appelé carte d'étiquette. La carte d'étiquette est utilisée pour mapper les valeurs de l'image avec les indices de l'étiquette réelle. Dans la carte de l'étiquette par défaut, qui est fournie par défaut si vous n'en fournissez pas une, la valeur de pixel dans une matrice d'annotation (image) indexe directement l'étiquette. Ces images peuvent être des fichiers PNG en niveaux de gris ou des fichiers PNG indexés 8 bits. Le fichier de la carte d'étiquette pour le cas par défaut non mis à l'échelle est le suivant :

{ "scale": "1" }

Pour fournir un certain contraste pour l'affichage, certains logiciels d'annotation dimensionnent les images d'étiquette par une valeur constante. À cette fin, l'algorithme de segmentation SageMaker sémantique fournit une option de redimensionnement permettant de réduire les valeurs aux valeurs réelles des étiquettes. Lorsque cette réduction ne convertit pas la valeur en un entier approprié, l'algorithme prend comme valeur par défaut le plus grand nombre entier inférieur ou égal à la valeur d'échelle. Le code suivant montre comment définir la valeur d'échelle pour redimensionner les valeurs d'étiquette :

{ "scale": "3" }

L'exemple suivant montre comment cette valeur "scale" est utilisée pour redimensionner les valeurs encoded_label de l'image d'annotation d'entrée lorsqu'elles sont mappées à des valeurs mapped_label à utiliser dans l'entraînement. Les valeurs d'étiquette de l'image d'annotation d'entrée sont 0, 3, 6, avec l'échelle 3. Par conséquent, elles sont mappées à 0, 1, 2 pour l'entraînement :

encoded_label = [0, 3, 6] mapped_label = [0, 1, 2]

Dans certains cas, il se peut que vous ayez besoin de spécifier un mappage de couleur particulier pour chaque classe. Utilisez l'option de carte dans le mappage des étiquettes comme illustré dans l'exemple suivant d'un fichier label_map :

{ "map": { "0": 5, "1": 0, "2": 2 } }

Le mappage d'étiquette pour cet exemple est le suivant :

encoded_label = [0, 5, 2] mapped_label = [1, 0, 2]

Avec les mappages d'étiquette, vous pouvez utiliser différents systèmes d'annotation et logiciels d'annotation pour obtenir des données sans beaucoup de prétraitement. Vous pouvez fournir une carte d'étiquette par canal. Les fichiers d'une carte d'étiquette du canal label_map doivent suivre les conventions d'attribution de nom pour les quatre structures de répertoire. Si vous ne fournissez pas une carte d'étiquette, l'algorithme présume une échelle de 1 (valeur par défaut).

Entraînement avec le format de manifeste augmenté

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. Le fichier manifeste augmenté contient des objets de données et doit être au format JSON Lines, comme décrit dans la demande CreateTrainingJob. Chaque ligne du manifeste est une entrée contenant l'URI Amazon S3 de l'image et l'URI de l'image d'annotation.

Chaque objet JSON du fichier manifeste doit contenir une clé source-ref. La clé source-ref doit contenir la valeur de l'URI Amazon S3 de l'image. Les étiquettes sont fournies sous la valeur du paramètre AttributeNames, comme indiqué dans la demande CreateTrainingJob. 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", "city-streets-ref"]. -ref doit être ajouté à ces noms. Lorsque vous utilisez l'algorithme Segmentation sémantique avec Augmented Manifest, la valeur du paramètre RecordWrapperType doit être "RecordIO" et la valeur du paramètre ContentType doit être application/x-recordio.

{"source-ref": "S3 bucket location", "city-streets-ref": "S3 bucket location", "city-streets-metadata": {"job-name": "label-city-streets", }}

Pour plus d'informations sur les fichiers manifeste augmenté, consultez Fichiers manifestes augmentés pour les tâches de formation.

Entraînement incrémentiel

Vous pouvez également contribuer à l'entraînement d'un nouveau modèle avec un modèle que vous avez entraîné précédemment avec SageMaker. Cet entraînement incrémentiel permet de gagner du temps lorsque vous souhaitez entraîner un nouveau modèle avec des données identiques ou similaires. Actuellement, la formation incrémentielle n'est prise en charge que pour les modèles entraînés avec la segmentation SageMaker sémantique intégrée.

Pour utiliser votre propre modèle préentraîné, spécifiez ChannelName comme « modèle » dans InputDataConfig pour la demande CreateTrainingJob. Définissez le canal de modèle ContentType sur application/x-sagemaker-model. Les paramètres d'entrée backbone, algorithm, crop_size et num_classes qui définissent l'architecture réseau doivent être régulièrement spécifiés dans les hyperparamètres d'entrée du nouveau modèle et du modèle préentraîné que vous chargez sur le canal du modèle. Pour le fichier de modèle préentraîné, vous pouvez utiliser les artefacts compressés (.tar.gz) provenant des sorties. SageMaker Vous ne pouvez utiliser les formats d'image que pour les données d'entrée. Pour plus d'informations sur l'entraînement incrémentiel et pour obtenir des instructions sur son utilisation, consultez Utiliser la formation incrémentielle sur Amazon SageMaker.

Produire les inférences

Pour interroger un modèle entraîné qui est déployé sur un point de terminaison, vous devez fournir une image et un AcceptType qui indique le type de sortie requis. Le point de terminaison accepte les images JPEG avec un type de contenu image/jpeg. Si vous demandez un AcceptType de image/png, l'algorithme génère un fichier PNG avec un masque de segmentation dans le même format que les étiquettes elles-mêmes. Si vous demandez application/x-recordio-protobuf comme type d'acceptation, l'algorithme renvoie les probabilités de classe codées au format recordio-protobuf. Le dernier format génère un tenseur 3D où la troisième dimension est de la même taille que le nombre de classes. Cette composante désigne la probabilité de chaque étiquette de classe pour chaque pixel.

Recommandation sur les instances EC2 pour l'algorithme de segmentation sémantique

L'algorithme de segmentation SageMaker sémantique ne prend en charge que les instances de GPU pour l'entraînement, et nous recommandons d'utiliser des instances de GPU avec plus de mémoire pour l'entraînement avec des lots de grande taille. L'algorithme peut être entraîné à l'aide d'instances P2, P3, G4dn ou G5 dans des configurations à une seule machine.

Pour l'inférence, vous pouvez utiliser les instances de CPU (telles que C5 et M5) et les instances de GPU (telles que P3 et G4dn), ou les deux. Pour plus d'informations sur les types d'instances qui fournissent différentes combinaisons de CPU, de GPU, de mémoire et de capacité réseau à des fins d'inférence, consultez Amazon SageMaker ML Instance Types.