FCN全卷积神经网络
- 语义分割概念
语义分割就是逐像素的图像中的内容进行分类,属于同一类的像素都要被归为一类,因此语义分割是从像素级别来理解图像的。
注意区分的是:语义分割与实例分割不同,下图为FCN论文中的分割效果图。可以看出语义分割只需要将人和车的像素都归为一类,但是实例分割还要将不同的人和车归为不同的类。
- 语义分割实现
2.1 分割方法
2.1.1 传统分割方法
语义分割的传统方法有:(1)非监督学习:阈值法,连通域法,图像形态学方法等。(2)监督学习: K 最近邻算法、支持向量机(SVM)等。但在实际运用中,每运行一次N-cut,只能切割一次图片,为了分割出图像上的多个物体,需要多次运行,因此效率低,同时准确率不高,依赖于人工的特征工程,精度和时间开销较大。
2.1.2 深度学习分割方法
2015年FCN提出的全卷积网络,使得用深度学习方法对图像进行像素级的分类成为可能,并迅速替代传统分割方法成为研究的热点。
深度学习实现语义分割的方法有FCN、SegNet、LinkNet、Unet、deepLab等。深度学习方法目前存在的问题有两个,一个是不匹配关系,解决这个问题的方法有SPP、ASPP、PSPNet、GCN、DFN等,一个是不寻常类,解决这个问题的方法有RedNet、RDFNet。
2.2 实现流程
实现流程分为三步:训练、验证、测试,具体过程解释如下:
2.3 常用数据集
常用的数据集有以下5个,分别为:SUNRGBD、NYUDv2、PASCAL VOC、CityScape、CamVid,数据集具体介绍如下:
2.4 语义分割常用指标
假设:共有k+1个类,Pij 表示本属于类i但被预测为类j的像素数量。即,Pii 表示真正的数量,而Pij 和Pji 则分别被解释为假正或假负.
Pixel Accuracy(PA 像素精度):标记正确的像素占总像素的比例,公式如下:
Mean Pixel Accuracy(MPA 均像素精度):计算每个类内被正确分类像素数的比例,再求所有类的平均,公式如下:
Mean Intersection over Union(MIoU 均交并比):计算真实值和预测值的交集和并集,公式如下:
- FCN
3.1 FCN 模型图
3.2 一些模型细节
1)加载预训练模型;
2)初始化反卷积参数;
3)至少175个epoch后算法才会有不错的表现;
4)学习率在100次后进行调整;
5)pool3之前的特征图不需要融合;
6)数据预处理方式:Randomly mirroring。
3.3 实现结果
实验过程使用backbone部分为VGG16的FCN模型,数据集为CamVid数据集,训练轮次为200。训练和验证过程中loss与miou的变化趋势如下图。
训练集:miou等指标一直上升趋势,loss一直下降。但验证集的准确率在epoch为50之前,震荡较为厉害,在epoch为50之后总体呈下降趋势;
验证集:loss在epoch为20之前呈下降趋势,在epoch为20之后呈上升趋势;miou在epoch为30之前呈上升趋势,epoch为30之后呈下降趋势。
综上可知,在20轮左右时,出现了过拟合,要解决过拟合问题,考虑每10epoch做学习率衰减,或者加L2正则化来降低过拟合。
3.4 存在的问题
文中说类别平衡不是必须的:以分类问题为例,假设一个训练集共包含99张狗的图片和5张猫的图片,测试集包含99张狗的图片和1张猫的图片,在这样的情况下,这张猫一定会分为狗,99张狗的图片类别也会分为狗,也就是测试准确率是99%,但是这样的模型并不好,当输入很多猫的图片的时候,这个准确率就会下降很多。因此,类别平衡还是有必要的。
3.5 总结
1)关键点和创新点
对经典网络的改编:卷积替换全连接
对前后特征图的补偿:跳跃连接
对特征图尺寸的恢复:反卷积
2)改进点
改进方面是有以下四个方面:尺寸恢复、类别平衡、数据预处理方式单一、资源利用