我正在试用 Google 的 deepdream code它使用了 Caffe。
他们使用 ModelZoo 提供的在 ImageNet 上预训练的 GoogLeNet 模型。这意味着网络是在裁剪为 224x224 像素大小的图像上训练的。来自 train_val.prototext :
layer {
name: "data"
type: "Data"
...
transform_param {
mirror: true
crop_size: 224
...
deploy.prototext用于处理还定义了一个大小为 224x224x3x10 的输入层(RGB 图像大小为 224x224,batchsize 10)。
name: "GoogleNet"
input: "data"
input_shape {
dim: 10
dim: 3
dim: 224
dim: 224
}
但是我可以使用这个网络来处理任何尺寸的图像(上面的例子使用了 1024x574 像素之一)。
我怎么可能在对于输入层来说太大的图像上运行?
完整代码可见here
最佳答案
DeepDream 根本不会裁剪输入图像。
如果您仔细观察,您会注意到它在中间层上运行:它是 end=
参数设置为 'inception_4c/output'
或 end='inception_3b/5x5_reduce'
,但从不 end='loss3/classifier'
.这样做的原因是直到这些层的 GoogLeNet 是一个全卷积网络,也就是说,它可以采用任何大小的输入图像并产生大小与输入大小成正比的输出(输出大小通常受 conv padding 和 pooling 影响)。
要将网络调整为不同大小的输入,函数 deepdream
有线路
src.reshape(1,3,h,w) # resize the network's input image size
此行调整网络的层以适应形状
(1,3,h,w)
的输入.
关于image-processing - Caffe:可变输入图像大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34697519/