Загрузка урока...
Будем улучшать двухэтапный подход R-CNN.
Давайте работать сразу с картинкой и не применять никакие алгоритмы для поиска кандидатов. Решаем задачу, когда у нас CC классов для детекции. Возьмем квадратное изображение и разобьем его на S⋅SS⋅S квадратов. Представьте себе это как тетрадный лист, в котором нарисовали квадрат 10 на 10 клеточек, а потом разбили его на маленькие квадратики по 2 на 2 клетки. Будем хотеть, чтобы сетка для каждого такого квадрата нам предсказывала 5+C5+C чисел. Первые 2 отвечают за координаты центра bbox внутри нашей клеточки 2 на 2. Не всей картинки 10 на 10, а именно нашего миниквадрата 2 на 2. Вторые два отвечают за ширину и высоту bbox, тоже очень понятные величины. Пятое число - уверенность модели в том, что в квадратике 2 на 2 есть какой-то объект. Если его нет, там будет что-то близкое к 0, иначе
1. Оставшиеся C чисел будут те же, что и при обычной задаче классификации: они показывают вероятности классов.
Звучит одновременно и просто, и сложно. Но идея, как таковая, очень красивая: разбиваем большую картинку на несколько квадратиков поменьше и пытаемся найти что-то в каждом. Можно посмотреть на архитектуру ниже:

Картинка отсюда.
Какие преимущества у данного подхода?
Обучается вся сеть целиком.
На изображение смотрим только один раз (отсюда и название You Only Look Once). Нам не надо сначала генерировать кандидатов.
Отсутствие разных блоков позволяет значительно ускорить модель. Современные наследники YOLO работают не только на дорогостоящих видеокартах, но и на мобильных телефонах и одноплатных компьютерах (Raspberry Pi, Orange Pi, etc.). Конечно, этому способствовало и развитие специальных ускорителей для нейросетей (NPU) в мобильных процессорах.
В оригинальной архитектуре используется сеть DarkNet. Современные архитектуры (YOLO v8, v9, NAS) пошли ещё дальше и используют более хитрые методики и комбинации сверток (в том числе и упомянутый ранее Bottleneck). Рассказ про сверточные архитектуры современного CV и идеи за ними заслуживает отдельного курса, поэтому не будет в это углубляться и перейдем к тому, как можно оценивать модели детекции.
Мы разобрались с нейросетями для детекции. А как измерить качество?
Практически всегда считают метрику IoU (Intersection over Union). Она показывает отношение площади пересечения обнаруженного bbox с истинным к площади объединения:

Картинка отсюда.
Тут понятно, что чем лучше модель, тем ближе это значение к 1 (площади в числителе и знаменателе будут стремиться к равенству) . Если же наша модель совсем промазала, то метрика равна нулю (числитель будет 0).
Хорошо, но это мы измеряем только качество наших bbox, а мы же хотим ещё и классификацию объектов в них. Как её характеризовать?
Давайте выдавать метки TP (True Positive), FP (False Positive) и FN (False Negative) уже известные вам по курсу Machine Learning:
IoU ≥ 0.5: TP, если класс определен верно;
0.5 > IoU: FP;
IoU ≥ 0.5: FN, если класс определен неверно.
Дальше с этими метриками уже можно вычислять известный вам Precision и Recall. Нередко можно встретить метрику AP и mAP. Что это такое?
Для AP (Average Precision) требуется площадь под Precision-Recall кривой (AUC, если вспомнить термины ML). mAP (mean Average Precision) является просто средним AP по всем классам. На самом деле, как правильно считать AP - предмет споров и обсуждений, ведь мы не можем считать метрики для бесконечного числа точек.
Например, есть подход PASCAL VOC. В нём берут 11 точек по recall (0, 0.1, 0.2, ..., 1.0) и считают precision в них. Формула для AP:
AP=111Σimax(Precision(j≥i))AP=111Σimax(Precision(j≥i)),
где i, j пробегают по нашим точкам recall. Мы берём максимум значения Precision в точке i или правее для сглаживания PR кривой и превращения её в более "столбчатый" вид.
В этом материале нет файлов для просмотра.