Hard Negative Mining
Узнай, как поиск сложных негативных примеров снижает количество ложноположительных срабатываний в компьютерном зрении за счёт выявления запутывающих негативных примеров и улучшения обучения моделей YOLO.
Майнинг сложных негативных примеров — это стратегия работы с обучающими данными, которая выявляет негативные примеры, кажущиеся модели необычно убедительными, и уделяет им больше внимания во время обучения. Негативный пример не относится к целевому классу, а сложный негативный пример достаточно похож на положительный, чтобы получить высокий балл, ошибочное обнаружение или близкое вложение. Сосредоточившись на таких неоднозначных случаях вместо постоянного показа модели простых фоновых примеров, майнинг сложных негативных примеров помогает уточнить границы решений и уменьшить число ложноположительных срабатываний.
Как работает майнинг сложных негативных примеров#
Обычно процесс начинается с базовой модели, обученной на репрезентативных обучающих данных. Затем модель оценивает больший пул кандидатов, например неразмеченные производственные изображения, сцены только с негативными примерами или примеры из каждого обучающего батча. Кандидаты, получившие высокие положительные оценки несмотря на то, что являются негативными, отбираются для проверки и последующего обучения.
То, что считается «сложным», зависит от задачи:
- В обнаружении объектов фоновая область считается сложной, если детектор принимает её за целевой объект.
- В классификации это пример неправильного класса, которому с высокой уверенностью присвоен целевой класс.
- В задачах поиска или метрического обучения это нерелевантный элемент, расположенный в пространстве вложений близко к запросу. В рекомендациях Google по негативному сэмплированию для рекомендательных моделей сложные негативные примеры описываются как негативные элементы с высокими оценками, которые существенно влияют на градиент.
- В триплетном обучении негативный пример оказывается слишком близко к якорю по сравнению с соответствующим положительным примером. В документации PyTorch по TripletMarginLoss объясняется структура «якорь — положительный пример — негативный пример», используемая для обучения относительному сходству.
Майнинг может выполняться офлайн — при периодическом прогоне модели по большому набору данных, — или онлайн — при выборе сложных негативных примеров из текущего мини-батча. Слой Keras для майнинга сложных негативных примеров демонстрирует выборку для каждого запроса на основе логитов кандидатов.
Почему сложные негативные примеры важны#
Большинство негативных примеров просты: пустое небо вряд ли введёт в заблуждение детектор погрузчиков. После того как модель начинает правильно классифицировать такие примеры, они дают мало полезного обучающего сигнала. Сложные негативные примеры выявляют конкретные визуальные или семантические признаки, которые модель понимает неправильно.
Они особенно ценны, когда ложные срабатывания снижают точность. Анализ зависимости точности от полноты помогает определить, действительно ли дообучение уменьшает число ложноположительных срабатываний без неприемлемого снижения полноты, как показано в руководстве scikit-learn по точности и полноте.
Майнинг сложных негативных примеров отличается от связанных методов:
- Негативное сэмплирование выбирает управляемое подмножество всех негативных примеров, а майнинг сложных негативных примеров отдаёт приоритет самым неоднозначным из них.
- Активное обучение обычно выбирает неуверенные примеры для разметки человеком, включая потенциально положительные примеры. Майнинг сложных негативных примеров специально нацелен на подтверждённые негативные примеры, которые создают трудности для модели.
- Фокальная функция потерь изменяет веса примеров внутри функции потерь, тогда как майнинг изменяет набор выбираемых или выделяемых примеров.
- Балансировка классов устраняет неравномерность частот классов. В рекомендациях Google по несбалансированным наборам данных рассматриваются уменьшение выборки и взвешивание, однако часто встречающиеся негативные примеры не обязательно являются сложными.
- Аугментация данных создаёт варианты существующих образцов, но не может надёжно воспроизвести неизвестный сценарий сбоя в рабочей среде.
Практические применения#
Обнаружение угроз безопасности на складе: предположим, что детектор погрузчиков постоянно принимает тележки для поддонов, отражения стеллажей и ножничные подъёмники за погрузчики. Такие ложноположительные срабатывания могут вызывать ненужные оповещения и снижать доверие операторов. Инженеры могут собрать эти сцены в виде негативных изображений без разметки погрузчиков, добавить их в набор данных и переобучить детектор, чтобы он отличал целевой объект от похожего оборудования.
Визуальный поиск товаров: клиент ищет конкретные чёрные кроссовки для бега, но система поиска слишком высоко ранжирует визуально похожие кроссовки из других товарных линеек. Такие неподходящие товары становятся сложными негативными примерами. Обучение на них помогает модели вложений сохранять тонкие различия, например форму подошвы, расположение логотипа и материал. В примере сиамской сети Keras показано, как якорные, положительные и негативные изображения поддерживают обучение сходству.
Практический рабочий процесс майнинга#
Надёжный рабочий процесс является итеративным:
- Запусти предсказания на репрезентативных валидационных и производственных данных.
- Проверь ложноположительные срабатывания с высокой уверенностью и закономерности путаницы классов с помощью режима валидации Ultralytics и матрицы ошибок.
- Убедись, что каждый кандидат действительно является негативным примером: неправильные метки могут научить модель подавлять реальные объекты.
- Найди связанные образцы, удали дубликаты и сохрани разнообразие фонов, ракурсов и условий.
- Переобучи модель, а затем сравни производительность как на полном тестовом наборе, так и на отдельной выборке сложных негативных примеров с использованием рабочего процесса тестирования моделей компьютерного зрения.
Поиск похожих изображений в 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())Одного сходства недостаточно, чтобы доказать, что кандидат является сложным негативным примером; проверяющий должен подтвердить его истинную метку. Команды могут использовать Ultralytics Platform, чтобы организовывать изображения-кандидаты, размечать или исправлять их, обучать обновлённые модели и контролировать развёртывания.
Не выбирай только абсолютно самые сложные примеры. Некоторые из них могут быть неправильно размечены, неоднозначны или представлять собой экстремальные выбросы, дестабилизирующие обучение. Сбалансированная смесь простых, умеренно сложных и сложных негативных примеров обычно обеспечивает широкий охват и одновременно обучает модель выявлять слабые места текущей границы решений.









