Algoritmo de segmentação semântica - Amazon SageMaker

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Algoritmo de segmentação semântica

O algoritmo de segmentação SageMaker semântica fornece uma abordagem refinada em nível de pixel para o desenvolvimento de aplicativos de visão computacional. Ele marca cada pixel em uma imagem com um rótulo de classe de um conjunto predefinido de classes. A marcação é fundamental para a compreensão de cenas, o que é crítico para um número crescente de aplicativos de visão computacional, como veículos autônomos, diagnósticos de imagens médicas e detecção de robôs.

Para comparação, SageMaker Classificação de imagens - MXNet é um algoritmo de aprendizado supervisionado que analisa somente imagens inteiras, classificando-as em uma das várias categorias de saída. O Detecção de objetos - MXNet é um algoritmo de aprendizagem supervisionada que detecta e classifica todas as instâncias de um objeto em uma imagem. Ele indica a localização e a escala de cada objeto na imagem com uma caixa delimitadora retangular.

Como o algoritmo de segmentação semântica classifica cada pixel em uma imagem, ele também fornece informações sobre as formas dos objetos contidos na imagem. A saída de segmentação é representada como uma imagem em tons de cinza, chamada de máscara de segmentação. Uma máscara de segmentação é uma imagem em tons de cinza com a mesma forma da imagem de entrada.

O algoritmo de segmentação SageMaker semântica é construído usando a estrutura MXNet Gluon e o kit de ferramentas Gluon CV. Ele oferece a opção de três algoritmos integrados para treinar uma rede neural profunda. Você pode usar o algoritmo Fully-Convolutional Network (FCN), o algoritmo Pyramid Scene Parsing (PSP) ou o V3. DeepLab

Cada um dos três algoritmos tem dois componentes distintos:

  • A estrutura (ou codificador)—Uma rede que produz mapas de ativação confiáveis de recursos.

  • O decodificador—Uma rede que constrói a máscara de segmentação a partir dos mapas de ativação codificados.

Você também tem a opção de backbones para os algoritmos FCN, PSP e DeepLab V3: ResNet 50 ou 101. ResNet Esses backbones incluem artefatos pré-treinados que foram originalmente treinados na tarefa de classificação. ImageNet É possível ajustar esses backbones para segmentação usando seus próprios dados. Ou você pode inicializar e treinar essas redes do zero usando apenas seus próprios dados. Os decodificadores nunca são pré-treinados.

Para implantar o modelo treinado para inferência, use o serviço de SageMaker hospedagem. Durante a inferência, você pode solicitar a máscara de segmentação como uma imagem PNG ou como um conjunto de probabilidades para cada classe para cada pixel. Você pode usar essas máscaras como parte de um pipeline maior que inclui processamento adicional de imagens posteriores ou de outros aplicativos.

Blocos de anotações de amostra de segmentação semântica

Para ver um exemplo de notebook Jupyter que usa o algoritmo de segmentação SageMaker semântica para treinar um modelo e implantá-lo para realizar inferências, consulte o Exemplo de segmentação semântica. Para obter instruções sobre como criar e acessar instâncias do notebook Jupyter que você pode usar para executar o exemplo SageMaker, consulte. Instâncias do Amazon SageMaker Notebook

Para ver uma lista de todas as SageMaker amostras, crie e abra uma instância do notebook e escolha a guia SageMaker Exemplos. Os blocos de anotações de segmentação semântica estão localizados em Introdução aos algoritmos da Amazon. Para abrir um bloco de anotações, escolha sua guia Use (Uso) e depois escolha Create copy (Criar cópia).

Interface de entrada/saída para o algoritmo de segmentação semântica

SageMaker a segmentação semântica espera que o conjunto de dados de treinamento do cliente esteja no Amazon Simple Storage Service (Amazon S3). Uma vez treinado, ele produz os artefatos do modelo resultantes no Amazon S3. O formato da interface de entrada para a segmentação SageMaker semântica é semelhante ao da maioria dos conjuntos de dados de benchmarking de segmentação semântica padronizados. Espera-se que o conjunto de dados no Amazon S3 seja apresentado em dois canais, um para train e outro para validation usando quatro diretórios, dois para imagens e dois para anotações. Espera-se que as anotações sejam imagens PNG não compactadas. O conjunto de dados também pode ter um mapa de rótulos que descreve como os mapeamentos de anotações são estabelecidos. Caso contrário, o algoritmo usa um padrão. Ele também oferece suporte para o formato de imagem de manifesto aumentado (application/x-image) para treinamento no modo de entrada Pipe diretamente do Amazon S3. Para inferência, um endpoint aceita imagens com um tipo de conteúdo image/jpeg.

Como funciona o treinamento

Os dados de treinamento são divididos em quatro diretórios: train, train_annotation, validation e validation_annotation. Existe um canal para cada um desses diretórios. Também espera-se que o conjunto de dados tenha um arquivo label_map.json por canal para train_annotation e validation_annotation, respectivamente. Se você não fornecer esses arquivos JSON, SageMaker fornecerá o mapa de rótulos padrão definido.

O conjunto de dados que especifica esses arquivos deve ser semelhante ao seguinte exemplo:

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

Cada imagem JPG nos diretórios de treinamento e validação tem uma imagem de rótulo PNG correspondente com o mesmo nome nos diretórios train_annotation e validation_annotation. Essa convenção de nomenclatura ajuda o algoritmo a associar um rótulo à sua imagem correspondente durante o treinamento. Os canais train, train_annotation, validation e validation_annotation são obrigatórios. As anotações são imagens PNG de canal único. O formato funciona desde que os metadados (modos) na imagem ajudem o algoritmo a ler as imagens da anotação em um número inteiro não assinado de 8 bits de canal único. Para obter mais informações sobre nosso suporte para modos, consulte a documentação da Biblioteca de imagens Python. Recomendamos o uso do modo P true color de 8 bits de pixel.

A imagem codificada é um número inteiro simples de 8 bits ao usar modos. Para obter desse mapeamento um mapa de um rótulo, o algoritmo usa um arquivo de mapeamento por canal, chamado mapa de rótulos. O mapa de rótulos é usado para mapear os valores na imagem com índices de rótulos reais. No mapa de rótulos padrão, que é fornecido por padrão, se você não fornecer um, o valor de pixels em uma matriz de anotação (imagem) indexará diretamente o rótulo. Essas imagens podem ser arquivos PNG em escala de cinza ou arquivos PNG indexados de 8 bits. O arquivo de mapa de rótulos para o caso padrão sem escala é o seguinte:

{ "scale": "1" }

Para fornecer um certo contraste para visualização, alguns softwares de anotação dimensionam as imagens de rótulo em uma quantidade constante. Para apoiar isso, o algoritmo de segmentação SageMaker semântica fornece uma opção de redimensionamento para reduzir os valores aos valores reais do rótulo. Quando a redução da escala não converte o valor em um número inteiro apropriado, o algoritmo assume como padrão o maior número inteiro menor que ou igual ao valor da escala. O código a seguir mostra como definir o valor de escala para redimensionar os valores dos rótulos:

{ "scale": "3" }

O exemplo a seguir mostra como esse valor "scale" é usado para redimensionar os valores encoded_label da imagem de entrada anotação quando eles são mapeados para os valores mapped_label a serem usados no treinamento. Os valores dos rótulos na imagem de anotação de entrada são 0, 3, 6, com escala 3 e, portanto, são mapeados para 0, 1, 2 para treinamento:

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

Em alguns casos, pode ser necessário especificar um mapeamento de cores específico para cada classe. Use a opção de mapa no mapeamento de rótulos, conforme mostrado no seguinte exemplo de um arquivo label_map:

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

Esse mapeamento de rótulo para este exemplo é:

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

Com mapeamentos de rótulos, você pode usar diferentes sistemas de anotação e softwares de anotação para obter dados sem muito pré-processamento. É possível fornecer um mapa de rótulos por canal. Os arquivos de um mapa de rótulos no canal label_map devem seguir as convenções de nomenclatura para a estrutura de quatro diretórios. Se você não fornecer um mapa de rótulos, o algoritmo assumirá uma escala de 1 (o padrão).

Treinando com o formato de manifesto aumentado

O formato de manifesto aumentado permite que você faça treinamentos no modo de Pipe usando arquivos de imagem, sem precisar criar arquivos RecordIO. O arquivo manifesto aumentado contém objetos de dados e deve estar no formato JSON Lines, conforme descrito na solicitação CreateTrainingJob. Cada linha no manifesto é uma entrada contendo o URI do Amazon S3 para a imagem e o URI para a imagem de anotação.

Cada objeto JSON no arquivo de manifesto deve conter uma chave source-ref. A chave source-ref deve conter o valor do URI do Amazon S3 para a imagem. Os rótulos são fornecidos sob o valor do parâmetro AttributeNames, conforme especificado na solicitação CreateTrainingJob. Elas também podem conter metadados adicionais sob a tag de metadados, mas estas são ignoradas pelo algoritmo. No exemplo abaixo, AttributeNames estão contidOs na lista de imagem e referências de anotação ["source-ref", "city-streets-ref"]. Esses nomes devem ter -ref anexada a eles. Ao usar o algoritmo Segmentação Semântica com Manifesto Aumentado, o valor do parâmetro RecordWrapperType deve ser "RecordIO" e o valor do parâmetro ContentType deve ser application/x-recordio.

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

Para obter mais informações sobre arquivos manifestos aumentados, consulte Fornecer metadados de conjunto de dados para trabalhos de treinamento com um arquivo de Manifesto aumentado.

Treinamento incremental

Você também pode propagar o treinamento de um novo modelo com um modelo anteriormente treinado com o SageMaker. Esse treinamento incremental economiza tempo de treinamento quando você deseja treinar um novo modelo com dados iguais ou semelhantes. Atualmente, o treinamento incremental é suportado somente para modelos treinados com a segmentação SageMaker semântica integrada.

Para usar seu próprio modelo pré-treinado, especifique ChannelName como "modelo" no InputDataConfig para a solicitação CreateTrainingJob. Defina o ContentType para o canal do modelo como application/x-sagemaker-model. Os parâmetros de entrada backbone, algorithm, crop_size e num_classes que definem a arquitetura de rede devem ser especificados de forma consistente nos hiperparâmetros de entrada do novo modelo e no modelo pré-treinado que você transfere por upload no canal do modelo. Para o arquivo de modelo pré-treinado, você pode usar os artefatos compactados (.tar.gz) das saídas. SageMaker Você só pode usar formatos de imagem para dados de entrada. Para obter mais informações sobre treinamento incremental e instruções sobre como usá-lo, consulte Use o treinamento incremental na Amazon SageMaker.

Produzir inferências

Para consultar um modelo treinado que é implantado em um endpoint, você precisa fornecer uma imagem e um AcceptType que represente o tipo de saída necessária. O endpoint usa imagens JPEG com um tipo de conteúdo image/jpeg. Se você solicitar um AcceptType de image/png, o algoritmo gerará um arquivo PNG com uma máscara de segmentação no mesmo formato que os rótulos. Se você solicitar um tipo aceito de application/x-recordio-protobuf, o algoritmo retornará probabilidades de classe codificadas no formato recordio-protobuf. O último formato produz um tensor 3D em que a terceira dimensão é do mesmo tamanho que o número de classes. Esse componente representa a probabilidade de cada rótulo de classe para cada pixel.

Recomendação de instâncias do EC2 para o algoritmo de Segmentação semântica

O algoritmo de segmentação SageMaker semântica só oferece suporte a instâncias de GPU para treinamento, e recomendamos o uso de instâncias de GPU com mais memória para treinamento com lotes grandes. O algoritmo pode ser treinado usando instâncias P2, P3, G4dn ou G5 em configurações de máquina única.

Para inferência, você pode usar instâncias de CPU (como C5 e M5) e instâncias de GPU (como P3 e G4dn) ou ambas. Para obter informações sobre os tipos de instância que fornecem combinações variadas de CPU, GPU, memória e capacidade de rede para inferência, consulte Tipos de instância do Amazon SageMaker ML.