Visão computacional: a máquina reconhece, mas não entende o que está vendo…
Temos uma tendência a antropomorfizar muitas tecnologias e a IA, pelo próprio nome é emblemático. Mas, um algoritmo de Machine Learning (ML) não pensa como nós, e colocarmos a palavra “inteligência” no processo de processamento de diversas fórmulas matemáticas me parece meio descabido.
Vamos pegar um exemplo simples, mas de uso bastante comum em ML. Reconhecimento de imagens. Quando nós vemos uma foto, conseguimos captar seu contexto e até imaginar uma história em torno dela. Podemos supor o que aconteceu antes da foto e até prever o que provavelmente acontecerá depois. Na prática, a foto é um conjunto de pixels, mas que nossos olhos e cérebro consegue contextualizar em um contexto com local, objeto, pessoas, relacionamentos, emoções e ações. Nós olhamos, vemos e entendemos o contexto.
As máquinas são diferentes. Indiscutivelmente que o campo denominado de visão computacional tem evoluído de forma impressionante. Os sistemas de ML conseguem hoje reconhecer com muita eficácia determinados objetos, desde que esses objetos tenham sido alvo de seu treinamento. Mas, o que para nós é muito fácil, como reconhecer um objeto e entender o contexto, é uma tarefa muito difícil para as máquinas. Elas conseguem ver, mas não entendem.
Por exemplo, imaginemos uma foto de cachorro. Uma criança que já viu algumas poucas fotos de cachorros e/ou viu alguns na rua, é capaz de reconhecer um cachorro na foto, mesmo que de uma raça, tamanho e cor que ele nunca tenha visto ou até mesmo que não esteja com todo o corpo visível. Ela consegue reconhecer o cachorro na foto mesmo que ele esteja debaixo da chuva, todo molhado ou brincando no parque, de dia ou de noite, em movimentos diversos.
A máquina recebe pixels que constitui a foto. Sem compreensão do todo, ela tem que aprender a separar pixels que são cachorros dos que não são. E apreender a reconhecer o animal em todas as circunstâncias acima. Como os algoritmos de ML são fórmulas matemáticas, eles precisam transformar toda a foto em uma matriz de pixels, representados por números.
Para ser capaz de reconhecer um cachorro o algoritmo precisa ser exposto a um grande número de fotos, em todas as possíveis combinações. A cada imagem o algoritmo classifica se a figura é ou não um cachorro e o grau de confiança que tem na resposta. Com o volume de treinamento, ele vai se refinando e se ajustando para obter maior assertividade na resposta. Como a máquina não tem bom senso, mesmo que tenha uma assertividade de 90%, a cada resposta não sabemos se ela se encaixa nos 90% de acerto ou nos 10% de erro, e esse erro pode ser bem grotesco, como apontando um objeto qualquer como cachorro. A razão é simples: o padrão de pixels que ele conseguiu identificar se assemelha ao padrão de pixels daquele objeto, qualquer que seja ele.
Como exemplo, vamos analisar a figura abaixo. Nós reconhecemos um ônibus escolar americano mesmo que não o tenhamos visto fisicamente, mas como o vimos em um filme sabemos reconhecê-lo, mesmo em posições diversas. Mas o algoritmo pode classificá-lo com um caminhão de lixo ou um limpa-neve (snowplow) pois para ele o padrão de pixels de um ônibus tombado se assemelha mais a um limpa-neve.
Por isso, muitas vezes algoritmos de veículos que tentam ser autônomos não reconhecem placas de “Pare” alteradas com algumas pichações e continuam em velocidade nos cruzamentos.
A área de visão computacional não é recente, mas com advento de imensos data sets para treinamento, como ImageNet e aumento exponencial da capacidade computacional, tornou-se factível desenvolver-se algoritmos mais sofisticados, com diversas camadas de redes neurais, o chamado Deep Learning. O ImageNet foi criado com um grande volume de fotos, rotulados por humanos, através de serviços como Amazon Mechanical Turk. O Mechanical Turk é um marketplace para contratação de humanos para tarefas que requeiram inteligência humana, como reconhecer e rotular cachorros em fotos. Essas imagens são então armazenadas no ImageNet e o data set é usado para treinamento dos algoritmos. A apresentação “Where have we been? Where are we going?” feita pelos seus criadores, Li Fei-Fei e Jia Deng, de 2017, descreve seu propósito e criação. Vale a pena dar uma olhada.
O ImageNet criou em 2010 um sistema de competições que avalia a evolução dos algoritmos, chamado “ImageNet Large Scale Visual Recognition Challenge”. Os competidores têm acesso a um data set de treinamento e uma lista de possíveis categorias referentes às imagens. A competição se traduz na assertividade do algoritmo em reconhecer as imagens. Algumas fotos contém apenas um objeto e outras contém vários objetos, incluindo um que faz parte da categoria selecionada para o teste. O resultado é medido pela assertividade em identificar cinco categorias em cada imagem e se pelo menos uma for corretamente apontada, o algoritmo é considerado como tendo acertado o objeto. Este processo é chamado de métrica de acurácia “top-5”. No link “Image Classification on ImageNet” podemos ver a evolução dos algoritmos no top-5 e no top-1, esse mais preciso, onde o algoritmo tem que identificar com precisão o objeto. No top-5 vemos que o nível de acerto subiu de 75% em 2011 para 99% em 2022. No top-1, passou de 50% em 2011 para o patamar de 90%, estacionando nos últimos dois anos. Interessante observar o salto de acurácia no top-5 em torno de 2013, com o uso de redes convulacionais (CNN), com o AlexNet. Com oito camadas, o AlexNet mostrou que Deep Learning (DL) poderia tornar realmente factível o reconhecimento de imagens por computador. Com isso, podemos usar os sistemas de DL aplicados à visão computacional para criarmos soluções muito uteis para as empresas e sociedade, que vão desde reconhecer amigos nas fotos à ajudar médicos a identificar sinais de câncer em seres humanos.
Como visão computacional é instigante, a cada avanço na área, a mídia faz estardalhaço, até porque precisa chamar atenção para se vender. Aí vemos um certo exagero, do tipo “IA passa a ser mais eficaz que os seres humanos em reconhecimento de imagens”. Por exemplo, em 2015, no entusiasmo, o jornal inglês Guardian publicou a manchete “Computers now better than humans at recognising and sorting images”.
Mas, se olharmos mais detalhadamente vemos alguns senões. Quando lemos uma notícia que a máquina identificou corretamente um objeto em uma competição tipo ImageNet, pensamos de imediato que dada uma imagem de um gato, o sistema acertadamente o reconheceu. Mas, no top-5, a identificação correta significa que apenas a categoria gato foi identificada entre as 5 primeiras categorias, que podem incluir objetos bem diferentes como facas, bola de boliche e assim por diante. Mesmo que o sistema considere ser gato a quinta opção, ele é pontuado como tendo acertado. A validade mesmo só acontece quando se analisa o top-1. Como vimos, no top-1 o nível de assertividade é mais baixo que no top-5.
No caso da reportagem, a afirmativa “melhor que humanos” também é muito questionável, pois a comparação foi feita com uma única pessoa, um então estudante de computação, que resolveu fazer um teste para saber se poderia se comparar a um sistema de DL. A experiência dele está em seu blog, em um post de 2014, “What I learned from competing against a ConvNet on ImageNet”.
Um outro aspecto pouco lembrado das caraterísticas dos sistemas de DL é como ele é treinado e responde a esse treinamento. Não tem nada a ver com o nosso aprendizado humano. Por exemplo, quando um humano diz que viu um cachorro em uma foto, é porque ele realmente viu o cachorro. Em muitos sistemas de DL, quando ele diz cachorro, pode ser que ele considerou que um outro objeto na imagem, como uma bola tenha sido associado por ele em seu treinamento à cachorro e, portanto, ele responde cachorro. É uma correlação e não o reconhecimento direto do objeto na imagem. O ImageNet, na competição, procurou eliminar essa ambiguidade, marcando o objeto em caixas ou círculos (desenhados pelos humanos via Mechanical Turk…). Com isso, o desempenho dos algoritmos melhorou muito, pois o treinamento e os ajustes dos parâmetros passaram a ser mais adequados. Mas, nem todos os algoritmos estão em um nível tão elevado e isso muitas vezes leva a resultados decepcionantes quando colocados em produção.
Obviamente para um sistema ser realmente inteligente, precisa evoluir muito além de reconhecer objetos. Ele precisa entender o que é o objeto. Hoje os sistemas de IA apenas identificam objetos, cometem erros grosseiros pela absoluta falta de bom senso e por serem “narrow AI”, um algoritmo treinado para reconhecer gatos e cachorros não consegue reconhecer imagens de câncer de mama ou de peixes.
Um sistema inteligente, como nós humanos, teria que ser capaz de descrever o objeto, sabendo o que está descrevendo. Hoje já temos algoritmos que criam imagens a partir de textos, como o Midjourney e DALL-E, mas que na prática aglutinam palavras estatisticamente correlacionadas que fingem que ele sabe o que está criando. Essas ferramentas foram treinadas para gerar imagens a partir de textos escritos em linguagem humana. Você escreve um texto, um prompt, e ela gera uma imagem. Por exemplo, você digita “uma poltrona em forma de abacate”, ele gera imagens correspondentes. É realmente impressionante, mas me pareceu um pouco de exagero a afirmação do CEO da OpenAI que ele é um avanço na direção de um hipotético sistema inteligente.
O DALL-E é um complexo algoritmo de DL, mas que como todo DL carece de aspectos fundamentais a um sistema realmente inteligente, como ausência de bom senso, compreensão do que está se pedindo e assim por diante. Muitas vezes as imagens geradas são totalmente sem sentido. Se o analisarmos sob a ótica de um sofisticado DL, ele é um marco na evolução tecnológica. Mas, se quisermos ser ambiciosos e dissermos que estamos avançando na direção de criarmos uma futura máquina inteligente, talvez seja muito prematuro…A IA é inteligente apenas no nome. Não faz mágica e exige muita inteligência humana para a construção dos algoritmos. Mas, sem dúvidas, é uma ferramenta muito útil, desde que aplicada adequadamente.