Путаница в отношении RetinaNet - PullRequest
0 голосов
/ 17 декабря 2018

Я недавно изучал RetinaNet.Я прочитал оригинальную статью и некоторые связанные с ней и написал пост, в котором поделился тем, что узнал: http://blog.zenggyu.com/en/post/2018-12-05/retinanet-explained-and-demystified/. Однако у меня все еще есть некоторые недоразумения, на которые я также указал в посте.Может ли кто-нибудь, пожалуйста, просветить меня?

Путаница № 1

Как указано в документе, якорный ящик назначается фону, если его IoU с любой наземной правдой ниже0,4.В этом случае, какой должна быть соответствующая целевая метка классификации (при условии, что есть K классов)?

Я знаю, что SSD имеет фоновый класс (который составляет K + 1 классов в целом), в то время как YOLO предсказывает доверительный баллуказывает, есть ли объект в поле (не фон) или нет (фон) в дополнение к вероятностям класса К.Хотя в статье я не нашел никаких утверждений, указывающих на то, что RetinaNet включает в себя фоновый класс, я видел это утверждение: «... мы декодируем только предсказания блоков из ... после доверительного уровня детектора порога в 0,05», что, по-видимому,указывают на то, что существует прогноз для оценки достоверности.Однако откуда взялась эта оценка (так как подсистема классификации выводит только K чисел, указывающих вероятность K классов)?

Если RetinaNet определяет метки цели по-другому, чем SSD или YOLO, я бы предположил, что цельвектор длины K со всеми записями 0 с и без 1 с.Тем не менее, в этом случае как фокальная потеря (см. Определение ниже) накажет якорь, если он является ложноотрицательным?

enter image description here

где

enter image description here

Путаница № 2

В отличие от многих других детекторов, RetinaNet использует независимый от класса ограничитель-регрессор иАктивация последнего уровня подсети классификации - это сигмовидная активация.Означает ли это, что один якорный ящик может одновременно предсказывать несколько объектов разных классов?

Путаница # 3

Обозначим эти совпадающие пары якорного ящика и поля истинности земли.так как $ {(A ^ i, G ^ i)} _ {i = 1, ... N} $, где $ A $ представляет якорь, $ G $ представляет основную истину, а $ N $ является числомсовпадений.

Для каждого совпадающего якоря подсеть регрессии предсказывает четыре числа, которые мы обозначаем как $ P ^ i = (P ^ i_x, P ^ i_y, P ^ i_w, P ^ i_h) $.Первые два числа указывают смещение между центрами якоря $ A ^ i $ и истинностью земли $ G ^ i $, а последние два числа указывают смещение между шириной / высотой якоря и основанием.Соответственно, для каждого из этих прогнозов существует цель регрессии $ T ^ i $, вычисленная как смещение между якорем и истинной земной поверхностью:

enter image description here

Являются ли приведенные выше уравнения правильными?

Заранее большое спасибо и не стесняйтесь указывать на любые другие недоразумения в посте!

Обновление:

Для дальнейшего использования, другоепутаница у меня была, когда я изучал RetinaNet (я нашел этот разговор вяло):

enter image description here

1 Ответ

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

Я один из авторов проекта с открытым исходным кодом retinanet, fizyr / keras-retinanet .Я постараюсь ответить на ваши вопросы как можно лучше.

Путаница # 1

В целом, есть два часто используемых метода для классификации оценок в детекторах объектов,либо вы используете softmax, либо вы используете sigmoid.

Если вы используете softmax, ваши целевые значения всегда должны быть горячими, то есть, если нет объекта, вы должны «классифицировать» его как фон (то есть вам нуженфоновый класс).Преимущество состоит в том, что ваши классовые оценки всегда составляют до одного.

Если вы используете сигмоид, ограничений меньше.По моему мнению, это имеет два преимущества: вам не нужен фоновый класс (что делает реализацию более чистой), и это позволяет сети выполнять многоклассовую классификацию (хотя это не поддерживается в нашей реализации, это теоретически возможно).Небольшое дополнительное преимущество заключается в том, что ваша сеть немного меньше, поскольку ей необходимо классифицировать на один класс меньше по сравнению с softmax, хотя это, вероятно, пренебрежимо мало.

В первые дни внедрения ретинанета мы использовали softmax из-за устаревшегокод из py-fast-rcnn .Я связался с автором статьи Focal Loss и спросил его о ситуации со слабым / сигмовидным отростком.Он ответил, что это вопрос личных предпочтений, и не важно, используете ли вы одно или другое.Из-за упомянутых преимуществ сигмовидной отростки, теперь это также мое личное предпочтение.

Однако откуда взялся этот счет (поскольку подсистема классификации выводит только K чисел, указывающих вероятность K классов)?

Каждая оценка класса рассматривается как отдельный объект, но для одного якоря все они имеют одинаковые значения регрессии.Если оценка класса выше этого порога (который, я уверен, выбран произвольно), он считается объектом-кандидатом.

Если RetinaNet определяет целевые метки не так, как SSD или YOLO, я бы предположилчто целью является вектор длины K со всеми записями 0, а не 1.Однако в этом случае как фокальная потеря (см. Определение ниже) накажет якорь, если он является ложноотрицательным?

Отрицательные значения классифицируются как вектор, содержащий только нули.Позитивы классифицируются по горячему вектору.Предполагая, что предсказание является вектором всех нулей, но целью был вектор с одной горячей точкой (другими словами, ложный минус), тогда p_t - это список нулей в вашей формуле.В этом случае очаговая потеря оценивается как большое значение для этого якоря.

Путаница # 2

Краткий ответ: да.

Путаница# 3

По отношению к исходной реализации это почти правильно.Все значения делятся на width или height.Деление на A_x, A_y для значений T_x и T_y некорректно.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...