Hard Negative Mining
하드 네거티브 마이닝이 혼동하기 쉬운 네거티브 예제를 식별하고 YOLO 모델 학습을 개선하여 컴퓨터 비전의 거짓 양성을 줄이는 방법을 알아봅니다.
하드 네거티브 마이닝은 모델이 유난히 그럴듯하다고 판단하는 네거티브 예시를 식별하고 학습 중 더 큰 비중을 두는 학습 데이터 전략입니다. 네거티브 예시는 대상 클래스에 속하지 않지만, 하드 네거티브는 포지티브와 충분히 유사하여 높은 점수, 잘못된 detection 또는 인접한 embedding을 생성합니다. 모델에 쉬운 배경 예시를 반복해서 보여주는 대신 이러한 혼동 사례에 집중하면 하드 네거티브 마이닝을 통해 결정 경계를 더욱 명확하게 하고 false positive를 줄일 수 있습니다.
하드 네거티브 마이닝의 작동 방식#
이 프로세스는 일반적으로 대표적인 training data로 학습한 baseline 모델에서 시작합니다. 그런 다음 모델은 레이블이 지정되지 않은 production 이미지, 네거티브만 포함된 장면 또는 각 training batch 내의 예시와 같은 더 큰 후보 풀을 평가합니다. 네거티브임에도 높은 positive 점수를 받은 후보를 검토 및 향후 학습 대상으로 선택합니다.
무엇을 “hard”로 간주할지는 task에 따라 다릅니다:
- object detection에서는 detector가 배경 영역을 대상 객체로 오인할 때 해당 영역이 hard example이 됩니다.
- classification에서는 대상 class에 대해 높은 confidence로 잘못된 class가 할당된 예시입니다.
- retrieval 또는 metric learning에서는 embedding 공간에서 query와 가까운 순위로 배치된 관련 없는 항목입니다. Google의 recommendation model을 위한 negative sampling 가이드는 하드 네거티브를 gradient에 큰 영향을 미치는 고득점 네거티브 항목으로 설명합니다.
- triplet learning에서는 matching positive와 비교했을 때 negative가 anchor에 지나치게 가깝게 나타납니다. PyTorch TripletMarginLoss 문서는 상대적 유사도를 학습하는 데 사용되는 anchor-positive-negative 구조를 설명합니다.
마이닝은 주기적으로 대규모 dataset 전체에서 모델을 실행하는 offline 방식으로 수행하거나, 현재 mini-batch에서 어려운 negative를 선택하는 online 방식으로 수행할 수 있습니다. Keras 하드 네거티브 마이닝 layer는 candidate logit을 기반으로 query별 selection을 수행하는 예시를 제공합니다.
하드 네거티브가 중요한 이유#
대부분의 네거티브 예시는 쉽습니다. 예를 들어 빈 하늘은 forklift detector를 혼동시킬 가능성이 낮습니다. 모델이 이러한 예시를 올바르게 분류하면 해당 예시가 제공하는 유용한 학습 신호는 거의 없습니다. 하드 네거티브는 모델이 잘못 이해한 정확한 시각적 또는 의미적 feature를 드러냅니다.
하드 네거티브는 false alarm이 precision을 낮출 때 특히 유용합니다. scikit-learn precision-recall 가이드에 설명된 것처럼 precision-recall 분석을 통해 재학습이 허용할 수 없는 recall 저하 없이 실제로 false positive를 줄이는지 확인할 수 있습니다.
하드 네거티브 마이닝은 관련 기법과 다음과 같은 차이가 있습니다:
- Negative sampling은 전체 negative 중 관리 가능한 하위 집합을 선택하고, 하드 네거티브 마이닝은 가장 혼동을 일으키는 항목을 우선시합니다.
- **Active learning**은 일반적으로 잠재적인 positive를 포함하여 사람이 labeling할 불확실한 예시를 선택합니다. 하드 네거티브 마이닝은 모델에 문제를 일으키는 것으로 확인된 negative를 대상으로 합니다.
- **Focal loss**는 loss function 내부에서 예시의 가중치를 변경하는 반면, 마이닝은 어떤 예시를 선택하거나 강조할지를 변경합니다.
- Class rebalancing은 불균등한 class 빈도를 처리합니다. Google의 class-imbalanced dataset 가이드는 downsampling 및 weighting을 다루지만, 빈도가 높은 negative가 반드시 어려운 negative인 것은 아닙니다.
- **Data augmentation**은 기존 sample의 변형을 생성하지만, 알려지지 않은 production failure mode를 안정적으로 도입할 수는 없습니다.
실제 적용 사례#
Warehouse safety detection: forklift detector가 pallet jack, shelving reflection, scissor lift를 반복적으로 forklift로 식별한다고 가정해 보겠습니다. 이러한 false positive는 불필요한 alert를 발생시키고 operator의 신뢰를 낮출 수 있습니다. 엔지니어는 이러한 장면을 forklift annotation이 없는 negative image로 수집하여 dataset에 추가한 후, detector를 재학습시켜 대상과 유사한 장비를 구분하도록 할 수 있습니다.
Visual product search: 고객이 특정 검은색 running shoe를 검색했지만 retrieval system이 다른 product line의 시각적으로 유사한 신발을 지나치게 높은 순위로 배치한다고 가정해 보겠습니다. 이러한 불일치 product가 하드 네거티브가 됩니다. 이를 사용해 학습하면 embedding model이 밑창 형태, logo 배치, 소재와 같은 미세한 차이를 유지하도록 할 수 있습니다. Keras Siamese network 예시는 anchor, positive, negative image가 similarity learning을 지원하는 방식을 보여 줍니다.
실용적인 마이닝 workflow#
신뢰할 수 있는 workflow는 반복적입니다:
- 대표적인 validation 및 production data에서 prediction을 실행합니다.
- Ultralytics validation mode와 confusion matrix를 사용하여 confidence가 높은 false positive와 class confusion pattern을 검토합니다.
- 모든 후보가 실제로 negative인지 확인합니다. 잘못된 label은 모델이 실제 객체를 억제하도록 학습시킬 수 있습니다.
- 관련 sample을 찾고 중복을 제거하며 다양한 배경, 관점 및 조건을 유지합니다.
- 재학습한 후 computer vision model testing workflow를 사용하여 전체 test set과 전용 hard-negative slice 모두에서 성능을 비교합니다.
Ultralytics Explorer similarity search를 사용하면 알려진 false positive와 유사한 image를 찾는 데 도움이 됩니다:
from ultralytics import Explorer
# Build an embedding index for the example dataset
explorer = Explorer(data="coco128.yaml", model="yolo26n.pt")
explorer.create_embeddings_table()
# Retrieve visually similar candidates for human review
candidates = explorer.get_similar(
img="https://ultralytics.com/images/bus.jpg",
limit=12,
)
print(candidates.head())유사성만으로는 후보가 하드 네거티브라는 사실을 입증할 수 없으므로 reviewer가 ground-truth label을 확인해야 합니다. 팀은 Ultralytics Platform을 사용하여 후보 image를 구성하고, 해당 image에 annotation을 추가하거나 수정하며, 업데이트된 model을 학습하고, deployment를 모니터링할 수 있습니다.
절대적으로 가장 어려운 예시만 선택하지 마십시오. 일부는 잘못 labeling되었거나 모호하거나 training을 불안정하게 만드는 extreme outlier일 수 있습니다. 쉬운 negative, 중간 정도로 어려운 negative, 하드 네거티브를 균형 있게 혼합하면 일반적으로 폭넓은 coverage를 유지하면서 모델의 현재 경계가 실패하는 지점을 학습시킬 수 있습니다.









