Hard Negative Mining
A mineração de exemplos negativos difíceis encontra os negativos que o modelo mais confunde com os positivos e concentra o treino neles, reduzindo os falsos positivos na deteção e na pesquisa.
A mineração de exemplos negativos difíceis é uma estratégia de treino que identifica os exemplos negativos em que o modelo mais erra e concentra neles a aprendizagem. Um exemplo negativo não pertence à classe-alvo, e um exemplo negativo difícil é aquele que o modelo ainda classifica como positivo: uma região de fundo que um detetor delimita como objeto ou uma imagem não relacionada que um modelo de embeddings coloca junto à consulta. A maioria dos exemplos negativos é fácil e, depois de o modelo saber lidar com eles, quase não contribui para o sinal de aprendizagem; por isso, selecionar os mais difíceis aperfeiçoa as fronteiras de decisão e reduz os falsos positivos.
Como funciona a mineração de negativos difíceis#
O que é considerado difícil depende da tarefa:
- Na deteção de objetos, uma região de fundo é difícil quando o detetor a classifica como objeto.
- Na classificação, um exemplo negativo difícil é um exemplo da classe errada ao qual é atribuída uma confiança elevada para a classe-alvo.
- Na recuperação e nos sistemas de recomendação, é um item irrelevante classificado perto da consulta, e os exemplos negativos com pontuações mais altas têm maior influência no gradiente.
- Na aprendizagem métrica, é um exemplo negativo que fica mais perto de uma âncora do que o exemplo positivo correspondente, o que é penalizado por uma função de perda de margem tripla.
A mineração pode ser offline ou online. A mineração offline executa um modelo treinado num grande conjunto de dados composto apenas por exemplos negativos, recolhe os falsos positivos, adiciona-os ao conjunto de treino e volta a treinar o modelo. Os detetores clássicos de peões por janela deslizante eram treinados desta forma: percorriam imagens sem pessoas à procura de falsos alarmes e voltavam a treinar com eles. A mineração online seleciona exemplos difíceis dentro de cada lote de treino. O SSD classifica as caixas predefinidas negativas pela função de perda de classificação e mantém apenas as de maior perda, até um máximo de 3 exemplos negativos por positivo; a mineração online de exemplos difíceis (OHEM) aplica a mesma ideia às propostas de regiões dos detetores de duas etapas. A seleção do SSD requer apenas algumas linhas:
import torch
import torch.nn.functional as F
torch.manual_seed(0)
# Simulated objectness logits for 8,400 candidate boxes: 20 cover an object, the rest are background
logits = torch.randn(8400) - 3
labels = torch.zeros(8400)
labels[:20] = 1
loss = F.binary_cross_entropy_with_logits(logits, labels, reduction="none")
# Keep every positive plus only the highest-loss negatives, at most 3 per positive
positives = labels == 1
negative_loss = loss.masked_fill(positives, 0)
hard_negatives = negative_loss.topk(3 * int(positives.sum())).indices
kept = torch.cat([positives.nonzero().squeeze(1), hard_negatives])
print(f"boxes in the loss: {len(kept)} of {len(loss)}")
print(f"mean negative loss: all {loss[~positives].mean():.3f}, mined {loss[hard_negatives].mean():.3f}")A função de perda mantém 80 das 8.400 caixas: os 20 exemplos positivos e os 60 exemplos negativos que o modelo mais confunde com objetos. A perda média desses 60 exemplos negativos selecionados é 0,648, em comparação com 0,075 para os 8.380 exemplos negativos, pelo que o gradiente se concentra no fundo que o modelo efetivamente confunde.
Mineração de exemplos negativos difíceis vs. técnicas relacionadas#
- Amostragem negativa: Seleciona um subconjunto gerível de todos os exemplos negativos, muitas vezes aleatoriamente. A mineração de exemplos negativos difíceis seleciona os que causam mais confusão.
- Focal loss: Mantém todos os exemplos na função de perda, mas reduz o peso dos exemplos classificados corretamente, o que permitiu que detetores de uma etapa como o RetinaNet fossem treinados com todas as caixas candidatas sem amostragem explícita.
- Aprendizagem ativa: Seleciona exemplos incertos não rotulados para anotação humana, incluindo possíveis exemplos positivos. A mineração de exemplos negativos difíceis incide em exemplos já confirmados como negativos.
- Reequilíbrio de classes: Corrige frequências de classes desiguais através de subamostragem e aumento de peso. Uma classe negativa frequente não é necessariamente difícil.
- Aumento de dados: Cria variações de amostras existentes, mas não consegue introduzir um objeto confuso que nunca tenha existido no conjunto de dados.
Aplicações no mundo real#
- Deteção de segurança em armazéns: Um detetor de empilhadores que assinala repetidamente porta-paletes, reflexos nas estantes e plataformas elevatórias de tesoura desgasta a confiança dos operadores com falsos alertas. Recolher essas cenas como imagens negativas e voltar a treinar ensina ao detetor as características que distinguem um empilhador de equipamentos semelhantes.
- Pesquisa visual de produtos: Se uma pesquisa por um modelo específico de sapatilhas de corrida pretas classificar demasiado alto modelos semelhantes de outras linhas de produtos, esses produtos tornam-se exemplos negativos difíceis. Treinar com eles, por exemplo como exemplos negativos nos tripletos âncora-positivo-negativo de uma rede siamesa, ensina o modelo de embeddings a preservar diferenças subtis, como o formato da sola, a posição do logótipo e o material.
Fluxo de trabalho de mineração offline#
Cada ciclo de mineração offline executa o modelo atual, confirma o que este assinalou e volta a integrar os casos confirmados no treino:
A etapa de revisão é importante porque um "falso positivo" é muitas vezes um objeto real que os anotadores não identificaram, e adicioná-lo como exemplo negativo ensinaria ao modelo a suprimir deteções verdadeiras. O Ultralytics YOLO trata uma imagem de treino com um ficheiro de rótulos em falta ou vazio como uma imagem de fundo, pelo que cada ponto âncora dessa imagem recebe uma pontuação-alvo igual a zero e qualquer previsão fiável nessa posição é penalizada; assim, basta copiar as imagens sem rótulos para adicionar exemplos negativos selecionados a um conjunto de dados YOLO26. O progresso manifesta-se numa precisão superior com o mesmo recall, acompanhado no conjunto de teste completo e numa partição dedicada a exemplos negativos difíceis.
Treinar apenas com os exemplos negativos mais difíceis pode ser contraproducente. No treino de embeddings faciais do FaceNet, selecionar os exemplos negativos mais difíceis logo no início podia fazer com que o modelo colapsasse e mapeasse todas as faces para o mesmo ponto; por isso, os autores treinaram com exemplos negativos semi-difíceis, que ficam mais longe da âncora do que o positivo, mas ainda dentro da margem do triplete.










