Caffe: переменный размер входного изображения
Я пробую глубокий код Google, который использует Caffe. Они используют модель GoogLeNet, предварительно обученную в ImageNet, как это предусмотрено ModelZoo. Это означает, что сеть обучалась на изображениях, обрезанных до размера 224x224 пикселя. Из train_val.prototext:
layer {
name: "data"
type: "Data"
...
transform_param {
mirror: true
crop_size: 224
...
Используемый для обработки текст deploy.prototext также определяет входной слой размером 224x224x3x10 (RGB-изображения размером 224x224, пакетный размер 10).
name: "GoogleNet"
input: "data"
input_shape {
dim: 10
dim: 3
dim: 224
dim: 224
}
Однако я могу использовать эту сеть для обработки изображений любого размера (в приведенном выше примере используется один из пикселей 1024x574).
- deploy.prototext не настраивает caffe для использования обрезки.
- Предварительная обработка в коде Deepdream только унизительна, также здесь нет обрезки
Как это возможно, что я могу работать на изображениях, которые слишком велики для входного слоя?
полный код можно найти здесь
1 ответ
DeepDream вообще не обрезает входное изображение.
Если вы обратите пристальное внимание, вы заметите, что он работает на среднем уровне: это end=
аргумент установлен в 'inception_4c/output'
или же end='inception_3b/5x5_reduce'
, но никогда end='loss3/classifier'
, Причиной этого является то, что GoogLeNet для этих слоев является полностью сверточной сеткой, то есть она может принимать входное изображение любого размера и производить выходные данные размеров, пропорциональных входному размеру (размер вывода обычно зависит от заполнения и объединения).).
Для настройки сети на различные размеры входов функция deepdream
имеет линию
src.reshape(1,3,h,w) # resize the network's input image size
Эта линия регулирует слои сети, чтобы приспособить ввод формы (1,3,h,w)
,