O blog da AWS
Detectando Anomalias em imagens com o Amazon Lookout for Vision (parte 1)
Thiago Couto, Arquiteto de Soluções Enterprise,
Rafael Almeida, Arquiteto de Soluções e
Davi Holanda, Arquiteto de Soluções
A detecção de anomalias é uma funcionalidade requerida em diversos setores e etapas da cadeia de produção. No varejo, por exemplo, saber sobre a má condição de uma embalagem ou produto evita prejuízos com mercadorias defeituosas que não podem ser comercializadas. Em setores como logística que a manutenção é um item crucial para o escoamento da carga, saber sobre a boa condição das peças que compõem locomotivas e caminhões é decisivo para evitar acidentes e otimizar os lucros. Na indústria como a automobilística, os benefícios se tornam ainda mais evidentes, garantindo qualidade na linha de produção.
Apesar de abrangente, criar um modelo de machine learning que detecte anomalias é uma tarefa custosa que requer um profundo conhecimento. Visando resolver esse problema a AWS lançou a família Amazon Lookout, uma série de serviços que detectam anomalias em equipamentos, como o Amazon Lookout for Equipment, em métricas de negócios e operações com o Amazon Lookout for Metrics e em imagens, com o Amazon Lookout for Vision.
Nessa série de blog posts, vamos explorar as funcionalidades de cada um desses serviços, começando pelo Amazon Lookout for Vision. A detecção de anomalias de fotos de peças por exemplo, é tarefa particularmente difícil, dado a complexidade necessária para um modelo eficaz. Nesse blog post vamos utilizar um dataset público do Kaggle, que pode ser encontrado neste link, para detectar anomalias em imagens de um impulsor. Nesse experimento vamos utilizar um subset dos itens da pasta “casting_data”, já categorizados entre normal (ok_front) e anormal (def_front) e teremos duas versões, uma para efeito demonstrativo via console que veremos abaixo e outra via código com Jupyter Notebook, disponível no GitHub.
Dataset e Labels
Para demostrar a funcionalidade via console, vamos usar imagens do arquivo dataset_reduzido.zip. Primeiro vamos até a página do Amazon Lookout for Vision, para esse post vamos utilizar a região Ohio (us-east-2), confirmamos a criação de um bucket do Amazon S3 para armazenar os arquivos e vamos clicar em “Create Project” para criarmos um projeto e iniciarmos nossa análise.
Com o projeto criado, vamos iniciar o upload de nossas imagens e classificá-las como normal ou anômala. Para isso, selecionamos a opção “Create dataset”, na tela seguinte selecionaremos “Create a single dataset” e “Upload images from your computer”. Para facilitar a demonstração usaremos um dataset via upload, na versão em código, utilizaremos buckets para referenciar as imagens com um dataset maior e vamos usar também um dataset para testes.
Vamos começar a realizar o upload das imagens, clique em “Add images”, clique em “
Choose files” e selecione as imagens da pasta “normal”, clique em “Upload images”. Para facilitar o processo de categorização (labeling) vamos fazer em duas etapas, uma para as imagens normais e outra para as imagens anômalas., na versão em código, essa identificação é feita baseada no nome da pasta.
Selecionamos as imagens da pasta “normal”. Com as imagens adicionadas, vamos adicionar as categorias, primeiro vamos em “Add labels”, clique em “Select all images on this page” e em “Classify as normal”, utilize a navegação para navegar pelas páginas e repita o processo de selecionar as imagens e classificar como normal até que todas as imagens estejam classificadas e clique em “Save changes”.
Agora realizaremos o mesmo processo para as peças consideradas defeituosas. Clique em “Actions”, “Add images to training dataset” e repetiremos o processo com a pasta anormal. Após upload concluído, selecionaremos “Unlabeled” no menu esquerdo, e repetiremos o processo de categorização navegando pelas páginas selecionando todas as imagens e clicando em “Classify as anomaly”.
Após esse processo, teremos 60 imagens rotuladas no total, sendo 30 na categoria “Normal” e 30 na “Anomaly”. Isso conclui a etapa de construirmos o dataset.
Treinando o modelo
Clicando em “Train model” e confirmando nas duas telas seguintes, nosso modelo vai iniciar seu treinamento. Isso pode demorar algum tempo.
Detectando anomalias
Após o treinamento do modelo finalizado podemos inspecionar a performance do modelo com os dados que enviamos ao serviço. Agora, vamos utilizar o modelo para fazer algumas detecções: clique em “Trial detections” e em “Run trial detection”, selecione as configurações como na imagem abaixo, os itens da pasta “validation” e clique em “Run trial detection”. Essa detecção pode demorar algum tempo.
Finalizada a detecção, vamos inspecionar os resultados. Incluímos 5 imagens de cada tipo, o nome define a qual tipo cada imagem pertence, o detalhamento mostra todas as 5 anomalias detectadas com sucesso.
Conclusão
Nessa primeira etapa dessa série de blog posts, vimos como utilizar Amazon Lookout Vision, via console ou código, para detectar anomalias utilizando imagens reais de um dataset público. A mesma abordagem pode ser utilizada em outras áreas para problemas similares. Para saber mais consulte os links abaixo:
Página oficial: https://aws.amazon.com/lookout-for-vision/
Definição de preço: https://aws.amazon.com/lookout-for-vision/pricing/
Documentação:https://docs.aws.amazon.com/lookout-for-vision/latest/developer-guide/what-is.html
Sobre o autor
Thiago Couto é arquiteto de soluções na AWS e atua no segmento Enterprise auxiliando clientes de Retail e CPG em suas jornadas para nuvem. Possui mais de 10 anos de experiência atuando em arquiteturas que englobam AI/ML, integrações, IoT e correlatos.
Davi Holanda é arquiteto de soluções na AWS e atua no segmento GreenField, auxiliando clientes de manufatura em suas jornadas para nuvem. Suas principais áreas de experiência são AI/ML, DevOps e desenvolvimento de aplicações.
Rafael Almeida é arquiteto de soluções na AWS e atua no segmento de Small and Medium Business (SMB), amparando clientes diversos em suas jornadas na AWS. Suas principais áreas de experiência são AI/ML, serverless e desenvolvimento de aplicações para a web.