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).

  1. deploy.prototext не настраивает caffe для использования обрезки.
  2. Предварительная обработка в коде 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),

Другие вопросы по тегам