Os modelos de classificação de imagens que abordamos até agora tomavam uma imagem e produziam um resultado categórico, como a classe 'número' em um problema MNIST. No entanto, em muitos casos, não queremos apenas saber que uma imagem retrata objetos - queremos determinar sua localização precisa. Este é exatamente o objetivo da detecção de objetos.
Imagem do site YOLO v2
Suponha que queremos encontrar um gato em uma imagem. Uma abordagem muito ingênua para detecção de objetos seria a seguinte:
- Dividir a imagem em vários blocos.
- Executar a classificação de imagem em cada bloco.
- Os blocos que resultarem em uma ativação suficientemente alta podem ser considerados como contendo o objeto em questão.
Imagem do Notebook de Exercícios
No entanto, essa abordagem está longe de ser ideal, pois só permite que o algoritmo localize a caixa delimitadora do objeto de forma muito imprecisa. Para uma localização mais precisa, precisamos executar algum tipo de regressão para prever as coordenadas das caixas delimitadoras - e, para isso, precisamos de conjuntos de dados específicos.
Este post no blog oferece uma ótima introdução à detecção de formas.
Você pode encontrar os seguintes conjuntos de dados para essa tarefa:
- PASCAL VOC - 20 classes
- COCO - Objetos Comuns em Contexto. 80 classes, caixas delimitadoras e máscaras de segmentação
Enquanto na classificação de imagens é fácil medir o desempenho do algoritmo, na detecção de objetos precisamos medir tanto a correção da classe quanto a precisão da localização inferida da caixa delimitadora. Para este último, usamos a chamada Interseção sobre União (IoU), que mede o quão bem duas caixas (ou duas áreas arbitrárias) se sobrepõem.
Figura 2 de este excelente post sobre IoU
A ideia é simples - dividimos a área de interseção entre duas figuras pela área de sua união. Para duas áreas idênticas, o IoU seria 1, enquanto para áreas completamente disjuntas será 0. Caso contrário, variará de 0 a 1. Normalmente, consideramos apenas aquelas caixas delimitadoras para as quais o IoU está acima de um determinado valor.
Suponha que queremos medir o quão bem uma determinada classe de objetos
- Considere a curva de Precisão-Recall que mostra a precisão dependendo de um valor de limiar de detecção (de 0 a 1).
- Dependendo do limiar, detectaremos mais ou menos objetos na imagem, e diferentes valores de precisão e recall.
- A curva terá este formato:
Imagem do NeuroWorkshop
A Precisão Média para uma classe
Consideramos apenas aquelas detecções para as quais o IoU está acima de um determinado valor. Por exemplo, no conjunto de dados PASCAL VOC, normalmente
Imagem do NeuroWorkshop
A principal métrica para Detecção de Objetos é chamada de Precisão Média Global, ou mAP. É o valor da Precisão Média, calculado como a média entre todas as classes de objetos, e às vezes também sobre
Existem duas grandes classes de algoritmos de detecção de objetos:
- Redes de Proposta de Região (R-CNN, Fast R-CNN, Faster R-CNN). A ideia principal é gerar Regiões de Interesse (ROI) e executar CNN sobre elas, procurando a ativação máxima. É um pouco semelhante à abordagem ingênua, com a exceção de que as ROIs são geradas de forma mais inteligente. Uma das principais desvantagens desses métodos é que eles são lentos, porque precisamos de muitas passagens do classificador CNN sobre a imagem.
- Métodos de uma única passagem (YOLO, SSD, RetinaNet). Nessas arquiteturas, projetamos a rede para prever classes e ROIs em uma única passagem.
R-CNN usa Selective Search para gerar uma estrutura hierárquica de regiões ROI, que são então passadas por extratores de características CNN e classificadores SVM para determinar a classe do objeto, e regressão linear para determinar as coordenadas da caixa delimitadora. Artigo Oficial
Imagem de van de Sande et al. ICCV’11
Imagens de este blog
Essa abordagem é semelhante à R-CNN, mas as regiões são definidas após as camadas de convolução terem sido aplicadas.
Imagem do Artigo Oficial, arXiv, 2015
A ideia principal dessa abordagem é usar uma rede neural para prever ROIs - a chamada Rede de Proposta de Região. Artigo, 2016
Imagem do Artigo Oficial
Este algoritmo é ainda mais rápido que o Faster R-CNN. A ideia principal é a seguinte:
- Extraímos características usando ResNet-101.
- As características são processadas por Position-Sensitive Score Map. Cada objeto de
$C$ classes é dividido em regiões$k\times k$ , e treinamos para prever partes dos objetos. - Para cada parte das regiões
$k\times k$ , todas as redes votam pelas classes de objetos, e a classe de objeto com o maior número de votos é selecionada.
Imagem do Artigo Oficial
YOLO é um algoritmo de uma única passagem em tempo real. A ideia principal é a seguinte:
- A imagem é dividida em regiões
$S\times S$ . - Para cada região, CNN prevê
$n$ objetos possíveis, coordenadas da caixa delimitadora e confiança=probabilidade * IoU.
Imagem do Artigo Oficial
- RetinaNet: Artigo Oficial
- SSD (Single Shot Detector): Artigo Oficial
Continue seu aprendizado no seguinte notebook:
Nesta lição, você fez um tour rápido por todas as várias maneiras de realizar a detecção de objetos!
Leia estes artigos e notebooks sobre YOLO e experimente por conta própria:
- Bom post no blog descrevendo YOLO
- Site Oficial
- YOLO: Implementação em Keras, notebook passo a passo
- YOLO v2: Implementação em Keras, notebook passo a passo
- Detecção de Objetos por Nikhil Sardana
- Uma boa comparação de algoritmos de detecção de objetos
- Revisão de Algoritmos de Aprendizado Profundo para Detecção de Objetos
- Uma Introdução Passo a Passo aos Algoritmos Básicos de Detecção de Objetos
- Implementação de Faster R-CNN em Python para Detecção de Objetos











