Classificação de imagens - MXNet - SageMaker IA da Amazon

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á.

Classificação de imagens - MXNet

O algoritmo de classificação de imagens do Amazon SageMaker é um algoritmo de aprendizado supervisionado que oferece suporte à classificação de vários rótulos. Ele recebe uma imagem como entrada e gera um ou mais rótulos atribuídos a essa imagem. Ele usa uma rede neural convolucional que pode ser treinada do zero ou treinada com aprendizado de transferência quando um grande número de imagens de treinamento não está disponível.

O formato de entrada recomendado para os algoritmos de classificação de imagens do Amazon SageMaker AI é o RecordIO do Apache MXNet. No entanto, você também pode usar imagens brutas nos formatos .jpg ou .png. Consulte esta discussão para obter uma visão geral ampla da preparação e carregamento eficientes de dados para sistemas de machine learning.

nota

Para melhorar a interoperabilidade com os frameworks de aprendizado profundo existentes, esse formato é diferente dos formatos de dados protobuf comumente usados por outros algoritmos do Amazon SageMaker AI.

Para obter mais informações sobre as redes convolucionais, consulte:

Interface de entrada/saída para o algoritmo de classificação de imagens

O algoritmo de classificação de imagens do SageMaker AI permite os tipos de conteúdo RecordIO (application/x-recordio) e de imagem (image/png, image/jpeg e application/x-image) para treinamento no modo File, bem como o tipo de conteúdo RecordIO (application/x-recordio) para treinamento no modo Pipe. No entanto, também é possível treinar no modo Pipe por meio de arquivos de imagem (image/png, image/jpeg e application/x-image), sem criar arquivos RecordIO, usando o formato de manifesto aumentado.

O treinamento distribuído é compatível com o modo de Arquivo e o modo de Pipe. Ao usar o tipo de conteúdo RecordIO no modo de Pipe, você deve definir o S3DataDistributionType de S3DataSource como FullyReplicated. O algoritmo oferece suporte para um modelo totalmente replicado em que seus dados são copiados em cada máquina.

O algoritmo oferece suporte para image/png, image/jpeg e application/x-image para inferência.

Treinar com o formato RecordIO

Se você usar o formato RecordIO para treinamento, especifique os canais train e validation como valores para o parâmetro InputDataConfig da solicitação CreateTrainingJob. Especifique um arquivo RecordIO (.rec) no canal train e um arquivo RecordIO no canal validation. Defina o tipo de conteúdo para ambos os canais como application/x-recordio.

Treinar com o formato de imagem

Se você usar o formato de imagens para treinamento, especifique os canais train, validation, train_lst e validation_lst como valores para o parâmetro InputDataConfig da solicitação CreateTrainingJob. Especifique dados de imagem individuais (arquivos .jpg ou .png) para os canais train e validation. Especifique um arquivo .lst em cada um dos canais train_lst e validation_lst. Defina o tipo de conteúdo para os quatro canais como application/x-image.

nota

Como o SageMaker AI lê os dados de treinamento e validação de canais diferentes separadamente, é necessário armazenar os dados de treinamento e validação em pastas diferentes.

Um arquivo .lst é um arquivo separado por tabulação com três colunas que contém uma lista de arquivos de imagem. A primeira coluna especifica o índice de imagens; a segunda, o índice de rótulos de classe da imagem; e a terceira, o caminho relativo do arquivo de imagem. O índice de imagens na primeira coluna deve ser exclusivo em todas as imagens. O conjunto dos índices de rótulos de classe é numerado sucessivamente, e a numeração deve começar com 0. Por exemplo, 0 para a classe de cães, 1 para a classe de gatos, e assim por diante para as classes adicionais.

Este é um exemplo de um arquivo .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

Por exemplo, se as imagens de treinamento estiverem armazenadas em s3://<your_bucket>/train/class_dog, s3://<your_bucket>/train/class_cat e assim por diante, especifique o caminho para o canal train como s3://<your_bucket>/train, que é o diretório de nível superior dos seus dados. No arquivo .lst, especifique o caminho relativo de um arquivo individual chamado train_image_dog1.jpg no diretório de classes class_dog como class_dog/train_image_dog1.jpg. Também é possível armazenar todos os seus arquivos de imagem em um subdiretório dentro do diretório train. Nesse caso, use esse subdiretório para o caminho relativo. Por exemplo, s3://<your_bucket>/train/your_image_directory.

Treinar com o formato de imagem 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. Você precisa especificar ambos os canais de treinamento e de validação como valores para o parâmetro InputDataConfig da solicitação CreateTrainingJob. Ao usar esse formato, é necessário gerar um arquivo de manifesto do S3 contendo a lista de imagens e suas anotações correspondentes. O formato de arquivo de manifesto deve estar no formato linhas JSON, em que cada linha representa uma amostra. As imagens são especificadas usando a tag 'source-ref', que aponta para a localização do S3 da imagem. As anotações são fornecidas sob o valor do parâmetro "AttributeNames", conforme especificado na solicitação CreateTrainingJob. Elas também podem conter metadados adicionais sob a tag metadata, mas estas são ignoradas pelo algoritmo. No exemplo abaixo, os "AttributeNames" estão contidos na lista de referências de imagem e anotação ["source-ref", "class"]. O valor de rótulo correspondente é "0" para a primeira imagem e “1” para a segunda imagem:

{"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"}}

A ordem dos "AttributeNames" nos arquivos de entrada é importante ao treinar o algoritmo ImageClassification. Ele aceita dados redirecionados em uma ordem específica, com image primeiro, seguido por label. Portanto, os "AttributeNames" nesse exemplo são fornecidos com "source-ref" primeiro, seguido por "class". Ao usar o algoritmo ImageClassification com Manifesto aumentado, o valor do parâmetro RecordWrapperType deve ser "RecordIO".

O treinamento com vários rótulos também é compatível com a especificação de uma matriz de valores JSON. O hiperparâmetro num_classes deve ser definido para corresponder ao número total de classes. Existem dois formatos de rótulo válidos: multi-hot e class-id.

No formato multi-hot, cada rótulo é um vetor codificado multi-hot de todas as classes, em que cada classe leva o valor de 0 ou de 1. No exemplo a seguir, existem três classes. A primeira imagem é rotulada com as classes 0 e 2, enquanto a segunda imagem é rotulada apenas com a classe 2:

{"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]"}

No formato class-id, cada rótulo é uma lista dos IDs de classe, de (0, num_classes), que se aplicam ao ponto de dados. Em vez disso, o exemplo anterior seria parecido com isto:

{"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]"}

O formato multi-hot é o padrão, mas pode ser explicitamente definido no tipo de conteúdo com o parâmetro label-format: "application/x-recordio; label-format=multi-hot". O formato class-id, que é o formato produzido por GroundTruth, deve ser definido explicitamente: "application/x-recordio; label-format=class-id".

Para obter mais informações sobre arquivos manifestos aumentados, consulte Arquivos de Manifestos Aumentados em Trabalhos de Treinamento.

Treinamento incremental

Também é possível propagar o treinamento de um novo modelo usando os artefatos de um modelo anteriormente treinado com o SageMaker AI. Um treinamento incremental economiza tempo de treinamento quando você deseja treinar um novo modelo com dados iguais ou semelhantes. Os modelos de classificação de imagem do SageMaker só podem ser propagados com outro modelo de classificação de imagem integrado treinado no SageMaker AI.

Para usar um modelo pré-treinado, na solicitação CreateTrainingJob, especifique ChannelName como "modelo" no parâmetro InputDataConfig. Defina o ContentType para o canal do modelo como application/x-sagemaker-model. Os hiperparâmetros de entrada do novo modelo e do modelo pré-treinado que você transfere por upload para o canal do modelo devem ter as mesmas configurações para os parâmetros de entrada num_layers, image_shape e num_classes. Esses parâmetros definem a arquitetura da rede. Para o arquivo de modelo pré-treinado, use os artefatos do modelo compactados (no formato .tar.gz) processados pelo SageMaker AI. Você pode usar os formatos RecordIO ou de imagem para dados de entrada.

Inferência com o algoritmo de classificação de imagens

Os modelos gerados podem ser hospedados para inferência e oferecem suporte aos formatos de imagem .jpg e .png codificados como image/png, image/jpeg e content-type application/x-image. A imagem de entrada é redimensionada automaticamente. A saída são os valores de probabilidade para todas as classes codificados no formato JSON, ou no formato de texto JSON Lines para transformação em lote. O modelo de classificação de imagem processa uma única imagem por solicitação e, portanto, exibe apenas uma linha no formato JSON ou JSON Lines. Veja a seguir um exemplo de uma resposta no formato JSON Lines:

accept: application/jsonlines {"prediction": [prob_0, prob_1, prob_2, prob_3, ...]}

Para obter mais detalhes sobre treinamento e inferência, consulte as instâncias de bloco de anotações de amostra de classificação de imagens mencionadas na introdução.

Recomendação de instâncias do EC2 para o algoritmo de Classificação de imagens

Para classificação de imagens, oferecemos suporte às instâncias P2, P3, G4dn e G5. Recomendamos o uso de instâncias de GPU com mais memória para treinamento com grandes tamanhos de lote. Você também pode executar o algoritmo em configurações de várias GPUs e várias máquinas para treinamento distribuído. Tanto as instâncias de CPU (como C4) quanto as de GPU (P2, P3, G4dn ou G5) podem ser usadas para inferência.

Blocos de anotações de amostra de Classificação de imagens

Para ver um caderno de exemplo que usa o algoritmo de classificação de imagens do SageMaker AI, consulte Build and Register an MXNet Image Classification Model via SageMaker Pipelines. Para obter instruções sobre como criar e acessar instâncias do caderno Jupyter que você pode utilizar para executar o exemplo no SageMaker AI, consulte Instâncias de SageMaker notebook da Amazon. Depois de criar uma instância de caderno e abri-la, selecione a guia Exemplos do SageMaker AI para ver uma lista de todas os exemplos do SageMaker AI. Os exemplos de blocos de anotações de classificação de imagens estão localizados na seção Introdução aos algoritmos da Amazon. Para abrir um caderno, clique em sua guia Uso e selecione Criar cópia.