Hard Negative Mining
하드 네거티브 마이닝은 모델이 양성으로 가장 자주 오인하는 음성 샘플을 찾아 학습에 집중시켜, 탐지 및 검색에서 오탐을 줄입니다.
하드 네거티브 마이닝은 모델이 가장 크게 틀리는 네거티브 예시를 찾아 학습을 집중하는 전략입니다. 네거티브 예시는 대상 클래스에 속하지 않는 예시이며, 하드 네거티브는 모델이 여전히 포지티브처럼 점수를 매기는 예시입니다. 예를 들면 탐지기가 객체로 박스를 표시한 배경 패치나, 임베딩 모델이 쿼리 가까이에 배치한 관련 없는 이미지가 있습니다. 대부분의 네거티브는 쉬운 예시이며 모델이 이를 처리하게 된 후에는 학습 신호를 거의 제공하지 않습니다. 따라서 어려운 예시를 선택하면 결정 경계를 선명하게 하고 오탐을 줄일 수 있습니다.
하드 네거티브 마이닝의 작동 방식#
어려운 예시의 기준은 작업에 따라 달라집니다.
- 객체 탐지에서 탐지기가 객체로 점수를 매기는 배경 영역은 어려운 예시입니다.
- 분류에서 하드 네거티브는 대상 클래스에 대해 높은 신뢰도를 부여받은 오분류 예시입니다.
- 검색 및 추천 시스템에서 하드 네거티브는 쿼리와 가까운 순위에 오른 관련 없는 항목이며, 점수가 높은 네거티브는 그래디언트에 가장 큰 영향을 미칩니다.
- 메트릭 학습에서 하드 네거티브는 일치하는 포지티브보다 앵커에 더 가까이 위치한 네거티브이며, 트리플렛 마진 손실은 이를 페널티로 처리합니다.
마이닝은 오프라인이나 온라인으로 수행됩니다. 오프라인 마이닝은 학습된 모델을 대규모 네거티브 전용 데이터에 실행해 오탐을 수집하고 학습 세트에 추가한 뒤 재학습합니다. 고전적인 슬라이딩 윈도우 보행자 탐지기는 사람 없는 이미지를 스캔해 오탐을 찾고 이를 사용해 재학습하는 방식으로 학습했습니다. 온라인 마이닝은 각 학습 배치 안에서 어려운 예시를 선택합니다. SSD는 네거티브 기본 박스를 분류 손실 순으로 정렬해 손실이 가장 큰 항목만 유지하며, 포지티브 하나당 네거티브를 최대 3개까지 사용합니다. 온라인 하드 예시 마이닝(OHEM)은 2단계 탐지기의 영역 제안에도 같은 아이디어를 적용합니다. SSD 선택 로직은 몇 줄로 구현할 수 있습니다.
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}")손실 계산에는 8,400개 박스 중 80개, 즉 포지티브 20개와 모델이 객체처럼 점수를 매긴 네거티브 60개가 포함됩니다. 마이닝된 네거티브 60개의 평균 손실은 0.648이며, 네거티브 8,380개 전체의 평균 손실은 0.075입니다. 따라서 그래디언트는 모델이 실제로 혼동하는 배경에 집중됩니다.
하드 네거티브 마이닝과 관련 기법#
- 네거티브 샘플링: 전체 네거티브 중 관리 가능한 일부를 선택하며, 무작위로 선택하는 경우가 많습니다. 하드 네거티브 마이닝은 가장 혼동을 유발하는 네거티브를 선택합니다.
- 포컬 로스: 모든 예시를 손실에 포함하되 분류가 잘 된 예시의 가중치를 낮춥니다. 이 덕분에 RetinaNet과 같은 1단계 탐지기는 명시적인 샘플링 없이 모든 후보 박스로 학습할 수 있습니다.
- 능동 학습: 가능한 포지티브를 포함해 레이블이 지정되지 않은 불확실한 예시를 선택하여 사람이 어노테이션하도록 합니다. 하드 네거티브 마이닝은 이미 네거티브로 확인된 예시를 대상으로 합니다.
- 클래스 재균형: 다운샘플링 및 가중치 상향을 통해 클래스 빈도 불균형을 보정합니다. 빈도가 높은 네거티브 클래스가 반드시 어려운 클래스인 것은 아닙니다.
- 데이터 증강: 기존 샘플의 변형을 생성하지만, 데이터셋에 없던 혼동을 유발하는 객체를 새로 만들 수는 없습니다.
실제 적용 사례#
- 창고 안전 탐지: 팔레트 잭, 선반 반사, 시저 리프트를 반복적으로 잘못 표시하는 지게차 탐지기는 오경보로 작업자의 신뢰를 떨어뜨립니다. 이러한 장면을 네거티브 이미지로 수집해 재학습하면 탐지기가 지게차와 유사한 장비를 구분하는 특성을 학습할 수 있습니다.
- 시각적 제품 검색: 특정 검은색 운동화를 검색했을 때 다른 제품군의 비슷한 신발이 너무 높은 순위에 표시되면 해당 제품은 하드 네거티브가 됩니다. 예를 들어 샴 네트워크의 앵커-포지티브-네거티브 트리플렛에서 네거티브로 사용해 학습하면 임베딩 모델이 밑창 모양, 로고 배치, 소재와 같은 미묘한 차이를 구별하게 됩니다.
오프라인 마이닝 워크플로#
오프라인 마이닝은 매 라운드마다 현재 모델을 실행하고, 모델이 표시한 항목을 확인한 뒤, 확인된 사례를 학습에 다시 반영합니다.
검토 단계가 중요한 이유는 "오탐"이 어노테이터가 놓친 실제 객체인 경우가 많고, 이를 네거티브로 추가하면 모델이 실제 탐지를 억제하도록 학습되기 때문입니다. Ultralytics YOLO는 레이블 파일이 없거나 비어 있는 학습 이미지를 배경 이미지로 처리하므로, 해당 이미지의 모든 앵커 포인트에 타깃 점수 0이 부여되고 그 위치의 신뢰도 높은 예측에는 모두 페널티가 부과되며, 이 때문에 마이닝한 네거티브 샘플을 YOLO26 데이터셋에 추가하려면 레이블 없이 이미지를 복사하기만 하면 됩니다. 진행 상황은 정밀도가 향상되고 재현율은 동일한 수준으로 유지되는 것으로 나타나며, 전체 테스트 세트와 하드 네거티브 전용 슬라이스에서 추적됩니다.
가장 어려운 네거티브만 학습하면 역효과가 날 수 있습니다. FaceNet의 얼굴 임베딩 학습에서는 초기에 가장 어려운 네거티브를 선택하면 모델이 모든 얼굴을 같은 지점에 매핑하도록 붕괴할 수 있습니다. 따라서 저자들은 포지티브보다 앵커에서 멀리 떨어져 있지만 트리플렛 마진 안에는 있는 세미 하드 네거티브를 사용해 학습했습니다.










