Вопросы о функции потери в yolov2? - PullRequest
0 голосов
/ 06 декабря 2018

Я прочитал реализацию yolov2. У меня есть несколько вопросов по поводу его потери. Ниже приведен псевдокод функции потерь, надеюсь, я все понял правильно.

costs = np.zeros(output.shape)
for pred_box in all prediction box:  
    if (max iou pred_box has with all truth box < threshold):
        costs[pred_box][obj] = (sigmoid(obj)-0)^2 * 1
    else:
        costs[pred_box][obj] = 0
    costs[pred_box][x] = (sigmoid(x)-0.5)^2 * 0.01  
    costs[pred_box][y] = (sigmoid(y)-0.5)^2 * 0.01  
    costs[pred_box][w] = (w-0)^2 * 0.01  
    costs[pred_box][h] = (h-0)^2 * 0.01  
for truth_box all ground truth box:  
    pred_box = the one prediction box that is supposed to predict for truth_box
    costs[pred_box][obj] = (1-sigmoid(obj))^2 * 5  
    costs[pred_box][x] = (sigmoid(x)-truex)^2 * (2- truew*trueh/imagew*imageh)  
    costs[pred_box][y] = (sigmoid(y)-truey)^2 * (2- truew*trueh/imagew*imageh)  
    costs[pred_box][w] = (w-log(truew/anchorw))^2 * (2- truew*trueh/imagew*imageh)  
    costs[pred_box][h] = (h-log(trueh/anchorh))^2 * (2- truew*trueh/imagew*imageh)  
    costs[pred_box][classes] = softmax_euclidean  
total loss = sum(costs)

IУ меня есть несколько вопросов по этому поводу:

1.Код случайным образом изменяет размеры изображений поезда до размеров от 320 до 608 каждые 10 партий, но размер якорного ящика не изменяется соответственно. Почему бы не изменить размер якоря тоже.означает, что вы выбрали набор наиболее распространенных привязок на карте объектов 13 * 13, эти привязки не будут распространены на карте объектов 19 * 19, так почему бы не изменить размер привязки в соответствии с размером изображения.

2. Применяется ли стоимость для прогноза x, y, w, h для ящиков, которым не назначена истина, которая толкает w, h для точного соответствия якоря, а x, y центрироваться в ячейке с помощьюпо умолчанию, полезно и почему. Почему бы не применить прогнозирование стоимости местоположения только к тем, кому присвоена истина, и игнорировать неназначенные.прогнозирование всех блоков без назначенной правды. В yolov2 прогноз obj для блоков без назначенной правды - это не все применяемые затраты, а только те, для которых не назначена истина, и они не сильно совпадают со всей правдой и применяются.Почему это сложно?

1 Ответ

0 голосов
/ 18 декабря 2018

1

В реализации YOLOv2 Случайная обрезка используется для дополнения обучающих данных.Случайная обрезка обрезает часть изображения и расширяет его так, чтобы он имел тот же размер, что и исходный.

Это увеличение обучающих данных делает обученную сеть устойчивой к объектам разных размеров, которых она не видела в обучающих данных.Таким образом, якорные ящики не должны быть изменены в ходе этого процесса.

Помните, что якорные ящики имеют допущения по форме объектов, которые подают перед тренировкой и прогнозированием.Но если сеть ставит какое-то предположение, подобное этому, она становится не устойчивой к объектам, форма которых сильно отличается от предположения.Увеличение данных решает эту проблему.

2

Это потому, что мы не знаем правду о координатах центра и форме прямоугольника.Когда мы обучаем YOLO, мы используем концепцию Ответственные коробки .Это коробки, которые должны обновляться в процессе обучения.

См. Раздел «Ответственные ограничивающие рамки» моего сообщения Medium .

3 Это связано с тем, что на выходе YOLO появляется каталогиз сверточного слоя, а не из активации полностью подключен.Таким образом, выходные данные не ограничены между 0 и 1. Поэтому мы применяем сигмоидную функцию так, чтобы она представляла вероятность.

...