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
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
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.
Rubriques
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 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 S3train
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 PythonP
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 LinesCreateTrainingJob
. 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