系列文章链接
一、tensorflow安装方式及问题汇总
二、TensorFlow基础概念
三、神经网络结构设计
四、mnist数字识别问题
五、图像识别与卷积神经网络
六、U-NET网络
七、TensorFlow常用指令记录
背景:CNN在图像分类方面效果显著,有诸如VGG、Resnet等典型网络结构。
CNN网络结构可以学习到图片的多个层次的内容。
- 低层次网络感知域比较少,能获取图像的局部细节
- 深层次网络感知域比较广,能获取图像的更抽象特征。
抽象特征对图像的位置、方向、大小等信息感知不敏感,因此有助于图像的分类,对于分类准确性的提升有所帮助。图像分类是图像级别的处理。
与分类不同的是,语义分割需要判断图像中每个像素的类别,从而实现对不同物体边界的准确定位和分割,图像分割是属于pixel级别的处理。而CNN在进行convolution和pooling过程对于pixel的处理是多合一的过程,丢失图像的一部分细节,因此对于语义分割处理无法做到十分精细。对于图像增强领域,VGG网络会有天然的缺陷,高频细节丢失,因为VGG的convolution操作以及pool操作都是信息丢失的过程。改进方向,一个是使用resnet将细节信息保留,另外一个是使用位置编码来保留高频细节。
FCN网络改变了什么?
传统的CNN网络如VGG、Resnet网络一般是在网络的最后加入全连接层,将传递的图片信息转换为1维度,之后通过softmax函数,转换为一维概率分布,识别每张图片的类别,不能表示每个像素点的类别,所以这种全连接方法不适合图像分割。
而FCN是在网络结构后边将图像进行上采样,恢复高维的feature map, 从而做pixelwide 的像素分类。
FCN网络结构:
-
原始图像经过多个conv和一个max池化操作变为pool1 feature, 宽高转换为原图像的1/2。
-
pool1 feature经过多个conv和一个max池化操作变为pool2 feature,宽高转换为原图像的1/4。
-
pool2 feature经过多个conv和一个max池化操作变为pool3 feature,宽高转换为原图像的1/8。
-
pool3 feature经过多个conv和一个max池化操作变为pool4 feature,宽高转换为原图像的1/16。
-
pool4 feature经过多个conv和一个max池化操作变为pool5 feature,宽高转换为原图像的1/32。
-
FCN-32s,直接对pool5 feature进行32倍上采样,获得32x upsampled feature,再对每个像素点做softmax prediction获得分割图。
-
FCN-16s,首先对pool5 feature 进行2倍上采样获得2x upsampled feature, 再和pool4 feature逐点相加,然后对融合图进行16倍上采样,再对每个像素点做softmax prdiction获得分割图。
-
FCN-8s,首先对pool4 feature +2x upsampled feature逐点相加,然后进行pool3+2x upsampled逐点相加,即进行更多次特征融合。再对每个像素点做softmax prdiction获得分割图。
经过上述处理,实际生成了3个分割图,分割精度:FCN-32s>FCN-16s>FCN-8s。
结构处理trick: -
图像在经过1/32下采样后输出feature map可能太小,FCN原作者在第一个卷积层conv1_1加入pad =100。
10.其他看完代码之后补充
U-Net网络结构
参考: