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 é o RecordIO
nota
Para manter melhor interoperabilidade com as estruturas de deep learning existentes, ele se difere dos formatos de dados protobuf comumente usados por outros algoritmos do Amazon SageMaker.
Para obter mais informações sobre as redes convolucionais, consulte:
-
Deep residual learning for image recognition (Deep residual learning para o reconhecimento de imagens)
Kaiming He, et al., 2016 IEEE Conference on Computer Vision and Pattern Recognition
Tópicos
- Interface de entrada/saída para o algoritmo de classificação de imagens
- Recomendação de instâncias do EC2 para o algoritmo de Classificação de imagens
- Blocos de anotações de amostra de Classificação de imagens
- Como funciona a classificação de imagens
- Hiperparâmetros de Classificação de imagens
- Ajustar um modelo de classificação de imagens
Interface de entrada/saída para o algoritmo de classificação de imagens
O algoritmo de classificação de imagens do SageMaker oferece suporte para 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, e oferece suporte ao tipo de conteúdo RecordIO (application/x-recordio
) para treinamento no modo Pipe. No entanto, você também pode treinar no modo de Pipe usando 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
O SageMaker lê os dados de treinamento e validação separadamente de canais diferentes, portanto, você deve 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'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
Você também pode propagar o treinamento de um novo modelo usando os artefatos de um modelo anteriormente treinado com o SageMaker. 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.
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. 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
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 um caderno de exemplo que usa o algoritmo de classificação de imagens do SageMaker, consulte Crie e registre um modelo de classificação de imagem do MXNet por meio do Pipelines do SageMaker