Skip to main content
Balneário Camboriú - SC +55 (47) 99725 1117
Siga-nos:

Neste primeiro post de 5, é abordado uma visão geral sobre o YOLO, como é a estrutura base de seu funcionamento e um pouco de sua história. Nos próximos posts serão detalhados como são as arquiteturas de cada uma das 4 primeiras versões do YOLO e, como Bônus, textos e materiais de apoio ensinando a utilizar e treinar está técnica com diversos frameworks diferentes.

Observação: Para melhor entender este Post e os demais sobre YOLO, é necessário ter uma conhecimento geral sobre Inteligência Artificial e Redes Neurais.

O YOLO foi lançado em 2015, por Joseph Redmon e Ali Farhadi, durante o seu doutorado e em uma demonstração da sua primeira versão no TED Talks. O YOLO foi reconhecido como uma técnica inovadora, que foi capaz de obter uma precisão igual ou superior a de outros métodos de detecção de objetos da época [AG].

Durante a apresentação, ele faz uma demonstração ao vivo, provando que o detector é capaz de executar em sua GPU a detecção de até 80 categorias de objetos simultaneamente, a uma taxa de mais ou menos 30 FPS, e mantendo uma ótima precisão, o que foi revolucionário para a época [AG].

Video 1. Como os computadores aprendem a reconhecer objetos instantaneamente.

Durante esta exposição, foi apresentado a versão V3 do YOLO v3. Caso tenha curiosidade, os artigos científicos referentes as suas 3 primeiras versões são os seguintes: YOLO v1; YOLO v2 e YOLO v3.

O Diferencial YOLO

Os sistemas de detecção de objetos anteriores ao YOLO, redirecionam classificadores ou localizadores para realizar a detecção. Eles aplicam o modelo (IA) a uma imagem em vários locais e escalas, onde as regiões de alta pontuação da imagem são consideradas detecções [RJPA2]. Essas regiões menores, extraídas da imagem, são denominadas Bounding Box – “Regiões Delimitadoras” e cada uma dessas regiões detecta um único objeto. A Figura 1, ilustra como as técnicas de classificação, normalmente, percorrem a imagem em varias regiões e escalas diferentes para realizar a classificação do objeto.

Fig 1 – Exemplo de como os Bounding Box percorrem a imagem em regiões menores para identificar um objeto.

Diferente dos algoritmos que percorrem a imagem, em busca dos objetos treinados, o YOLO apenas precisa olhar pela imagem uma única vez e enviá-la para a rede neural. Foi a partir desse conceito que ele ganhou seu nome You Only Look Once (YOLO), que significa “Você só olha uma vez”.

O YOLO usa uma abordagem totalmente diferente, onde é aplicado uma única rede neural à imagem completa. Para isso a rede neural divide a imagem em regiões menores e prevê caixas delimitadoras, probabilidades de existir um objeto naquela caixa e também qual a probabilidade de ser determinado objeto [RJPA2]. Todo este processo é descrito a seguir.

Como Funciona?

O YOLO utiliza uma rede neural profunda (DNN – Deep Neural Network), uma rede neural convolucional, cuja a arquitetura é chamado de Darknet, com o mesmo nome do framework utilizado para implantá-lo. Sua implementação foi desenvolvida na linguagem C, porém, com a ajuda da comunidade e empresas, já é disponível em várias outras linguagens de programação.

Existem diversas versões do YOLO publicadas, a seguir demonstraremos o funcionamento básico/geral do YOLO, e nos próximos posts o funcionamento detalhado de cada uma das primeiras versões dele.

O primeiro passo que o YOLO executa é dividir a imagem em uma grade de S por S células. A grade utilizada nas primeiras versões é de 13×13, 13 colunas e 13 linhas, contendo 169 células, conforme exemplo na Figura 2 abaixo. Nas versões mais recentes esse tamanho é de 19×19 [AG].

Figura 2 – YOLO Divisão da imagem em grades.

Cada uma destas células é responsável por realizar a predição/detecção de 5 caixas delimitadoras, pois podem existir mais de um objeto nesta célula. Cada caixa é responsável por analisar um pedaço da imagem e extrair informações da região. Na versão do YOLO utilizado como exemplo, existem um total de 845 (13x13x5) caixas delimitadoras.

Caixas delimitadoras/Bounding box

O retângulo que contém a localização do objeto é chamado de caixa delimitadora (bounding box). Durante o processo de detecção de objetos, podem ser encontradas diversas caixas delimitadoras para um mesmo objeto. Estas caixas também podem possuir diversos tamanhos diferentes.

Cada caixa possui uma pontuação de confiança, indicando a quantidade de certeza que o algoritmo tem que aquela caixa possui um objeto. Porém, esta pontuação não identifica qual tipo é esse objeto.

Na Figura 3 abaixo, foram destacadas as caixas detectadas pelo algoritmo YOLO. Também foi destacado na imagem a pontuação de confiança através da espessura da caixa, ou seja, quanto maior a confiança que o YOLO tem que existe um objeto naquela caixa maior é a borda da caixa. A quantidade de possíveis objetos identificados nesta etapa do algoritmo é imensa.

Figura 3 – Resultado da detecção das caixas delimitadoras.

Para cada caixa delimitadora encontrada, também é executado o processo classificação dos objetos. Esse processo consiste em fornecer um valor de probabilidade para cada uma das possíveis classes/objetos que o algoritmo foi treinado a encontrar. Na Figura 4 abaixo, foram destacados em cores diferentes os possíveis objetos de cada caixa.

Figura 4 – Resultado da classificação das caixas delimitadoras.

A combinação da confiança da caixa, com a probabilidade da classe, geram a pontuação final. Essa pontuação indica qual a probabilidade de uma determinada caixa delimitadora conter um objeto [JO].

Boa parte das caixas detectadas, possuem um grau de confiança muito baixo. Para eliminar a maioria das caixas podemos atribuir uma limiar de confiança, de 70% por exemplo, e remover o que estiver abaixo deste valor. Nesta etapa a confiança atribuída é de 30%.

A rede neural usa recursos de toda a imagem para prever cada caixa delimitadora, ela também prevê todas as caixas delimitadoras em todas as classes para uma imagem simultaneamente. Isso significa que a rede raciocina globalmente sobre a imagem completa e todos os objetos na imagem [MC].

Resultado caixas delimitadoras:

Cada caixa delimitadora no YOLO contém 3 grupos de informações/atributos:

  • Probabilidade de confiança: Atributo com a probabilidade de existir um objeto na determinada caixa;
  • Coordenadas: Contém a localização da caixa delimitadora/objeto. A localização no YOLO é representada com posição central do objeto, sua altura e sua largura;
  • Probabilidade da classe: Atributo com a probabilidade de ser determinado objeto. Para cada tipo de objeto que a rede neural do YOLO foi treinada é acrescentado um novo atributo.

Na Figura 5 abaixo, é representado esses 3 grupos de atributos.

Figura 5 – Mapa de saída do YOLO [AG2].

Finalizada a coleta/predição das probabilidades de cada caixa delimitadora, agora é preciso decidir quais caixas de fato são ou não são objetos. Para realizar esta decisão/predição, em sua última etapa de detecção, o YOLO realiza o processo de supressão não máxima.

Supressão não máxima/Non maximum suppression

Durante o processo de detecção de objetos, são identificadas varias caixas delimitadoras contendo objetos. Porém, a maioria das caixas não vai conter um objeto, ou compartilham a mesma região de um mesmo objeto. Portanto é necessário realizar uma etapa para remover as caixas com baixas probabilidade e/ou que possuem uma área compartilhada.

A Figura 6 abaixo, ilustra esse processo de tomada de decisão realizada pelo YOLO e diversas outras redes neurais.

Figura 6 – Supressão não máxima.

Âncoras/Anchor Box

As ancoras são retângulos de tamanhos pré-definidos, que foram incluídas a partir da versão 2 do YOLO. Estes retângulos são utilizados, para que as caixas delimitadoras previstas, possuam maior relação com as caixas delimitadoras esperadas como resultado.

Estas âncoras possuem tamanhos altura e largura próximos aos tamanhos dos objetos identificados. Elas são criadas durante o processo de treinamento da rede neural, com base nas classes de objetos.

A partir das coordenadas das caixas dos objetos detectadas, são selecionadas as âncoras de cada objeto, redimensionadas para a proporção dos objetos identificados e utilizadas como saída da rede neural YOLO.

A rede neural YOLO não prevê o tamanho final do objeto, ela apenas ajusta o tamanho da âncora mais próxima ao tamanho do objeto.

Na Figura 7 abaixo, é exibido o resultado de todo o processo de detecção com o YOLO.

Figura 7 – Resultado da detecção com YOLO.

Resumo

O YOLO cria diversas caixas delimitadoras. Para cada caixa, é atribuido um valor de confiaça, com a porcentagem (0 até 1) de existir uma objeto. Também é realizado a predição de que tipo de objeto existe na caixa. O valor de confiança para a caixa delimitadora e a predição da classe são combinados em uma pontuação final, que vai informar a probabilidade dessa caixa conter um objeto específico. Por fim é realizada o processo de supressão não máxima afim de “filtrar”/”Eliminar” falsos objetos e mesclar regiões de um mesmo objeto que assumem o tamnho conforme o tamanho da âncora [AG].

O processo de predição do YOLO é realizado a partir de uma grid de 13×13 células, o que no final resulta em 169 células. Para cada uma dessas células, são detectadas 5 caixas delimitadoras, o que resulta em 845 caixas com possíveis objetos [AG]

Figura 8 – Resumo das operações YOLO.

Um pouco de história

Joseph Redmon introduziu a primeira versão em seu paper publicado em junho de 2015: You Only Look Once: Unified, Real-Time ObjectDetection.

Em dezembro de 2016, Redmon e Ali Farhadi introduziram o YOLOv2 com o paper: “YOLO9000: Better, Faster, Stronger, mais preciso e mais rápido que a versão anterior [AG].

Em abril de 2018, o YOLOv3 (“YOLOv3: An Incremental Improvement“) demonstrou uma grande melhora na eficiência da predição. No entanto, no geral ele não é mais rápido que a versão anterior. A principal novidade é a predição da imagem em 3 diferentes escalas, o que resolveu o principal problema da versão anterior, que era a dificuldade para reconhecer objetos muito pequenos na imagem. Essa novidade também é o principal motivo de não ser mais rápido que o seu antecessor, já que tal função exigiu mudanças na arquitetura e funcionamento, que tornaram o processo mais pesado [AG].

A quarta versão do YOLO foi lançada em abril de 2020, sendo oficializada após a publicação do paper “YOLOv4: Optimal Speed and Accuracy of Object Detection” por Alexey Bochkovskiy, Chien-Yao Wang e Hong-Yuan Mark Liao.

As principais características que podem ser destacadas nessa versão são melhorias na velocidade e precisão. Outra característica importante é o fato de ser mais eficiente para rodar em GPUs, pois foi otimizado para utilizar menos memória [AG].

Nos próximos posts, serão detalhadas estas 4 versões. Espero que tenha gostado do post, deixe seu comentário abaixo.

Referências:

[AG] Alvez, Gabriel. Detecção de Objetos com YOLO – Uma abordagem moderna. Acessado em 15/07/2022.

[RJFA] Redmon, Joseph and Farhadi, Ali, YOLO: Real-Time Object Detection. Acessado em 29/06/2022,

[MC] Manish Chablani, YOLO — You only look once, real time object detection explained. Acessado em 29/06/2022.

[RJFA2] Redmon, Joseph and Farhadi, Ali, YOLO9000: Better, Faster, Stronger. Artigo.

[AK] Ayoosh Kathuria – What’s new in YOLO v3. Acessado em 26/07/2022.

[AK2] Ayoosh Kathuria – How to implement a YOLO (v3) object detector from scratch in PyTorch: Part 1. Acessado em 26/07/2022

[JP] Jilvan Pinheiro; Módulo OCR de leitura e reconhecimento de documentos. Acessado em 12/08/2022

Nenhum comentário ainda!

Seu endereço de e-mail não será publicado