Hard Negative Mining
하드 네거티브 마이닝(hard negative mining)이 혼동을 주는 네거티브 예제를 식별하고 YOLO 모델 학습을 개선하여 컴퓨터 비전에서 오탐(false positive)을 줄이는 방법을 알아보세요.
Hard negative mining은 모델이 특별히 확신을 가지고 오인하는 네거티브 예제를 식별하고 학습 과정에서 더 큰 비중을 두는 학습 데이터 전략입니다. 네거티브 예제는 타겟 클래스에 속하지 않는 반면, **하드 네거티브(hard negative)**는 포지티브와 너무 유사하여 높은 점수, 잘못된 감지 또는 인접한 임베딩을 생성합니다. 모델에 쉬운 배경 예제를 반복적으로 보여주는 대신 이러한 혼동을 주는 케이스에 집중함으로써, hard negative mining은 결정 경계를 선명하게 하고 오탐지(false positive)를 줄일 수 있습니다.
Hard Negative Mining의 작동 방식#
이 프로세스는 일반적으로 대표적인 학습 데이터로 학습된 베이스라인 모델로 시작합니다. 그 후 모델은 레이블이 지정되지 않은 프로덕션 이미지, 네거티브 전용 장면 또는 각 학습 배치 내의 예제와 같은 더 큰 후보 풀을 평가합니다. 네거티브임에도 불구하고 높은 포지티브 점수를 받는 후보들은 검토 및 향후 학습을 위해 선택됩니다.
"하드(hard)"에 해당하는 기준은 태스크에 따라 다릅니다:
- 객체 검출(object detection)에서 배경 영역은 검출기가 이를 타겟 객체로 오인할 때 하드가 됩니다.
- 분류(classification)에서는 타겟 클래스에 대해 높은 신뢰도가 할당된 잘못된 클래스 예제입니다.
- 검색 또는 메트릭 학습(metric learning)에서는 임베딩 공간에서 쿼리 가깝게 순위가 매겨진 관련 없는 항목입니다. 추천 모델을 위한 네거티브 샘플링에 대한 Google의 지침에서는 하드 네거티브를 그래디언트에 강한 영향을 미치는 고득점 네거티브 항목으로 설명합니다.
- 트리플렛 학습(triplet learning)에서 네거티브는 일치하는 포지티브에 비해 앵커에 너무 가깝게 나타납니다. PyTorch TripletMarginLoss 문서에서는 상대적 유사성을 학습하는 데 사용되는 앵커-포지티브-네거티브 구조를 설명합니다.
마이닝은 대규모 데이터셋에서 주기적으로 모델을 실행하는 오프라인 방식으로 진행될 수도 있고, 현재 미니 배치에서 어려운 네거티브를 선택하는 온라인 방식으로 진행될 수도 있습니다. Keras hard negative mining layer는 후보 로짓을 기반으로 한 쿼리별 선택의 예를 제공합니다.
Hard Negatives가 중요한 이유#
대부분의 네거티브 예제는 쉽습니다. 빈 하늘은 지게차 검출기를 혼란스럽게 할 가능성이 낮습니다. 모델이 이러한 예제를 올바르게 분류하고 나면, 이는 유용한 학습 신호에 거의 기여하지 않습니다. 하드 네거티브는 모델이 오해한 정확한 시각적 또는 의미론적 특징을 노출합니다.
이는 오탐으로 인해 정밀도(precision)가 저하될 때 특히 유용합니다. scikit-learn 정밀도-재현율 가이드에서 설명하는 바와 같이, 정밀도-재현율 분석은 재현율의 수용 불가능한 저하 없이 재학습이 실제로 오탐지를 줄이는지 확인하는 데 도움이 됩니다.
Hard negative mining은 관련 기술과 다음과 같은 차이가 있습니다:
- **네거티브 샘플링(Negative sampling)**은 모든 네거티브 중 관리 가능한 하위 집합을 선택하는 반면, hard negative mining은 가장 혼동을 주는 항목을 우선시합니다.
- **능동 학습(Active learning)**은 일반적으로 잠재적 포지션을 포함하여 인간의 레이블 지정을 위한 불확실한 예제를 선택합니다. Hard negative mining은 모델에 도전 과제를 주는 확인된 네거티브를 구체적으로 타겟팅합니다.
- **포커스 손실(Focal loss)**은 손실 함수 내에서 예제에 가중치가 부여되는 방식을 변경하는 반면, 마이닝은 선택되거나 강조되는 예제를 변경합니다.
- **클래스 재균형(Class rebalancing)**은 불균등한 클래스 빈도를 해결합니다. Google의 클래스 불균형 데이터셋 가이드는 다운샘플링과 가중치 지정을 다루지만, 빈번한 네거티브가 반드시 어려운 네거티브인 것은 아닙니다.
- **데이터 증강(Data augmentation)**은 기존 샘플의 변형을 생성하지만, 알 수 없는 프로덕션 실패 모드를 안정적으로 도입할 수는 없습니다.
실제 애플리케이션 사례#
창고 안전 감지: 지게차 검출기가 팔레트 자크, 선반 반사, 가위형 리프트를 지게차로 반복적으로 식별한다고 가정해 보겠습니다. 이러한 오탐지는 불필요한 경고를 유발하고 작업자의 신뢰를 떨어뜨릴 수 있습니다. 엔지니어는 이러한 장면을 지게차 주석이 없는 네거티브 이미지로 수집하고, 이를 데이터셋에 추가한 후, 타겟을 유사한 장비와 구별하도록 검출기를 재학습할 수 있습니다.
시각적 제품 검색: 고객이 특정 검은색 러닝화를 검색하지만, 검색 시스템이 서로 다른 제품군의 시각적으로 유사한 신발의 순위를 너무 높게 지정합니다. 이러한 일치하지 않는 제품은 하드 네거티브가 됩니다. 이를 바탕으로 학습하면 임베딩 모델이 밑창 모양, 로고 배치, 소재와 같은 미묘한 차이를 보존하도록 유도할 수 있습니다. Keras Siamese network 예제는 앵커, 포지티브, 네거티브 이미지가 유사성 학습을 지원하는 방식을 보여줍니다.
실용적인 마이닝 워크플로#
신뢰할 수 있는 워크플로는 반복적입니다:
- 대표적인 검증 및 프로덕션 데이터에 대해 예측을 실행합니다.
- Ultralytics 검증 모드(validation mode)와 혼동 행렬(confusion matrix)을 사용하여 높은 신뢰도의 오탐지 및 클래스 혼동 패턴을 검토합니다.
- 모든 후보가 진정으로 네거티브인지 확인합니다. 잘못된 레이블은 모델이 실제 객체를 억제하도록 학습시킬 수 있습니다.
- 관련 샘플을 찾고, 중복을 제거하며, 다양한 배경, 관점, 조건을 유지합니다.
- 컴퓨터 비전 모델 테스트 워크플로를 사용하여 전체 테스트 세트와 전용 하드 네거티브 슬라이드 모두에서 성능을 재학습하고 비교합니다.
Ultralytics Explorer 유사도 검색은 알려진 오탐지와 유사한 이미지를 표면화하는 데 도움이 될 수 있습니다:
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())유사성만으로는 후보가 하드 네거티브임을 증명할 수 없습니다. 검토자가 그라운드 트루스(ground-truth) 레이블을 확인해야 합니다. 팀은 Ultralytics 플랫폼(Ultralytics Platform)을 사용하여 후보 이미지를 구성하고, 주석을 달거나 수정하며, 업데이트된 모델을 학습하고 배포를 모니터링할 수 있습니다.
절대적으로 가장 어려운 예제만 선택하는 것은 피하세요. 일부는 레이블이 잘못되었거나 모호하거나 학습을 불안정하게 만드는 극단적인 이상치일 수 있습니다. 쉽고, 적당히 어렵고, 하드한 네거티브가 균형 있게 섞인 구성은 모델이 현재 경계에서 실패하는 지점을 가르치는 동시에 일반적으로 광범위한 커버리지를 유지합니다.






