Caffe layer:Crop

Crop Layer tutorial

Parameters

Crop层介绍

在全卷积网络中,一般会在原始图像上加一个很大的 pad,比如 voc-fcn32s 的第一个卷积层设置 pad = 100:

layer {
  name: "conv1_1"
  type: "Convolution"
  bottom: "data"
  top: "conv1_1"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  param {
    lr_mult: 2
    decay_mult: 0
  }
  convolution_param {
    num_output: 64
    pad: 100
    kernel_size: 3
    stride: 1
  }
}

关于为什么第一层卷积要加这么大一个 pad,参考文章:FCN学习:Semantic Segmentation

所以加入 pad 后,就导致图像比原始图像要大一些,fcn 为了得到一张与原图大小相同的分割结果,最后就需要用 crop 层将多余的部分裁剪掉。

Crop举例

在 voc-fcn32s 的 crop 层定义如下:

layer {
  name: "score"
  type: "Crop"
  bottom: "upscore"
  bottom: "data"
  top: "score"
  crop_param {
    axis: 2
    offset: 19
  }
}
  • 2 个输入(bottom):upscore 和 data
  • 2 个参数(crop_param):axis 和 offset
  • 1 个输出(top):score

Crop 层的目的是将特征图裁剪到与输入图像大小相同,所以一手拿着得到的特征图,一手拿着输入图像,我们对比着输入图像的尺寸,就可以对任意大小的特征图进行裁剪操作了。

  • upscore:需要进行裁剪的特征图
  • data:裁剪的参考输入,即输入的原始图像

裁剪的输出 top,就是在 upscore 的基础上,按照 data 的 size 裁剪而来,所以 top 的尺寸和 data 的尺寸是一样的。

裁剪操作还需要 2 个重要的参数:

  • axis:决定从哪个轴开始裁剪
  • offsets:给出 3 个维度的裁剪偏移量

例如,若 axis = 1,offset = (10,100,100),upscore 的 size 为 (20,20,512,512),data 的 size 为(20,10,256,256),那么:top = upscore[:,10:10+data.shape[1],100:100+data.shape[2],100:100+data.shape[3]]

当 offset 的三个维度都相等时,可以设 offset 为一个数,表示在三个维度上的偏移是相同的。

比如上面的 axis = 2,offset = 19,表示 upscore 的前两维(batch_size 和 channels)都不变,只对图像大小进行裁剪,且裁剪偏移量为 19。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不吃饭就会放大招

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值