Object Detection

Detecção de Objetos em Imagens

Detecção de Objetos é uma tarefa fundamental em Visão Computacional que vai além da simples classificação de imagens. Enquanto a classificação apenas diz “há um cachorro na imagem”, a detecção diz “há um cachorro aqui e um gato ali”, desenhando caixas delimitadoras (bounding boxes).

⚙️ Como funciona: Contexto Prático

A tarefa envolve duas previsões simultâneas:

  1. Regressão: Prever as coordenadas da bounding box (centro x, centro y, largura, altura).
  2. Classificação: Prever a classe (rótulo) do objeto dentro daquela caixa.

Existem duas grandes famílias:

  • Two-Stage Detectors: (ex: Faster R-CNN) Propõem regiões (RPN) e depois classificam/refinam usando roi-pooling. Mais lentos, mas altamente precisos.
  • One-Stage Detectors: (ex: YOLO, SSD) Tratam a detecção como um único problema de regressão em malha (grid). Extremamente rápidos, mas com ligeira dificuldade em objetos pequenos e aglomerados.

🧮 Fundamentação Matemática (Função de Perda Multitarefa)

Como o modelo precisa otimizar duas coisas distintas ao mesmo tempo, a função de perda total (LtotalL_{total}) é uma combinação linear da perda de classificação (LclsL_{cls}) e da perda de regressão da bounding box (LlocL_{loc}):

Ltotal(p,u,t,v)=Lcls(p,u)+λ[u1]Lloc(t,v)L_{total}(p, u, t, v) = L_{cls}(p, u) + \lambda \cdot [u \ge 1] L_{loc}(t, v)

Eq. 1: Função de perda multitarefa (Multi-task Loss).

Onde:

  • pp é a distribuição de probabilidade predita (calculada com Softmax).
  • uu é a classe real do objeto (u1u \ge 1 significa que é um objeto, u=0u=0 indica background).
  • tt é o vetor de coordenadas preditas (tx,ty,tw,th)(t_x, t_y, t_w, t_h).
  • vv é o vetor real da bounding box no ground truth.
  • λ\lambda é o hiperparâmetro de balanceamento.

1. Perda de Classificação (Cross-Entropy)

Geralmente calcula-se com entropia cruzada logarítmica padrão para K+1K+1 classes (onde +1+1 é o background):

Lcls(p,u)=logpuL_{cls}(p, u) = -\log p_u

Eq. 2: Perda de entropia cruzada para classificação.

Onde:

  • Lcls(p,u)L_{cls}(p, u): perda de classificação para o objeto.
  • pup_u: probabilidade predita pelo modelo para a classe correta uu.

2. Perda de Regressão (Smooth L1 / Huber Loss)

Para a localização, usar o Erro Quadrático Médio (L2L_2) pode fazer os gradientes explodirem em outliers iniciais. Usamos então o Smooth L1L_1 Loss, que é quadrático para erros pequenos (suavizando a convergência) e linear para erros grandes (resistência a outliers):

Lloc(t,v)=i{x,y,w,h}smoothL1(tivi)L_{loc}(t, v) = \sum_{i \in \{x,y,w,h\}} \text{smooth}_{L_1}(t_i - v_i)

Eq. 3: Perda de regressão Smooth L1 para a bounding box.

Onde:

smoothL1(x)={0.5x2se x<1x0.5caso contraˊrio\text{smooth}_{L_1}(x) = \begin{cases} 0.5 x^2 & \text{se } |x| < 1 \\ |x| - 0.5 & \text{caso contrário} \end{cases}

🎯 Quando usar

  • Sistemas de vigilância e tracking.
  • Veículos autônomos (detecção de pedestres, placas).
  • Análise de imagens médicas (identificação de tumores em exames).

Relacionadas: roi-pooling · edge-detection-image-processing

Construído com Eleventy · busca por Lunr.js