接着介绍图像语义分割中解决分割精细度的另一种解决方案--多尺度特征融合。在基于FCNs的语义分割架构中,如何有效的融合各个尺度之间的特征将会对最终结果产生极大的影响,关于这方面的工作很多,我将简单介绍两篇CVPR的优秀工作。
Hypercolumns for Object Segmentation and Fine-grained Localization
(注:hypercolumn是借用神经学中的概念,它用来描述那些对不同 orientation & frequency edge 敏感的v1神经元)
观察一下深度学习出现以来在计算机视觉领域的应用,你会发现关于分类、识别、分割等任务的网络结构大致相同,最大的区别就是最后几层,原因就是在训练网络的过程中前几层可以看作自动特征提取的过程,后几层用来完成具体的任务(个人理解,有错误欢迎批评指正)。在基于深度学习的分类任务中,我们的目的是找到同一类别之间的共性特征并保留下来,因此后几层得到的往往是粗粒度的图像特征,而语义分割可以看作是像素级别的细粒度分类任务,因此之前基于分类任务改进的分割网络结构就具有了很大的改进空间。
在给予CNN的网络架构中,我们往往认为特征级别越高,具有的语义信息越多而粒度越粗,在语义分割任务中,只使用顶层特征进行语义分割并不是最优的学习方法,因此将高层特征和低层特征融合将会极大改善语义分割任务中边界分割不清晰的问题。
本文的核心思想是提出Hypercolumn(超列)的概念,即将像素点对应的激活网络特征进行串联,进行目标的细粒度定位,同时进行分割(Simultaneous Detection and Segmentation (SDS)为本文作者2014年上发表的文章,用于检测一个类别的所有的 objects,并确定每个 object 覆盖了哪些pixels,本片论文可以视作14年论文的改进)。
阐述完如何结合高级和低级语义信息,简单说明一下本文如何利用该思想解决问题的。
1. 问题提出 (公式就参考原文吧)
对每个任务,扩展bbox并预测一个对应的heatmap;在分割任务中,heatmap编码的是像素点对应位置在物体内部的概率大小;对于组件标记,为每个组件预测一个heatmap,对应每个位置属于该组件的概率;对于关键点检测,每个关键点有一个heatmap,对应该关键点在特定区域内的概率。
对以上三种情况,预测一个50*50的heatmap,之后缩放到与bbox同样大小,问题转化为对50*50个位置进行分类,分类使用的特征就是超列特征(网格分类器的想法应该来源于RCNN)。
2. 计算超列
对每个位置,使用上图的方法提取对应点某些层上的输出作为特征。由于特征图大小不一,将特征图使用双线性插值缩放到统一大小。特征图F上采样到f,i位置的特征向量为:
fi=∑kαikFk(1)
3. 网格分类器
获得对应位置的分类器,简单的方法是对50*50的位置分别训练分类器。考虑到速度和临近关系,实际训练的分类器数量一般不需要50*50,可选取K=5,10。每个分类器是一个函数 g(k),g(k)的输入是特征向量输出是0,1。与(1)类似,插值实现网格附近的预测:
hi(⋅)=∑kαikgk(⋅)(2)
如果i位置的特征向量是fi,则对应的得分是
pi=∑kαikgk(fi)=∑kαikpik(3)
pikpik是i位置第k个分类器的概率输出,测试时,对每个像素运行K2K2个分类器,之后使用(3)式对所有的分类结果进行线性组合。
每个特征图对应多个通道,i位置特征fifi在第j个特征图的特征段为f(j)ifi(j),将线性分类器进行分解:
wTfi=∑jw(j)Tf(j)i
4. 卷积及上采样
对特征图每个位置进行分类类似于1*1卷积,先将特征分割成对应每个特征图的组块,对每个组块进行1*1卷积生成得分图,之后上采样得分图,最后累加。
Attention to Scale: Scale-aware Semantic Image Segmentation
关于注意力机制大家可以阅读深度学习中的注意力机制,我个人比较喜欢这篇文章,因为注意力机制本身比较符合人类视觉观察事物的特点,因此将注意力机制应用于计算机视觉任务当中具有天然的合理性,同时我自己也在进相关研究。
在已有的特征融合方法当中,主流方法有两种:
左边为FCNs中提出的Skip-net结构,右边为Share-net结构。由于Skip-net在训练方法上有固有的缺陷,因为其需要先训练分类器主干网络然后针对分类任务进行微调,因此训练时间很长(三到五天),所以Share-net网络结构与注意力机制具有更好的亲和性,因此文章作者选择了Share-net网络结构。Share-net网络结构是在输入端改变输入图像的尺度然后共享后几层的权重从而进行多尺度特征融合。
那么如何利用注意力机制来融合多尺度特征呢?想想你在看东西的时候的感觉,当你看大象的时候要离得比较远才能看到全貌,而看蚂蚁的时候就要凑得很近,或者看近距离物体的时候瞳孔焦距变短,而看远距离物体的时候瞳孔焦距变大。注意力机制就是模仿这一过程(我猜的),当分割较大物体的时候,给感受野比较大(粗粒度)的特征赋予高权重,当物体比较小的时候,就给感受野比较小(细粒度)的特征赋予高权重。更为重要的一点是,注意力机制将神经网络在一定程度上可视化了出来,使得训练过程不再像一个黑盒子。
关于本篇论文的代码和作者的更多工作,大家可以访问http://liangchiehchen. com/projects/DeepLab.html。
前面介绍的是基于图片的语义分割,当然由于我能力和时间有限无法理解的很透彻和介绍的很具体,希望大家谅解。介绍图片语义分割的原因是为了进行基于视频语义分割的介绍打基础,视频语义分割任务具有低延迟,高时序相关等要求,因此需要在图片语义分割的任务中进一步发展。尤其是在自动驾驶任务中,视频数据量大,车速快,车载计算能力有限,因此对自动驾驶相关的计算机视觉算法在时间消耗上都有很严格的要求。因此接下来的几篇文章将介绍几种针对视频语义分割的相关方法。
祝好!愿与诸君一起进步。