Hard Negative Mining
При поиске сложных отрицательных примеров отбираются негативные примеры, которые модель чаще всего путает с позитивными, и обучение сосредоточивается на них. Это сокращает число ложноположительных результатов при обнаружении объектов и поиске.
Поиск сложных негативных примеров — стратегия обучения, при которой выявляются негативные примеры, на которых модель чаще всего ошибается, и обучение концентрируется на них. Негативный пример не относится к целевому классу, а сложный негативный пример — тот, который модель по-прежнему оценивает как позитивный: участок фона, который детектор ограничивает рамкой как объект, или постороннее изображение, которое модель эмбеддингов помещает рядом с запросом. Большинство негативных примеров просты, и после того как модель научится с ними справляться, они почти не дают обучающего сигнала. Поэтому отбор сложных примеров уточняет границы принятия решений и сокращает число ложноположительных результатов.
Как работает отбор сложных негативных примеров#
Сложность примера зависит от задачи:
- В детекции объектов фоновая область считается сложной, если детектор оценивает её как объект.
- В классификации сложный негативный пример — это пример неверного класса, которому присвоена высокая уверенность в целевом классе.
- В поисковых и рекомендательных системах это нерелевантный элемент, получивший оценку, близкую к запросу; негативные примеры с высокими оценками сильнее всего влияют на градиент.
- В метрическом обучении это негативный пример, расположенный ближе к опорному, чем соответствующий позитивный пример; такой пример штрафуется функцией потерь с триплетным отступом.
Поиск выполняется либо офлайн, либо онлайн. При офлайн-поиске обученную модель запускают на большом пуле данных, содержащих только негативные примеры, собирают её ложноположительные результаты, добавляют их в обучающую выборку и повторно обучают модель. Классические детекторы пешеходов со скользящим окном обучались именно так: они искали ложные срабатывания на изображениях без людей, а затем переобучались на них. При онлайн-поиске сложные примеры отбираются внутри каждого обучающего батча. SSD ранжирует негативные боксы по умолчанию по функции потерь классификации и оставляет только примеры с наибольшей потерей — не более 3 негативных на каждый позитивный. Онлайн-поиск сложных примеров (OHEM) применяет ту же идею к предложениям областей у двухэтапных детекторов. Отбор в 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}")Функция потерь учитывает 80 из 8 400 боксов: 20 позитивных и 60 негативных, которые модель с наибольшей вероятностью принимает за объекты. Средняя потеря этих 60 отобранных негативных примеров составляет 0,648 против 0,075 для всех 8 380 негативных примеров, поэтому градиент концентрируется на фоне, который модель действительно путает с объектами.
Поиск сложных негативных примеров и родственные методы#
- Сэмплирование негативных примеров: Выбирает удобное для обработки подмножество всех негативных примеров, часто случайным образом. При поиске сложных негативных примеров выбираются самые неоднозначные.
- Focal loss: Оставляет все примеры в функции потерь, но снижает вес правильно классифицированных. Благодаря этому одноэтапные детекторы, такие как RetinaNet, обучаются на всех кандидатных боксах без явного сэмплирования.
- Активное обучение: Выбирает неразмеченные примеры с низкой уверенностью для разметки человеком, в том числе возможные позитивные примеры. При поиске сложных негативных примеров используются примеры, уже подтверждённые как негативные.
- Балансировка классов: Корректирует неравномерную частоту классов с помощью уменьшения выборки и увеличения веса. Часто встречающийся негативный класс не обязательно является сложным.
- Аугментация данных: Создаёт вариации существующих примеров, но не может добавить объект, который сбивает с толку и которого никогда не было в датасете.
Примеры применения в реальных условиях#
- Детекция угроз безопасности на складе: Детектор вилочных погрузчиков, который постоянно принимает тележки для палет, отражения стеллажей и ножничные подъёмники за вилочные погрузчики, подрывает доверие операторов ложными оповещениями. Сбор таких сцен в виде негативных изображений и повторное обучение помогают детектору усвоить признаки, отличающие вилочный погрузчик от похожей техники.
- Визуальный поиск товаров: Если при поиске конкретной чёрной беговой обуви похожие товары из других линеек ранжируются слишком высоко, они становятся сложными негативными примерами. Обучение на них — например, в качестве негативных примеров в триплетах «опорный — позитивный — негативный» сиамской сети — учит модель эмбеддингов учитывать тонкие различия, такие как форма подошвы, расположение логотипа и материал.
Процесс офлайн-поиска#
В каждом цикле офлайн-поиска запускают текущую модель, проверяют отмеченные ею примеры и добавляют подтверждённые случаи обратно в обучающую выборку:
Этап проверки важен, поскольку «ложноположительный результат» часто оказывается настоящим объектом, пропущенным аннотаторами: если добавить его как негативный пример, модель научится подавлять истинные детекции. Ultralytics YOLO считает обучающее изображение с отсутствующим или пустым файлом меток фоновым изображением, поэтому для каждой опорной точки на нём целевая оценка равна нулю, и любое уверенное предсказание на этом месте штрафуется. Поэтому добавить найденные негативные примеры в датасет YOLO26 можно, просто скопировав изображения без меток. Прогресс выражается в повышении точности при том же уровне полноты; показатели отслеживают на полной тестовой выборке и на отдельной подвыборке сложных негативных примеров.
Обучение только на самых сложных негативных примерах может дать обратный эффект. При обучении эмбеддингов лиц для FaceNet выбор самых сложных негативных примеров на раннем этапе мог привести к коллапсу модели, при котором все лица отображались в одну точку. Поэтому авторы обучались на полусложных негативных примерах: они расположены дальше от опорного примера, чем позитивный, но всё ещё внутри триплетного отступа.










