FCN进行人体分割

本文记录本人学习《Fully ConvolutionalNetworks For Semantic Segmentation》遇到问题及个人理解,并应用FCN进行人体分割。

此处任务Tensorflow实现代码

此处写卷积替换全连接层

###上采样
####1.上采样
有种叫法是“反卷积”,decov其实不是很好,可以理解为反向卷积:backwardsconvolution。准确应该叫做转置卷积,Tensorflow里的函数为tf.nn.conv2d_transpose(value,filter,output_shape, strides,padding=“SAME”,data_format=“NHWC”,name=None)(后面解析)。f倍的上采样可以看做stride为1/f的卷积操作,所以也叫作微步长卷积。多个上采样层+激活函数层堆叠可以实现非线性上采样。
####2.tf.nn.conv2d_transpose(value,filter,output_shape, strides,padding=“SAME”,data_format=“NHWC”,name=None)
value:Tensor,输入图像
filter:Tensor,卷积核,shape为[filter_height,filter_width,out_channels,in_channels]
注意:tf.nn.conv2d中的filter参数为[filter_height,filter_width,in_channels,out_channels]
output_shape:反卷积操作输出的shape
strides:一维向量,长度为4,反卷积时在图像每一维的步长
padding:string类型,只能是"SAME","VALID"其中之一,这个值决定了不同的卷积方式
data_format:string类型,'NHWC’和’NCHW’其中之一,这是tensorflow新版本中新加的参数,它说明了value参数的数据格式。'NHWC’指tensorflow标准的数据格式[batch,height,width,in_channels],‘NCHW’指Theano的数据格式,[batch,in_channels,height,width],当然默认值是’NHWC’

###数据集输入和数据集增广
####数据集输入
处理大量图像,一般方法是csv,JSON,pickle,或者Tensorflow的TfRecard.本来使用csv文件,后来用折腾一下使用了pickle模块。
原理是一样的,炼丹的前期基础工作。用os模块把图像文件夹遍历,然后将图像地址写入dict,然后使用pickle序列化。我们把变量从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling。pickle提供四个功能:dumps,dump,loads,load。
####数据增广
对图像和label同时进行crop,flip,shift,rotate甚至affine和perspective等一系列几何变换。还有是颜色空间变换,如RGB打乱,HSV,HSL调整。PIL模块可以包揽,或者使用tensorflow的tf.image。要是想玩的高兴,github上有个Augumantor。很实用。
###用于人体分割的FCN网络结构
前20层的baseline是VGGNet,之后进行三层全卷积,上采样。第一次上采样之后和pool4层concat,对结果进行上采样之后与pool3层concat.对concat结果进行上采样。

水平有限,欢迎大家斧正

HongYuSuiXinLang
Zhejiang University
Email: [email protected]

你可能感兴趣的:(深度学习)