Понимание странного выходного размера сверточного слоя YOLO - PullRequest
1 голос
/ 20 июня 2020

Я пытаюсь понять, как работает Dar knet, и я смотрел файл конфигурации yolov3-tiny , в частности слой номер 13 (строка 107) .

[convolutional]
batch_normalize=1
filters=256
size=1
stride=1
pad=1
activation=leaky

Размер ядра - 1x1, шаг - 1 и отступ - тоже 1. Когда я загружаю сеть с помощью dar knet, это указывает на то, что ширина и высота вывода такие же, как и ввод:

13 conv    256       1 x 1/ 1     13 x  13 x1024 ->   13 x  13 x 256

Однако ширина и высота не должны увеличиваться на 2, поскольку ядро такое 1x1 и есть отступы? Если я правильно понимаю, ядро ​​будет проходить через все «пиксели» ввода плюс отступы, поэтому для меня имеет смысл увеличить ширину и высоту на 2 * отступа.

I использовал формулу

output_size = ((input_size – kernel_size + 2*padding) / stride) + 1

, и это подтвердилось. (13 - 1 + 2 * 1) / 1 + 1 = 15

Кто-нибудь знает, что мне не хватает?

Заранее спасибо.

1 Ответ

0 голосов
/ 20 июня 2020

Хорошо, я разобрался.

Я неправильно понял параметр pad в слое. Если вы хотите, чтобы заполнение было равно 1, вы должны написать:

padding=1

pad на самом деле является логическим. Если установлено значение 1, заполнение слоя будет равно size / 2 .

В этом случае размер ядра был 1, и поэтому заполнение в конечном итоге будет 1/2 = 0 (целочисленная операция). Поскольку отступов нет, ширина и высота вывода остаются такими же, как и при вводе.

Мне следовало бы использовать RTFM.

...