参考资料
该论文在CNN应用在语义分割任务上扮演了非常重要的角色,从这篇论文开始,很多语义分割网络都采用了类似的网络结构。
模型架构
该模型将全连接层转换为卷积层,并且最后一层为装置卷积网络,将像素从缩小尺寸的恢复到原始图像大小,其中也包括了crop将多于的部分裁剪掉,直接恢复结果比较稀疏,论文使用前几层网络结合得到fcn8s和fcn16s的结果更加平滑,这是因为浅层的网络具有更详细的细节信息,这种组合的结构被称为skip connection架构,这也是decoder的一个思路。
代码实现
pytorch实现
其中可参考我的ipython notebook文件,具体的推导过程以及实现的细节可以参考FCN学习:Semantic Segmentation,其中论文主要的理解部分为全卷及网络,推导最后的网络输出与原始输入图像大小一致的原因,以及第一层的padding大小为什么为100,其他层都是vgg网络,最后的输出有fcn32s,fcn16s和fcn8s这三种,最简单的推导从fcn32s开始。
相关论点
这些抽象的特征对分类很有帮助,可以很好地判断出一幅图像中包含什么类别的物体,但是因为丢失了一些物体的细节,不能很好地给出物体的具体轮廓、指出每个像素具体属于哪个物体,因此做到精确的分割就很有难度。
传统的基于CNN的分割方法:为了对一个像素分类,使用该像素周围的一个图像块作为CNN的输入用于训练和预测。这种方法有几个缺点:一是存储开销很大。例如对每个像素使用的图像块的大小为15x15,然后不断滑动窗口,每次滑动的窗口给CNN进行判别分类,因此则所需的存储空间根据滑动窗口的次数和大小急剧上升。二是计算效率低下。相邻的像素块基本上是重复的,针对每个像素块逐个计算卷积,这种计算也有很大程度上的重复。三是像素块大小的限制了感知区域的大小。通常像素块的大小比整幅图像的大小小很多,只能提取一些局部的特征,从而导致分类的性能受到限制。
而全卷积网络(FCN)则是从抽象的特征中恢复出每个像素所属的类别。即从图像级别的分类进一步延伸到像素级别的分类。这也是使用网络分割图像被称为pixel wise图像语义分割,不过像素级的分割,会产生较大的噪声,导致分割的结果不够平滑。
模型缺点
- 是得到的结果还是不够精细。进行8倍上采样虽然比32倍的效果好了很多,但是上采样的结果还是比较模糊和平滑,对图像中的细节不敏感。
- 是对各个像素进行分类,没有充分考虑像素与像素之间的关系。忽略了在通常的基于像素分类的分割方法中使用的空间规整(spatial regularization)步骤,缺乏空间一致性。
深度学习(十六)——FCN, SegNet, DeconvNet, DeepLab, ENet, GCN, Ultra Deep Network