【问题标题】:Caffe: variable input-image sizeCaffe:可变输入图像大小
【发布时间】:2016-04-14 08:15:55
【问题描述】:

我正在尝试使用 Caffe 的 Google 的 deepdream code。 他们使用由 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 像素之一)。

  1. deploy.prototext 没有将 caffe 配置为使用裁剪。
  2. deepdream code中的预处理只做贬义,这里也没有裁剪

我怎么可能在对于输入层来说太大的图像上运行?


完整代码见here

【问题讨论】:

    标签: image-processing computer-vision neural-network deep-learning caffe


    【解决方案1】:

    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) 的输入。

    【讨论】:

    • 啊,这当然很有道理!这实际上是否意味着如果我删除所有完全连接的层,我也可以在任意大小的图像上训练生成的网络架构?如果我实现了一个聪明的批处理?
    • @Zakum 你如何将单个标签丢失与任意大小的预测联系起来?
    • 好吧,正如您可能已经注意到的那样,我刚刚开始努力解决这个问题。 ^^ 最后的 Softmax 层不能完成这项工作吗?
    • @Zakum "Softmax" 可以解决损失问题,但是如何训练具有固定大小输出的分类器呢?
    • 为了记录:global_pooling=1 在池化层中,然后是带有num_output=1 的卷积层,我最终得到了回归。 Caffe 在开箱即用的训练期间还支持任意大小的输入。只需要使用批量相同大小的输入,或者只是硬着头皮使用 1 的批量大小。
    猜你喜欢
    • 2017-03-24
    • 2016-12-24
    • 2015-02-10
    • 2022-01-11
    • 2017-12-22
    • 2016-10-25
    • 2013-01-14
    • 2020-11-07
    • 1970-01-01
    相关资源
    最近更新 更多