**Функция потерь по-разному обрабатывает разные ящики, а механизм распознавания лучшего ящика от всех остальных является основой потери YOLO. **Использование потери достоверности отдельного объекта для обработки оценок работает лучше, чем рассмотрение достоверности вероятности класса как оценки. Рассмотрение вероятности класса как оценки достоверности при обнаружении цели SSD значительно хуже, чем модель Yolo с достоверностью.
Например, на изображении выше мы ожидаем, что красная рамка будет иметь низкую объективность, синяя рамка — среднюю объективность, а зеленая рамка — высокую объективность. Это связано с тем, что зеленая рамка «плотно» прилегает к нашему объекту, синяя рамка прилегает свободно, а красная рамка вообще не содержит никаких объектов.
Лучшие блоки сами по себе несут потерю ограничивающего прямоугольника (из-за не совсем идеального соответствия объекту) и потерю классификации (из-за неправильной классификации), что приводит к тому, что сетевые параметры, связанные с этими блоками, улучшают положение и классификацию блока, в то время как эти коробки также Все остальные неоптимальные коробки вместе участвуют в потере доверия.
Три условия проигрыша Yolov5:
Для каждого прогноза ограничивающей рамки существует связанное с ним значение прогноза, называемое «объектностью». Термин потери объектности учит сеть, как прогнозировать правильный IoU, в то время как потеря координат учит сеть, как лучше прогнозировать ограничивающие рамки (в конечном итоге подталкивая IoU к 1,0).
```Достоверность категории = оценка категории * потеря объектности``
Во время вывода мы обычно прогнозируем несколько ограничивающих рамок с разным покрытием для каждого объекта. Мы хотим, чтобы алгоритм постобработки выбирал ограничивающую рамку, которая наиболее точно покрывает объект. Мы также хотим выбрать ограничивающие рамки, которые обеспечивают правильное предсказание класса объекта. Как алгоритм узнает, какую ограничивающую рамку выбрать?
Во-первых, предметность Расскажите, насколько хорошее покрытие коробки,поэтому имеет очень маленькийobjectness(<0.005)Ограничивающая рамка будет удалена,Даже в модуль NMS не попадает. Это помогает устранить около 90% ограничивающих рамок.
Во-вторых, NMS выполняется отдельно для каждой категории, поэтому баллы по категориям масштабируются в соответствии с объектностью ограничивающих рамок для значимого сравнения. Если у нас есть две ограничивающие рамки с высоким перекрытием, первая имеет объектность 0,9 и вероятность 0,8 для людей (взвешенная оценка 0,72), а вторая имеет объектность 0,5 и вероятность 0,8 для людей (взвешенная оценка 0,8). 0.40) ), то первая ограничивающая рамка будет сохранена, а вторая ограничивающая рамка будет отброшена в NMS, поскольку объектность первой ограничивающей рамки делает ее более достоверной.
Представьте себе профессора со следующей стратегией преподавания: на первом задании она ищет студентов, которые хорошо справились с заданием, и усердно работает над проверкой и оценкой их заданий, чтобы они преуспели в предмете. Чтобы сосредоточиться, она не стала бы оценивать работу отстающих учеников. Вместо этого она даст им шанс преуспеть в следующем задании.
С одной стороны, мы хотим, чтобы обученная модель эффективно сходилась. Сети богаты параметрами, и над каждым параметром достаточно работы, поэтому не нужно спешить с оптимизацией всех параметров сразу. Лучше воспользоваться относительным успехом некоторых ограничивающих рамок и подталкивать их только для успешного захвата объектов этого типа.
С другой стороны, мы хотим, чтобы все ограничивающие рамки теряли объектность, потому что мы хотим, чтобы все ограничивающие рамки научились оценивать, хорошие они или плохие, потому что последующая NMS требует этого веса.
Учитывая важность утраты предметности, мы думаем над вопросом:
# Objectness
# iou.detach() Градиент IOU не будет обновлен iou не является параметром обратного распространения ошибки Таким образом, нет необходимости обратного распространения информации о градиенте.
# iou.shape = [1659]
iou = iou.detach().clamp(0).type(tobj.dtype)
# прямо здесь iou Проведите еще одну оптимизацию: когда положительный образец появится в нескольких GT Ситуация такая же grid Есть два в gt (Плотные объекты схожей формы)
# There maybe several GTs match the same anchor when calculate ComputeLoss in the scene with dense targets
if self.sort_obj_iou:
# https://github.com/ultralytics/yolov5/issues/3605
# There maybe several GTs match the same anchor when calculate ComputeLoss in the scene with dense targets
j = iou.argsort()
# Если то же самое grid Появляются двое GT Затем после сортировки каждого grid в score_iou Это гарантированно будет самым большим
# (Маленькие будут покрыты Поскольку координаты одной сетки должны быть одинаковыми) то в хронологическом порядке, Последний всегда самый большой iou рассчитать loss
b, a, gj, gi, iou = b[j], a[j], gj[j], gi[j], iou[j]
# Прогнозная информация имеет доверие Однако реальная информация о кадре не имеет уровня достоверности. Поэтому нам нужно искусственно задать стандартный уровень достоверности.
# self.gr — это ты ratio [0, 1] Чем больше self.gr, тем ближе к вам уверенность. Чем меньше self.gr, тем уровень достоверности ближе к 1 (искусственное увеличение сложности обучения)
if self.gr < 1:
iou = (1.0 - self.gr) + self.gr * iou
tobj[b, a, gj, gi] = iou # iou ratio
Если вы считаете, что это хорошо, поставьте звездочку: https://github.com/315386775/DeepLearing-Interview-Awesome-2024