FCN网络中使用的caffe类型层汇总--Convolution/Deconvolution/Crop/Eltwise/SoftmaxWithLoss

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/laingliang/article/details/55048937

     FCN卷积神经网络是深度学习在图像语义分割上的开山之作。其主旨思想就是 将全连接层 转化为卷积操作。其中不但有经典神经网络所使用的Convolution(卷积)操作,还包括DeconvolutionCropEltwise操作。将其整理如下:

1. Crop 层:

    主要作用是进行裁切。下面我们举一个例子来说明如何使用Crop 层:

Caffe中的数据是以 blobs形式存在的,blob是四维数据,即 (Batch size, Channel_Num, Height, Width)=(N, C, H, W)

Crop层的输入(bottom blobs)有两个,让我们假设为A和B,输出(top)为C。

  • A是要进行裁切的bottom,他的size是 (20,50,512,512)
  • B是裁切的参考输入,他的size是(20,10,256,256)
  • C是输出(top blob),由A裁切而来,那么他的size是(20,10,256,256)

  在这个例子中,轴0的维度不变,我们只需要裁切blob的轴1,2,3,所以我们设置axis=1,代表我们将会裁切轴1和它之后的所有轴。

  有两个裁切模式:

模式1---给出3个offsets,每个针对一个dimension,offset=(25,128,128)

  • axis=1,offset=(25,128,128)
  • crop operation: C = A[: , 25: 25+B.shape[1] , 128: 128+B.shape[2] , 128: 128+B.shape[3] ]
  • 也就是说,对于A的轴1,对称裁切了25-35
  • 对称裁切:offset = (Original_length - desired length ) / 2

 

 模式1的prototxt写法如下:

layer {
  name: "crop_layer"
  type: "Crop"
  bottom: "A"
  bottom: "B"
  top: "C"
  crop_param {
    axis: 1
    offset: 25
    offset: 128
    offset: 128
  }
}


模式2---给出1个offset,适用于三个dimension,offset=25

  • 那么就相当于模式1 的 offset=(25,25,25)


模式2的prototxt写法如下:

layer {
  name: "crop_layer"
  type: "Crop"
  bottom: "A"
  bottom: "B"
  top: "C"
  crop_param {
    axis:2
    offset: 19
  }
}


2. Eltwise层:

  Eltwise层的操作有三个:product(点乘), sum(相加减) 和 max(取大值),其中sum是默认操作。

 假设输入(bottom)为A和B,如果要实现element_wise的A+B,即A和B的对应元素相加,prototxt文件如下:

layer 
{
  name: "eltwise_layer"
  type: "Eltwise"
  bottom: "A"
  bottom: "B"
  top: "diff"
  eltwise_param {
    operation: SUM
  }
}​
如果实现A-B,则prototxt为:

layer 
{
  name: "eltwise_layer"
  type: "Eltwise"
  bottom: "A"
  bottom: "B"
  top: "diff"
  eltwise_param {
    operation: SUM
    coeff: 1
    coeff: -1
  }
}​

未完待续。。。

猜你喜欢

转载自blog.csdn.net/laingliang/article/details/55048937
今日推荐