Detecção de Objetos
Visão geral
Detecção de objetos (object detection) é a tarefa de visão computacional de detectar (quais objetos estão presentes) e localizar (onde eles estão) objetos em uma imagem ou quadro de vídeo. Um detector tipicamente produz um conjunto de:
- Caixas delimitadoras (bounding boxes) (ou representações espaciais relacionadas)
- Rótulos de classe (class labels) (por exemplo, pessoa, carro, cachorro)
- Pontuações de confiança (confidence scores) (pontuações tipo probabilidade para cada detecção)
A detecção de objetos fica entre classificação de imagens e segmentação na caixa de ferramentas de Visão Computacional:
- Classificação: um rótulo para a imagem inteira
- Detecção: rótulos + localizações para múltiplos objetos
- Segmentação: formas de objetos em nível de pixel (veja também Segmentação de Imagens)
Em vídeo, a detecção frequentemente é executada por quadro e opcionalmente vinculada ao longo do tempo usando Rastreamento de Objetos.
Saídas e representações
Caixas delimitadoras (e variantes)
A saída de localização mais comum é um retângulo alinhado aos eixos, representado como:
(x_min, y_min, x_max, y_max)(formato de cantos), ou(x_center, y_center, width, height)(formato de centro)
Muitos cenários do mundo real usam representações mais ricas:
- Caixas rotacionadas (rotated boxes): para imagens aéreas ou texto em cenas (ângulo incluído)
- Máscaras de instância (instance masks): “detecção + segmentação” (por exemplo, Mask R-CNN)
- Pontos-chave (keypoints): por exemplo, estimativa de pose (articulações humanas)
- Caixas delimitadoras 3D (3D bounding boxes): para direção autônoma (frequentemente com LiDAR)
Este artigo foca na detecção 2D com caixas delimitadoras, pois é a linha de base padrão e um bloco de construção para muitas variantes.
Pontuações de confiança e limiares
Detectores produzem muitas caixas candidatas. Um limiar de confiança filtra candidatas com baixa confiança e, em seguida, uma etapa de desduplicação (geralmente supressão não máxima) remove quase duplicatas.
Pipeline central: como detectores funcionam
A maioria dos detectores modernos são redes profundas treinadas de ponta a ponta com Descida do Gradiente e Retropropagação (backpropagation). Um pipeline típico tem:
- Backbone (espinha dorsal): extrai características (frequentemente uma Rede Neural Convolucional como ResNet, ou um transformer de visão)
- Neck (pescoço) (opcional): funde características em múltiplas escalas (por exemplo, FPN)
- Head (cabeça): prevê classes + coordenadas das caixas
- Pós-processamento (post-processing): limiarização por confiança + supressão não máxima
Extração de características e detecção multiescala
Objetos aparecem em tamanhos diferentes. Um design comum é uma pirâmide de características (feature pyramid) (por exemplo, FPN), em que diferentes resoluções de mapas de características se especializam em diferentes tamanhos de objetos:
- características de alta resolução → objetos pequenos
- características de baixa resolução → objetos grandes
Regressão de caixas e IoU
A localização é treinada como um problema de regressão. Um conceito-chave é a interseção sobre união (Intersection over Union, IoU), que mede a sobreposição entre duas caixas:
[ IoU(A,B)=\frac{|A \cap B|}{|A \cup B|} ]
IoU é usada para:
- atribuir positivos/negativos no treinamento (casar previsões com o ground truth)
- avaliação (uma caixa prevista está “correta”?)
- às vezes como uma perda de treinamento (por exemplo, perdas GIoU/DIoU/CIoU)
Pós-processamento: supressão não máxima
Como detectores frequentemente produzem múltiplas previsões sobrepostas para o mesmo objeto, eles tipicamente aplicam supressão não máxima (Non-Maximum Suppression, NMS) para manter a melhor e descartar o restante.
Veja o artigo dedicado: Supressão Não Máxima (NMS).
Famílias de modelos
Detectores de objetos frequentemente são agrupados em três grandes famílias:
- Detectores de dois estágios (two-stage detectors)
- Detectores de um estágio (one-stage detectors)
- Detectores baseados em transformers (transformer-based) (previsão de conjunto)
Cada família reflete como as candidatas são geradas e refinadas.
Detectores de dois estágios
Detectores de dois estágios primeiro propõem regiões que podem conter um objeto e, em seguida, classificam/refinam essas regiões.
Linhagem R-CNN (R-CNN → Fast R-CNN → Faster R-CNN)
- R-CNN: gera propostas de regiões externamente, executa CNN por região (lento)
- Fast R-CNN: executa CNN uma vez, faz pooling por região
- Faster R-CNN: aprende propostas com uma rede de proposta de regiões (Region Proposal Network, RPN)
Componentes-chave:
- RPN: prevê “objectness” + ajustes de caixa para regiões candidatas (frequentemente usando âncoras)
- Pooling de RoI / RoIAlign: extrai uma característica de tamanho fixo para cada proposta
- Cabeça de segundo estágio: classifica cada proposta e refina sua caixa
Prós
- Frequentemente alta acurácia, especialmente em limiares altos de IoU
- Bom para objetos pequenos/sobrepostos em muitos cenários
Contras
- Mais complexo e frequentemente mais lento do que métodos de um estágio
- Mais partes móveis (RPN, operações de RoI)
Casos de uso práticos
Detectores de dois estágios são comuns quando:
- máxima acurácia é importante (por exemplo, percepção crítica para segurança)
- o número de objetos por imagem é alto e há muita aglomeração
Detectores de um estágio
Detectores de um estágio removem a etapa explícita de propostas. Eles preveem caixas e classes densamente sobre uma grade de localizações e/ou níveis de pirâmide de características.
SSD, YOLO, RetinaNet (e variantes modernas)
Ideias clássicas de um estágio:
- SSD: prevê offsets relativos a múltiplas caixas padrão (âncoras) ao longo de mapas de características
- Família YOLO: previsões densas otimizadas para velocidade; variantes modernas do YOLO integram necks do tipo FPN/PAN, perdas melhores e fortes aumentos de dados
- RetinaNet: introduziu a perda focal (Focal Loss) para lidar com desbalanceamento de classes (muitos negativos de fundo)
Prós
- Alta taxa de processamento e pipeline de inferência mais simples
- Excelente para aplicações em tempo real (análise de vídeo, robótica)
Contras
- Historicamente ficou atrás de métodos de dois estágios em alguns benchmarks (a diferença diminuiu substancialmente)
- Pode ser sensível a estratégias de atribuição e hiperparâmetros (âncoras, limiares)
Detectores baseados em transformers
Detectores baseados em transformers formulam a detecção como um problema de previsão de conjunto (set prediction): prever um conjunto de objetos de tamanho fixo e casá-los com o ground truth.
DETR (DEtection TRansformer)
O DETR combina:
- um backbone CNN para características
- um encoder–decoder transformer (veja Arquitetura Transformer e Autoatenção (Self-Attention))
- um número fixo de “consultas de objeto” que cada uma prevê uma detecção
Ideia-chave: correspondência bipartida Em vez de produzir muitas caixas sobrepostas e usar supressão não máxima, o DETR usa correspondência húngara (Hungarian matching) durante o treinamento para atribuir caixas previstas a caixas de ground truth em uma relação um-para-um.
Prós
- Conceitualmente limpo: sem âncoras, sem supressão não máxima na formulação original
- Forte raciocínio global via atenção
Contras
- O DETR original converge lentamente e pode ter dificuldades com objetos pequenos sem modificações
Deformable DETR e detectores transformers modernos
Para lidar com as fraquezas do DETR, modelos posteriores introduziram:
- atenção deformável (deformable attention) (localizações de atenção amostradas) para melhorar eficiência e o tratamento de objetos pequenos
- estratégias de treinamento e custos de correspondência aprimorados
- designs híbridos ajustados para inferência em tempo real (por exemplo, abordagens no estilo RT-DETR)
Na prática, hoje o espaço de “detector baseado em transformer” inclui uma gama de híbridos que pegam emprestado tanto de detectores densos quanto da previsão de conjunto no estilo DETR.
Escolhas-chave de projeto (o que faz detectores funcionarem na prática)
Baseado em âncoras vs sem âncoras
Detecção baseada em âncoras (anchor-based detection)
- Pré-definir um conjunto de caixas âncora (escalas/proporções) por localização
- Prever: (1) quais âncoras contêm objetos, (2) como ajustar âncoras para se encaixar nos objetos
Detecção sem âncoras (anchor-free detection)
- Prever objetos diretamente a partir de localizações (por exemplo, pontos centrais) sem formas de âncora predefinidas
- Frequentemente prevê:
- centralidade/objectness
- lados da caixa (distâncias l/t/r/b) ou largura/altura
Trade-offs
- Âncoras podem funcionar muito bem, mas introduzem hiperparâmetros (tamanhos, proporções, limiares de correspondência)
- Abordagens sem âncoras reduzem o ajuste de âncoras e podem simplificar o treinamento, mas ainda exigem atribuição cuidadosa e design de perdas
Atribuição: como previsões casam com ground truth durante o treinamento
Detectores precisam de uma regra para decidir quais previsões são “positivas” (responsáveis por um objeto do ground truth). Abordagens comuns:
- Limiarização por IoU (baseado em âncoras): positivo se IoU > τ
- Top-k / atribuição dinâmica: escolhe as melhores candidatas por objeto usando pontuações + IoU
- Correspondência húngara (estilo DETR): correspondência de conjunto um-para-um com uma função de custo
A estratégia de atribuição afeta fortemente a estabilidade, o recall e a AP final.
Funções de perda
Detectores geralmente otimizam uma combinação de:
- Perda de classificação
- entropia cruzada ou variantes
- perda focal é comum quando negativos dominam
- Perda de regressão de caixas
- Smooth L1 / L1 sobre parâmetros da caixa e/ou
- perdas baseadas em IoU: GIoU, DIoU, CIoU (frequentemente melhoram a localização)
- Perdas auxiliares (às vezes)
- perdas de centralidade/objectness
- perdas de máscara/pontos-chave em tarefas estendidas
Estas são casos especiais do design mais amplo de Funções de Perda.
Supressão não máxima (NMS) e alternativas
A maioria dos detectores densos depende de supressão não máxima para remover duplicatas. Variantes incluem:
- Supressão não máxima por classe (class-wise NMS): suprime separadamente dentro de cada classe (comum)
- Supressão não máxima agnóstica à classe (class-agnostic NMS): suprime entre todas as classes (útil quando classes se sobrepõem ou em cenários de vocabulário aberto)
- Soft-NMS: decai as pontuações em vez de remover rigidamente
- Supressão não máxima ciente de IoU (IoU-aware) ou DIoU-NMS: ajusta critérios de supressão
Métodos de previsão de conjunto com transformer frequentemente buscam reduzir ou eliminar a necessidade de supressão não máxima, mas muitos sistemas práticos ainda aplicam alguma filtragem dependendo do modelo.
(Detalhes: Supressão Não Máxima (NMS))
Aumento de dados e truques de treinamento
Práticas comuns que afetam materialmente os resultados:
- Treinamento multiescala (multi-scale training) (redimensionamento aleatório)
- Transformações geométricas: flips, recortes, perspectiva
- Transformações fotométricas: jitter de cor, desfoque, ruído
- Aumentos por mistura (mixing augmentations) (popular no treinamento estilo YOLO): pipelines do tipo Mosaic / MixUp
- EMA dos pesos, agendas mais longas, warmup
- Pré-treinamento + ajuste fino (fine-tuning) (veja Aprendizado por Transferência)
- Amostragem balanceada ou reponderação para conjuntos de dados com cauda longa
Aumentos se conectam a Aumento de Dados.
Avaliação: métricas que importam
Limiar de IoU e verdadeiros positivos
Uma caixa prevista geralmente é considerada correta se:
- a classe prevista corresponde à classe do ground truth, e
- IoU(prev, gt) ≥ limiar (frequentemente 0,5 ou maior)
Precisão Média (AP) e mAP
Detectores são comumente avaliados via uma curva precisão–revocação (precision–recall curve):
- Precisão (precision): fração de detecções previstas que estão corretas
- Revocação (recall): fração de objetos do ground truth que são encontrados
Precisão Média (Average Precision, AP) resume a área sob a curva precisão–revocação para uma classe. mAP faz a média da AP entre classes.
Métricas no estilo COCO (padrão moderno)
O MS COCO popularizou reportar:
- AP@[.50:.95]: AP média em limiares de IoU 0,50, 0,55, …, 0,95
(isso penaliza localização imprecisa) - AP50 e AP75
- AP por escala: objetos pequenos / médios / grandes
Essas métricas são mais informativas do que apenas AP50, que pode esconder problemas de localização.
Métricas de tempo de execução
Para implantação prática, a qualidade da detecção precisa ser balanceada com velocidade:
- Latência (ms por imagem) e vazão (throughput) (FPS)
- O tipo de hardware importa (GPU vs CPU vs aceleradores de borda)
- Tamanho de batch e resolução de entrada mudam o desempenho substancialmente
Conjuntos de dados e benchmarks comuns
Alguns conjuntos de dados amplamente usados para detecção:
- PASCAL VOC: benchmark clássico; menos classes do que o COCO
- MS COCO: benchmark geral mais comum; cenas variadas e tamanhos de objetos variados
- Open Images: escala muito grande com muitas classes e rótulos hierárquicos
- LVIS: enfatiza categorias de cauda longa (muitas classes raras)
Conjuntos de dados específicos por domínio:
- KITTI, Waymo Open Dataset: direção autônoma (frequentemente rótulos 2D + 3D)
- Cityscapes, BDD100K: cenas urbanas de direção
- DOTA: imagens aéreas com caixas rotacionadas
- Conjuntos de dados de varejo/industrial frequentemente são proprietários devido à especificidade do domínio
A escolha do conjunto de dados afeta o que significa “boa detecção”—AP no estilo COCO pode não capturar os custos de certos erros em contextos de segurança ou medicina.
Aplicações práticas
Detecção de objetos é um módulo central em muitos sistemas:
- Direção autônoma & ADAS: detectar veículos, pedestres, placas/sinais e semáforos
- Robótica: pick-and-place (detectar + estimar pose), navegação
- Análise de vídeo: contagem de pessoas, detecção de intrusão, análise esportiva
- Manufatura: detecção de defeitos, verificação de presença de peças, controle de qualidade
- Varejo: monitoramento de prateleiras, automação de checkout
- Imagem médica: detecção de lesões/nódulos (frequentemente com métricas especializadas e validação cuidadosa)
- IA para documentos (Document AI): detectar tabelas, figuras, blocos de texto como precursor para OCR/análise de layout
Detecções também são frequentemente usadas como entradas para tarefas posteriores como rastreamento, re-identificação, grafos de cena e reconhecimento de ações.
Exemplo prático: executando um detector pré-treinado
Abaixo está um exemplo mínimo de inferência usando o Faster R-CNN pré-treinado do torchvision. Ele demonstra o fluxo típico: pré-processamento → forward pass → limiar → (opcional) supressão não máxima → consumir caixas.
import torch
from torchvision.models.detection import fasterrcnn_resnet50_fpn
from torchvision.transforms.functional import to_tensor
from PIL import Image
# Load a pretrained detector (COCO classes)
model = fasterrcnn_resnet50_fpn(weights="DEFAULT")
model.eval()
img = Image.open("frame.jpg").convert("RGB")
x = to_tensor(img) # [C,H,W] in [0,1]
with torch.no_grad():
out = model([x])[0] # dict with boxes, labels, scores
# Filter by confidence threshold
keep = out["scores"] >= 0.5
boxes = out["boxes"][keep].cpu().numpy()
labels = out["labels"][keep].cpu().numpy()
scores = out["scores"][keep].cpu().numpy()
print("Detections:", len(boxes))
print("First box:", boxes[0], "label:", labels[0], "score:", float(scores[0]))
Notas:
- Muitas bibliotecas aplicam supressão não máxima internamente (incluindo detectores comuns do torchvision). Para modelos densos de um estágio, você frequentemente executa explicitamente a supressão não máxima no pós-processamento.
- IDs de rótulos do COCO são numéricos; normalmente você os mapeia para nomes com uma lista de rótulos.
Modos comuns de falha e dicas de depuração
Modos de falha
- Objetos pequenos: perdidos devido a downsampling, resolução insuficiente, ou projeto multiescala ruim
- Oclusão/aglomeração: caixas duplicadas, objetos perdidos, confusão de classes
- Mudança de domínio (domain shift): treinar em fotos da internet, mas implantar em CFTV com pouca luz, térmico, fisheye etc.
- Classes de cauda longa (long-tail): categorias raras têm AP baixa sem rebalanceamento ou mais dados
- Erros de localização: classe correta, mas caixa muito larga/justa → prejudica AP em IoU alto
Checklist prático de depuração
- Inspecione falsos positivos vs falsos negativos separadamente (eles sugerem correções diferentes).
- Visualize saídas antes da supressão não máxima para ver se o problema é a supressão não máxima (limiar muito baixo/alto).
- Verifique a qualidade das anotações—caixas ruidosas podem limitar o desempenho.
- Ajuste:
- resolução de entrada
- limiar de confiança
- limiar de IoU da supressão não máxima
- Considere coleta/aumento de dados direcionados para o domínio de falha (noite, chuva, motion blur).
Direções atuais e extensões
Algumas áreas ativas na pesquisa e prática modernas de detecção:
- Detecção de vocabulário aberto / condicionada por texto (open-vocabulary / text-conditioned detection): detectar categorias descritas por prompts de texto (frequentemente aproveitando pré-treinamento visão–linguagem)
- Detecção em vídeo: consistência temporal e pistas de movimento além da detecção por quadro
- Detecção 3D e multissensor: fusão de câmera + LiDAR/radar
- Implantação eficiente: quantização, poda, destilação e arquiteturas cientes de hardware
- Modelos unificados: detectores que compartilham componentes com segmentação, pose e grounding
Resumo
A detecção de objetos prevê o quê e onde para múltiplos objetos em imagens ou vídeo. Sistemas modernos giram em torno de backbones de características fortes, atribuição cuidadosa de rótulos e design de perdas, além de pós-processamento robusto (frequentemente supressão não máxima). As principais famílias de modelos—dois estágios, um estágio e baseados em transformers—oferecem diferentes trade-offs de acurácia/velocidade/complexidade. A avaliação tipicamente se baseia em IoU e (m)AP, com métricas COCO como padrão dominante, e a escolha do conjunto de dados molda fortemente como “bom desempenho” se parece na prática.