Мы изо всех сил пытаемся заставить нашу Yolov3 работать над проблемой обнаружения 2 классов (размеры объектов обоих классов различны и похожи, как правило, малы, а сам размер не помогает дифференцировать тип объекта). Мы думаем, что обучение не работает из-за некоторой проблемы с якорными ящиками, так как мы можем ясно видеть, что в зависимости от назначенных якорных значений yolo_output_0, yolo_output_1 или yolo_output_2 не могут вернуть значение потерь, отличное от 0 (для xy, hw и компоненты класса). Тем не менее, даже если есть несколько потоков о якорных ящиках, мы не можем найти четкого объяснения того, как они назначаются специально для YOLOv3 .
Пока что мы делаем, чтобы узнать размер из блоков: 1 - мы запускаем метод кластеризации на нормализованных ограничивающих прямоугольниках (в соответствии с исходным размером изображения) и получаем центроиды кластеров. В нашем случае у нас есть 2 кластера, а центроиды - это что-то вроде (0,087, 0,052) и (0,178, 0,099). 2- Затем мы масштабируем значения в соответствии с масштабированием, которое мы собираемся применить к изображениям во время тренировки. Мы работаем с прямоугольными angular изображениями (256, 416), поэтому мы получаем ограничивающие рамки (22,22) и (46,42). Обратите внимание, что мы округлили значения, так как прочитали, что yoloV3 ожидает фактические значения пикселей. 3- Так как мы вычисляем якоря в 3 разных масштабах (3 пропускаемых соединения), предыдущие значения якоря будут соответствовать большому масштабу (52). Якоря для двух других шкал (13 и 26) рассчитываются путем деления первого ancho / 2 и /4.
Мы даже не уверены, что мы правы до этого момента. Если мы посмотрим на код в исходном файле models.py, то увидим следующее:
yolo_anchors = np.array ([(10, 13), (16, 30), (33, 23), (30, 61), (62, 45), (59, 119), (116, 90), (156, 198), (373, 326)], np.float32) / 416 yolo_anchor_masks = np.array ([ [6, 7, 8], [3, 4, 5], [0, 1, 2]])
Итак, есть 9 якорей, которые упорядочены от меньшего к большему, и anchor_masks определить, если разрешение, на котором они используются, это правильно? На самом деле, наш первый вопрос: 9 якорей или 3 якоря в 3 разных масштабах? Если да, то как они рассчитываются? мы знаем о скрипте gen_anchors в yolo_v2 и аналогичном скрипте в yolov3, однако мы не знаем, рассчитывают ли они 9 кластеров, а затем упорядочивают их по размеру или следуют процедуре, аналогичной нашей.
Кроме того, мы не до конца понимаем, почему эти поля делятся на 416 (размер изображения). Это будет означать наличие якорей, которые не являются целыми числами (значения пикселей), что было указано, что необходимо для yolov3.
Мы были бы очень благодарны, если бы кто-нибудь смог дать нам некоторое представление об этих вопросах и помочь нам лучше понять, как работает yoloV3.
Спасибо и всего наилучшего Карен