Выполните разномасштабную тренировку (yolov2)

Мне интересно, как работает многомасштабное обучение в YOLOv2.

В документе говорится, что:

Исходный YOLO использует входное разрешение 448 × 448. Добавив якорные блоки, мы изменили разрешение на 416 × 416. Однако поскольку наша модель использует только сверточные и объединяющие слои, ее размер можно изменять на лету. Мы хотим, чтобы YOLOv2 был устойчивым к работе с изображениями разных размеров, поэтому мы тренируем это в модели. Вместо того, чтобы фиксировать размер входного изображения, мы меняем сеть каждые несколько итераций. Каждые 10 пакетов наша сеть случайным образом выбирает новый размер изображения. "Поскольку наша модель уменьшает разрешение в 32 раза, мы выбираем из следующих кратных 32: {320, 352, ..., 608}. Таким образом, наименьший вариант - 320 × 320, а наибольший - 608 × 608. Мы изменяем размер сеть в это измерение и продолжить обучение ".

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

Итак, как YOLOv2 меняет это на лету?

Я прочитал файл конфигурации для yolov2, но все, что я получил, это random=1 оператор ...


person walkerlala    schedule 24.04.2018    source источник


Ответы (2)


если у вас есть только сверточные слои, количество весов не меняется с размером 2D-части слоев (но оно изменится, если вы измените размер количества каналов).

например (воображаемая сеть), если у вас есть входные изображения 224x224x3 и сверточный слой 3x3x64, у вас будет 64 различных ядра сверточных фильтров 3 * 3 * 3 = 1728 весов. Это значение вообще не зависит от размера изображения, поскольку ядро ​​применяется к каждой позиции изображения независимо, это самая важная вещь для сверточных и сверточных слоев и причина, по которой CNN могут заходить так глубоко, и почему в более быстром R-CNN вы можете просто вырезать регионы из вашей карты характеристик.

Если бы были какие-то полностью связанные слои или что-то в этом роде, это не сработало бы, поскольку там большее измерение 2D-слоя привело бы к большему количеству соединений и большему весу.

В yolo v2 есть одна вещь, которая может показаться неправильной. Например, если вы удвоите размер изображения в каждом измерении, вы получите в 2 раза больше функций в каждом измерении, прямо перед последним фильтром 1x1xN, например, если ваша сетка была 7x7 для исходного размера сети, сеть с измененным размером может иметь 14x14. Но тогда вы просто получите результаты регрессии 14x14 * B * (5 + C), и это нормально.

person Micka    schedule 21.09.2018

В YoLo, если вы используете только сверточные слои, размер выходной ленты изменяется.

Например, если у вас размер:

  1. 320x320, размер вывода 10x10

  2. 608x608, выходной размер 19x19

Затем вы рассчитываете потери по этим отношениям к наземной сетке истинности, которая настраивается аналогичным образом.

Таким образом, вы можете распространять потери в обратном направлении, не добавляя дополнительных параметров.

Обратитесь к статье yolov1 для функции потерь:

Функция потерь из бумаги

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

Ссылка на документ: https://arxiv.org/pdf/1506.02640.pdf

В объяснении к видео автор упоминает то же самое.

Время: 14:53

Ссылка на видео

person Vibhu Jawa    schedule 02.11.2018