FCN全卷积网络上采样理解

来源:互联网 发布:ug4.0编程加工步骤 编辑:程序博客网 时间:2024/05/16 09:38

  FCN全卷积网络将网络的全连接层变成卷积层之后整个网络变成了只有卷积层和池化层的网络,于是网络就称之为全卷积网络。全卷积网络一般是用来对图像进行语义分割的,于是就需要对图像上的各个像素进行分类,这就需要一个上采样将最后得到的输出上采样到原图的大小。

  上采样的过程也类似于一个卷积的过程,只不过在卷积之前将输入特征插值到一个更大的特征图然后进行卷积。下面举例子说明这个过程。

  上采样利用的是conv2d_transpose函数,这个函数输入的有几个关键的参数,(value,filter,output_shape,strides,padding..)

  这是这几个参数的解释:

Args:
value: A 4-D `Tensor` of type `float` and shape
`[batch, height, width, in_channels]` for `NHWC` data format or
`[batch, in_channels, height, width]` for `NCHW` data format.
filter: A 4-D `Tensor` with the same type as `value` and shape
`[height, width, output_channels, in_channels]`. `filter`'s
`in_channels` dimension must match that of `value`.
output_shape: A 1-D `Tensor` representing the output shape of the
deconvolution op.
strides: A list of ints. The stride of the sliding window for each
dimension of the input tensor.
padding: A string, either `'VALID'` or `'SAME'`. The padding algorithm.
See the @{tf.nn.convolution$comment here}

  其中value是输入的特征图,将这个特征图进行上采样,格式是[n,h,w,c],n是你这一个batch的图片数量,h和w是特征图的宽和高,c是特征图的数量;

  filter是卷积核的大小,也是四维的[h,w,in_channel,out_channel],h和w是卷积核的大小,in_channel是输入特征图的数量,out_channel是输出特征图的数量。

  output_shape是要上采样得到的特征图的大小,格式与value一致。

  strides是步长,四维格式,分别对应value四个维度的步长。

  举个栗子:我的输入图片是1*1248*384*3的图片,经过卷积网络之后得到的输出是1*39*12*2的特征图,我们要将这个输出特征首先上采样到pool4输出的大小(1*78*24*2)为什么特征图数量是2呢,因为在我的栗子中只做了二分类,所以是2.选择的卷积核的大小是4*4*2*2,步长为[1,2,2,1]

  抛开batch数量和特征图数量,我们只关注特征图的大小。首先我们将39*12的特征图插值得到H*W的大小,使的这个H*W的特征图在经过4*4-s-2的卷积核之后能够得到一个78*24的特征图,那么我们要插值得到的特征图到底是多大呢。根据卷积公式我们知道应该是宽为4+2*(78-1)和高为4+2*(24-1)的特征图,其中的4表示卷积核的宽和高,2是步长。在这个特征图上进行4*4的卷积就能够得到78*24的特征图,至此上采样完成。

这里写图片描述
上采样过程

以上的理解仅作为个人理解,如果大神有其他理解,请不吝赐教帮我纠正错误。

1 0
原创粉丝点击