Um ‘bastidores’ de como um produto complexo de visão computacional é desenvolvido:
● resolver o problema de execução de um modelo de detecção de objetos em hardware fraco
● lidar com resultados falsos positivos e um conjunto de dados desequilibrado
● ensinar uma máquina a distinguir espécies de aves de aparência quase idêntica
A visão computacional capturou o interesse de empreendedores em todo o mundo, e por um bom motivo: as capacidades da moderna tecnologia de IA transformam ideias antes impossíveis em produtos reais.
A detecção e classificação de objetos em fotos e vídeos encontrou aplicações em muitas áreas diferentes e em centenas de sistemas – desde câmeras de segurança com reconhecimento facial integrado e detecção de doenças com base em varreduras de raios X até aplicativos móveis simples.
Mas chega de introdução, neste artigo eu queria compartilhar os 'bastidores' de como um produto de visão computacional é desenvolvido, especialmente um produto complexo.
Tive a oportunidade de trabalhar no Birdsy – um aplicativo de reconhecimento de pássaros para pessoas que desejam ver quem visita seus quintais enquanto não estão olhando.
Birdsy é um aplicativo complexo baseado em IA com detecção e classificação de objetos em tempo real que precisa ser capaz de rodar em hardware fraco, detectar tipos de pássaros e sexo com alta precisão.
Diante de tudo isso, o caminho desde a ideia inicial até a publicação do aplicativo nas lojas de aplicativos foi complicado — e cativante ao mesmo tempo.
Enfrentamos muitos obstáculos - tanto do ponto de vista comercial quanto de desenvolvimento - que decidi compartilhar em um só lugar para ajudar empreendedores e desenvolvedores de IA que possam estar enfrentando o mesmo projeto.
A tarefa em mãos
As aves tiveram milhões de anos de evolução para se integrarem perfeitamente ao seu ambiente e evitarem os predadores e, neste caso, os observadores de aves, tornando mais difícil para elas admirar a vida selvagem.
Embora observar certas espécies de pássaros de frente para… o bico possa ser problemático, monitorá-los através de uma câmera de vídeo no conforto da sua casa é uma ótima maneira de desfrutar de nossos amigos alados, especialmente se a IA eliminar a necessidade de olhar horas de vídeos e enviar você alerta quando um pássaro entra no campo de visão da câmera, detectando automaticamente de que espécie se trata.
Existem duas partes no Birdsy:
Detecção de objetos — uma rede neural responsável por detectar a presença de um pássaro ou mamífero
Classificação de objetos — uma rede neural responsável por determinar quais espécies de aves ou mamíferos foram capturadas
Câmeras de baixa qualidade para detecção de objetos
Para tornar o serviço mais acessível e fácil de usar, qualquer câmera pode ser utilizada para observação de aves. Foi aqui que nos deparamos com o primeiro problema: câmeras de baixa qualidade, pois são as mais acessíveis e as mais difundidas.
Embora o “sem limite de câmera” seja ótimo para os usuários, ele representa um desafio para nós, pois o modelo de detecção de objetos é executado usando o chipset da câmera.
Onde alguém consegue um bom negócio, outros ficam com a parte mais curta, neste caso, 'outros' são nossos desenvolvedores de currículos. Trabalhar com uma câmera barata significa trabalhar com um chipset barato que torna impossível usar a arquitetura de rede neural padrão.
Em comparação com um padrão ouro topo de linha de câmeras de vídeo de visão computacional (NVIDIA Jetson Nano), que permite usar cerca de 120 camadas de YOLO v4 padrão, as câmeras com as quais tivemos que trabalhar permitiam apenas 22 camadas.
Enquanto uma rede neural YOLO v4 completa fornece ótimos resultados de reconhecimento, uma versão simplificada tem um desempenho ruim. Testamos ambos e ficamos desagradavelmente surpresos com o quão baixa era a profundidade do modelo ao executá-lo com um chipset barato.
Testando YOLO v4 padrão vs Reduzido
Começamos treinando o modelo YOLO v4 padrão e testando-o no conjunto de dados do cliente. Os resultados que alcançamos foram satisfatórios - 95% mAp, o que no mundo da visão computacional é mais que suficiente para lançar um modo em produção.
Depois de retreinar o modelo para se adequar aos parâmetros da câmera, a qualidade da detecção caiu significativamente. Mas onde as máquinas falham, os humanos avançam.
Testamos a rede neural em dados de teste e avaliamos visualmente falsos positivos e falsos negativos. Isto destacou onde a rede carecia de conhecimento e onde cometeu mais erros.
Não somos nada além de mamíferos ou falsos positivos
A rede estava ansiosa para detectar as pessoas, especialmente as mãos das pessoas, como animais (e não culpamos isso, afinal, os humanos SÃO animais). Embora, do ponto de vista biológico, isto esteja correto, o utilizador final está mais interessado em observar as aves do que os seus vizinhos, por isso tivemos que trabalhar para ensinar a rede a ignorar as pessoas e a concentrar-se nas aves e nos mamíferos.
Para fazer isso, adicionamos exemplos negativos, incluindo fotos de pessoas em vários ângulos, bem como de mãos humanas.
O que se esconde no escuro
As câmeras possuem dois modos: modo diurno normal, que produz imagens coloridas, e modo infravermelho noturno, que produz imagens em preto e branco. Quando a câmera mudou para infravermelho, o modelo produziu muitos falsos positivos:
folhas de árvores se movendo ao vento
insetos, como mariposas, que são atraídos por uma câmera quente
fontes
Os usuários não ficariam nada felizes em serem acordados por uma notificação, ficariam entusiasmados ao olhar para uma coruja ou uma raposa, mas acabariam vendo a gravação de uma mariposa batendo seu corpo contra a lente de uma câmera.
Para reduzir ao mínimo as interrupções do sono, coletamos casos de falsos positivos em ambientes noturnos e os marcamos manualmente.
Instagram vs Realidade
Já ouviu falar que as redes sociais são chamadas de ‘reel de destaque’, onde as pessoas apresentam a melhor versão de si mesmas? Quem diria que o mesmo poderia ser verdade para os animais selvagens.
Fotos de pássaros que podem ser obtidas em fontes abertas, como Imagens do Google e vídeos do Youtube, geralmente são de alta qualidade, muito nítidas e retratam os espécimes no seu melhor, olhando para a câmera ou pelo menos posicionados de frente, sem nada entre o pássaro e a câmera obstruindo a visão.
A realidade nem sempre é tão bonita. As câmeras produzem imagens de baixa qualidade que podem dificultar a compreensão do que está acontecendo até mesmo para o olho humano, condições climáticas adversas como chuva, neve ou poeira podem obstruir a visão e temos certeza de que os pássaros percebem quando alguém deseja capturá-los e posicionar-se da maneira mais ridícula possível.
O conjunto de dados fornecido pelo cliente (constituído por imagens compartilhadas encontradas na Internet) não foi muito útil para este projeto.
Precisávamos coletar um conjunto de imagens de pássaros em condições reais usando as câmeras do cliente para mostrar ao modelo como realmente são os pássaros, e não como eles são apresentados nas redes sociais.
O que temos agora
Então, depois de fazer todos os itens acima:
passando manualmente por todas as instâncias em que a rede estava errada
ensinando a rede a ignorar as pessoas e não detectá-las como pássaros ou mamíferos
trabalhando com imagens em preto e branco e falsos positivos
coletar um conjunto de dados de aves em condições reais, sob vários ângulos e em diferentes condições climáticas
Conseguimos atingir um mAP de 97,5% para detecção de objetos. Este é um resultado muito alto para um modelo de visão computacional, já que a regra não escrita para qualquer modelo de CV em produção é ter mais de 94% de mAP.
Alcançando a perfeição (quase)
Embora os resultados que alcançamos agora sejam mais que suficientes para serem utilizados no produto final, ainda há espaço para melhorias.
a rede confunde flores com pássaros
a visão dos pássaros por trás às vezes ainda é um mistério
pássaros parcialmente cobertos por objetos aleatórios
pássaros perto da câmera
Após a coleta de imagens suficientes para cada grupo, esperamos que o mAP aumente e chegue a 98,5%.
Modelo de classificação de imagens
O próximo passo para conhecer os visitantes do seu quintal é passar a imagem com um pássaro para um modelo de classificação de objetos. Seu objetivo é reconhecer as espécies de aves e seu sexo.
Como algumas espécies de aves vivem exclusivamente em determinados continentes, decidimos criar dois modelos - um para quem vive na América do Norte e outro para quem vive na Europa.
Um passo de cada vez: uma lição sobre redes neurais de múltiplos estágios
Inicialmente, o problema da classificação dos objetos foi resolvido através de uma abordagem “frontal”: foram mostradas à rede fotos de todas as diferentes espécies, tanto machos como fêmeas, a partir das quais se tentou aprender como são e como diferem umas das outras. outro.
Isto resultou em pontuações de precisão muito baixas, ou seja, a rede cometeu muitos erros ao identificar espécies de aves e mamíferos.
A rede estava tentando aprender muitos aspectos ao mesmo tempo. Muitas espécies de aves são muito semelhantes entre si e diferem umas das outras por uma única mancha de penas de cores diferentes ou por um bico de formato diferente.
Reter toda esta informação, juntamente com a aparência dos diferentes sexos da mesma espécie, é demasiado difícil em determinadas circunstâncias. A rede frequentemente misturava espécies de aves enquanto determinava corretamente o tipo de ave mais amplo.
Por exemplo, a diferença entre uma toutinegra encapuzada e uma toutinegra do Kentucky em uma mancha de penas pretas:
A rede rotularia uma toutinegra encapuzada como toutinegra do Kentucky, produzindo um resultado errado, mas sendo geralmente correto: ambas SÃO toutinegras. Por uma questão de tempo, o cliente decidiu que era mais importante detectar o tipo geral de ave do que a sua espécie específica, e foi aí que começámos.
Após a avaliação do modelo, decidimos implementar uma abordagem em vários estágios:
todas as espécies de aves foram agrupadas em categorias mais gerais: águias, pardais, corvos, pombos, etc.
a rede determinaria primeiro o tipo geral de ave
o segundo passo é detectar quais espécies são
a última seria determinar se a ave é macho ou fêmea
Ao agrupar as espécies de aves, conseguimos diminuir o número de classes de 98 para 49, o que melhorou muito a pontuação de precisão, pois a rede simplesmente não tinha tantas classes para escolher.
A prática leva à perfeição, mesmo para máquinas
Ao se deparar com um novo conceito, você lê livros ou assiste a vídeos educativos para compreendê-lo. Se você falhar, peça ao seu amigo que lhe explique ou participe de um seminário sobre o assunto. Em outras palavras, você tenta acumular mais informações sobre ele para entendê-lo melhor.
O mesmo vale para redes neurais. Quanto melhor você precisar para entender a aparência de uma toutinegra, mais imagens de toutinegras você precisará para mostrá-la. Quanto mais dados forem analisados, melhores serão as pontuações de precisão.
A abordagem de vários estágios que escolhemos não apenas melhorou a precisão do modelo de classificação de objetos, mas também tornou possível analisar o conjunto de dados e determinar onde faltavam dados de aprendizagem na rede.
O problema do patinho feio
Após o lançamento do modelo de classificação de objetos, ficamos surpresos ao receber resultados muito piores do que os testes nos mostraram: o modelo não conseguiu determinar a espécie ou tipo de ave corretamente.
O problema era mais profundo do que isso: nosso desenvolvedor de visão computacional responsável por todo o projeto, que aprendeu sozinho todas as espécies de pássaros enquanto trabalhava nele, também não conseguiu determinar o que eram os pássaros quando recebeu as imagens rotuladas incorretamente pela rede .
Descobriu-se que julho não é a melhor época para lançar um modelo de classificação de aves, pois é a época em que os pássaros adolescentes aprendem a voar e a deixar seus ninhos.
Lembra da história do patinho feio? Bem, é verdade para a maioria dos pássaros, os filhotes não se parecem em nada com pássaros adultos, e é difícil saber que pássaro você está olhando se ainda for jovem.
Coletamos imagens de aves jovens durante o verão e planejamos treinar a rede de classificação para determinar as diferentes espécies de aves em diferentes idades.
O trabalho em equipe faz a rede funcionar
Os observadores de pássaros são um grupo apaixonado, sabem identificar um pássaro pelo formato de sua única pena. Eles possuem o conhecimento que a nossa rede de classificação sonha ter, então por que não juntar os dois e formar uma aliança de amor aos pássaros que o mundo nunca viu antes?
Atualmente, a rede de classificação não informa apenas ao usuário a espécie de ave, mas também mostra o grau de confiança junto com outras suposições.
O usuário pode confirmar a suposição da rede ou corrigi-la, ajudando-nos assim a treiná-la – um pássaro de cada vez. Depois de executar o sistema de feedback do usuário por 3 meses, coletamos mais de 20 mil imagens. Estes dados são inestimáveis para nós, uma vez que as fotos são tiradas em condições reais (mau tempo, noite, etc.) e são marcadas por especialistas.
Quando você olha para o abismo, o abismo gorjeia de volta para você
É importante notar que durante este projeto, nós mesmos nos tornamos especialistas em aves. Observar os pássaros o dia todo, enquanto essencialmente educa uma criança virtual sobre todas as pequenas diferenças entre os diferentes tipos de pardais, torna a pessoa um membro platina instantâneo da comunidade de observação de pássaros.
Se tudo mais falhar, os membros da nossa equipe de currículos poderão facilmente encontrar-se na ornitologia.
Falando sério, olhando milhares de imagens de pássaros, seja para marcação de conjuntos de dados ou analisando onde a rede comete mais erros, nos aprofundamos neste projeto e saímos do outro lado não apenas com um monte de conhecimento sobre pássaros, mas uma melhor compreensão de como funcionam os sistemas complexos de reconhecimento e classificação de imagens, como melhor implementá-los, como analisar um grande conjunto de dados e encontrar os seus pontos fracos.
Este projeto foi inestimável para nós como uma oportunidade de pesquisar e trabalhar com as mais recentes tecnologias de visão computacional, trabalhar com feedback dos clientes em tempo real e aprimorar nossas habilidades de resolução de problemas ao trabalhar com código desatualizado.