Se você perdeu o lançamento do Call for Code 2021, sem problemas! Saiba mais clicando aqui

Introdução à visão computacional

Este artigo faz parte das linhas de aprendizagem da Introdução ao IBM Maximo Visual Inspection.

Visão geral

Existem câmeras em todos os lugares. Vídeos e imagens se tornaram um dos conjuntos de dados mais interessantes para a inteligência artificial. Em particular, o deep learning está sendo usado para criar modelos para visão computacional e é possível treinar esses modelos para permitir que seus aplicativos reconheçam o que uma imagem (ou vídeo) representa.

Objetivos do aprendizado

O artigo cobre os fundamentos básicos da visão computacional e explica como você pode usar a visão computacional em seus aplicativos. Você aprenderá sobre:

  • Classificação de imagem
  • Detecção de objeto
  • Rastreamento de objeto em vídeos
  • Criação de modelos customizados
  • Como usar seu modelo
  • Casos de uso de exemplo

Definição de termos comuns

Termo Definição
Conjunto de dados Em nosso caso, um conjunto de dados é uma coleção de imagens e vídeos. Um exemplo de conjunto de dados seria imagens de carros.
Modelo Um modelo é um conjunto de algoritmos ajustados que produz uma saída prevista. Os modelos são treinados com base na entrada que é fornecida por um conjunto de dados para classificar imagens ou quadros de vídeo, ou localizar objetos em imagens ou quadros de vídeo.
Categoria Uma categoria é usada para classificar uma imagem. A imagem pode pertencer apenas a uma única categoria. Um exemplo de categoria para um conjunto de dados que contém carros seriam fabricantes de carros (por exemplo, Toyota, Honda, Chevy ou Ford).
Objeto Um objeto é usado para identificar itens específicos em uma imagem ou em quadros específicos em um vídeo. É possível rotular diversos objetos em uma imagem ou em um quadro em um vídeo. Exemplos de objetos em uma imagem de carros podem ser rodas, faróis ou para-brisas.

Fundamentos básicos da visão computacional

Para entender a visão computacional, comece pela classificação de imagem e, em seguida, inicie a a detecção de objeto. Em ambos os casos, você tem infinitas possibilidades com relação à aplicação desses recursos em seus aplicativos usando seus próprios modelos customizados. Alguns aplicativos avançados, como a detecção de ações ou o rastreamento de objetos em um vídeo, são desenvolvidos com base nesses fundamentos básicos.

Classificação de imagem

Para a classificação de imagem, você deseja criar uma solução que possa examinar uma imagem e classificá-la adequadamente de acordo com seu modelo. Um modelo pode ser tão simples quanto o famoso modelo hotdog/não-hotdog, que é um modelo binário no qual você deseja saber apenas se possui uma imagem de hotdog. Você pode achar que a aplicação desse modelo é limitada (e ela é), mas se considerar todas as decisões if/else que os aplicativos podem tomar com base em simples modelos binários, você encontrará vários casos de uso para modelos binários específicos do aplicativo. Mesmo algo tão sofisticado quanto um teste médico geralmente é reduzido a uma simples resposta positiva/negativa, que pode ser realizada com a classificação de imagem.

A demo a seguir mostra o que é possível fazer com um vídeo e um modelo simples. Observe que, em vez de imagens, ela foi criada usando um vídeo, que é apenas uma sequência de imagens (quadros). O quadro atual é reconhecido como um hotdog ou não.

hotdognothotdog

Exemplo de aplicativo de classificação de imagem binária

Muitos casos de uso de classificação de imagem não são binários. Para esses casos de uso, você treina um modelo para reconhecer diversas categorias. Além de retornar a categoria escolhida, uma porcentagem de confiança é retornada. Essa porcentagem de confiança é usada para selecionar a categoria mais provável, mas também é possível usar um limite para rejeitar até mesmo a categoria mais provável quando a confiança é muito baixa para ser confiável.

Por exemplo, neste tutorial de classificação de imagem, um modelo é treinado para categorizar uma imagem de um pássaro. O aplicativo Swift de exemplo a seguir é executado em um iPhone e classifica uma figura de uma gaivota como gênero larus com 100% de confiança.

birdclassifierapp

Aplicativo de exemplo de classificação multiclasse

Detecção de objeto

A detecção de objeto é semelhante à classificação de imagem, exceto que com a detecção de objeto a imagem pode conter vários objetos, que são localizados e classificados. Neste padrão de código de detecção de objeto, um modelo é treinado não apenas para classificar imagens de Coca-Cola, mas também para localizar cada garrafa dentro da imagem.

Na imagem a seguir, você vê que três categorias diferentes de produtos Coca-Cola foram reconhecidas. Além de retornar os rótulos e a confiança, ele fornece coordenadas que permitem que o aplicativo desenhe caixas delimitadoras ao redor de cada objeto identificado.

objectdetectionapp

Aplicativo de exemplo de detecção de objeto

A detecção de objeto é usada em uma ampla variedade de casos de uso onde o interessante não é uma classificação única que descreva a imagem inteira, mas sim poder ter vários objetos de diferentes categorias na imagem. Dar a um aplicativo a capacidade de identificar, localizar e contar os objetos aumenta as possíveis aplicações desse tipo de visão computacional.

Rastreamento de objeto em vídeos

Ao usar a detecção de objeto em vídeos, você geralmente deseja rastrear objetos de um quadro para o seguinte. A detecção de objeto inicial pode ser feita extraindo um quadro do vídeo e detectando objetos no quadro. Além de contar objetos e localizar cada objeto, rastrear os objetos à medida que eles movem de um quadro para outro adiciona outra dimensão ao que pode ser feito.

O exemplo a seguir mostra como o padrão de código de rastreamento de objeto usou a detecção de objeto juntamente com o rastreamento de objeto para tomar notas de um vídeo e contar os carros.

contando carros

Aplicativo de exemplo de detecção e rastreamento de objeto

Criando modelos customizados

Agora que eu discuti os fundamentos básicos da classificação de imagem e da detecção (e rastreamento) de objeto, vamos discutir como usar deep learning para criar esses aplicativos, bem como os aplicativos para seus próprios casos de uso. Na prática, isso é muito mais fácil do que parece.

Muito trabalho tem sido feito para usar deep learning e redes neurais convolucionais para reconhecer objetos em imagens. Os modelos existentes já entendem como reconhecer bordas, formas, padrões e assim por diante. Nós usamos o que chamamos de transferir aprendizado para alavancar os modelos existentes e retreiná-los com nossos próprios conjuntos de dados.

Fornecendo exemplos

Para o exemplo do classificador de pássaros, tudo o que precisamos é de um bom conjunto de exemplos de imagens de cada tipo de pássaro que desejamos reconhecer. Usando a transferência de aprendizado e esse novo conjunto de dados com os resultados esperados conhecidos, podemos criar um novo modelo para classificação de imagem de pássaro.

Se você estiver usando o Maximo Visual Inspection, a interface com o usuário permitirá que você faça upload e classifique suas imagens e, em seguida, treine um modelo apenas pressionando um botão. É fácil assim. Várias outras estruturas permitem fazer a mesma coisa com um pouco de código. Não é difícil copiar seus códigos de exemplo, trocar por seu próprio conjunto de dados e mapear suas imagens para categorias customizadas, mas ter uma IU fácil de usar é uma boa maneira de começar.

A detecção de objeto é semelhante à classificação de imagem, mas os objetos também precisam estar localizados no conjunto de dados que você usa para treinamento. Para criar um modelo de detecção de objeto, é necessário fornecer imagens e o local (por exemplo, coordenadas) de cada objeto em cada imagem.

Novamente, o Maximo Visual Inspection fornece uma IU para facilitar e nós a usaremos no exemplo a seguir. Qualquer que seja a estrutura usada, você precisará de uma maneira para fazer upload das imagens e fornecer um rótulo e coordenadas para cada objeto na imagem. A rotulagem para a detecção de objeto geralmente é mais demorada do que a classificação de imagem. Além disso, o tempo de computação necessário para treinar um modelo de detecção de objeto geralmente é significativamente maior. Usar GPUs e os algoritmos mais recentes ajuda a encurtar o tempo de treinamento (o que permite que conjuntos de dados maiores e melhores sejam usados para criar modelos mais precisos).

A imagem a seguir mostra qual é a aparência de uma rotulagem para detecção de objeto. Nesse exemplo do Maximo Visual Inspection, o conjunto de dados é criado extraindo quadros de um vídeo. Em seguida, carros em uma seleção de quadros são rotulados manualmente arrastando uma caixa ao redor de cada carro. Após algumas rotulagens manuais, a rotulagem automática e o aumento de dados são usados para multiplicar seus esforços manuais.

identificação manual

Rotulagem manual

O Maximo Visual Inspection foi desenvolvido com tecnologia de software livre. Se você deseja tirar vantagem da IU fácil de usar ou prefere escrever algum código e trabalhar mais diretamente com as APIs de software livre, é possível executar no Power Systems com GPUs para melhorar seu tempo de treinamento e criar melhores modelos mais rápido.

Treinamento, validação e teste

Treinar um modelo é essencialmente o processo de iterar sobre imagens de exemplo e ajustar pesos para melhorar a precisão de um algoritmo de predição. Eu não entrarei nos detalhes de deep learning e redes neurais convolucionais aqui, mas é possível usar deep learning por meio da transferência de aprendizado sem se preocupar muito com os algoritmos internos. Entretanto, há algumas coisas que você deve entender para criar e manter um modelo preciso.

O conjunto de dados é dividido para separar o treinamento da validação. Isso pode ser feito automaticamente (por exemplo, ao usar o Maximo Visual Inspection). O motivo para manter isso em mente é que o treinamento pode levar ao super ajuste. Como as iterações melhoram a precisão ao longo do treinamento de dados, eventualmente, o modelo pode se tornar “muito preciso”. Ele reconhecerá as imagens que ele usou para treinamento com praticamente 100% de precisão, mas não será bom em reconhecer coisas em novas imagens. Isso é chamado de super ajuste. Como você deseja um modelo que seja mais robusto do que isso, o conjunto de validação é usado para validar o treinamento e evitar o super ajuste.

Após executar o treinamento e a validação durante um número especificado de intervalos (talvez cancelando antecipadamente se a precisão não estiver melhorando), você obterá um modelo. Geralmente, você também obtém um relatório da precisão do modelo. Tenha em mente que essa precisão é referente apenas aos dados fornecidos.

Embora alguma validação faça parte do treinamento, é sempre uma boa ideia (e geralmente muito satisfatória) usar alguns dados de teste adicionais e ver o quão bem seu modelo trabalha com imagens que não fizeram parte do conjunto de dados de treinamento (ou validação). Geralmente, você constata que precisa avaliar continuamente seu modelo com novos dados e retreinar o modelo com um conjunto de dados aprimorado, conforme necessário.

Usando seu modelo

Os exemplos anteriores mostraram várias aplicações que demonstram a utilização de uma imagem de entrada e de um modelo customizado para produzir um resultado (classificação de imagem ou detecção de objeto). Inferência é o termo usado quando você pega a entrada e infere sua categoria ou seus objetos. Isso é realizado usando o modelo. O treinamento leva um longo tempo, mas após ele ser concluído, o modelo é otimizado e está pronto para ser usado para inferência. Os detalhes variam por estrutura, linguagem e plataforma, mas o modelo é implementado (ou carregado) e uma API é disponibilizada para o código do aplicativo chamar. Com a API, o código do aplicativo pode pegar uma imagem, obter resultados de inferência e, em seguida, escolher como exibir os resultados.

Casos de uso de exemplo

Eu mostrei alguns exemplos, e já mencionei que as possibilidades são infinitas, mas vale a pena listar alguns casos de uso de exemplo para que você reflita sobre como pode aplicar a visão computacional.

  • Automotivo: monitore interseções ocupadas em busca de incidentes de quase falha
  • Bens de consumo: monitore a qualidade ou a quantidade do produto nas prateleiras
  • Assistência médica: detecção de melanoma em imagens dermoscópicas
  • Manufatura: contagem e classificação de itens em uma esteira
  • Mídia: analise a efetividade da inserção de uma publicidade
  • Energia: inspeção remota da infraestrutura usando drones

Para obter mais informações sobre esses e outros casos de uso, consulte casos de uso do Watson Machine Learning e do IBM Maximo Visual Inspection.

Resumo

Este artigo é a primeira parte da linha de aprendizagem da Introdução ao IBM Maximo Visual Inspection. Continue com a linha de aprendizagem para aumentar seus conhecimentos técnicos com tutoriais práticos e código de exemplo. Para continuar com a linha de aprendizagem do Maximo Visual Inspection, leia o próximo artigo, Introdução ao IBM Maximo Visual Inspection.