显著性

  在长期的进化中,人类拥有了在复杂环境中快速发现感兴趣目标的能力,这种高度发达的注意力机制使人们在看一张图片时,其注意点首先会落在更能刺激视觉的区域,即显著性区域。目前我们拥有海量的图像数据,而显著性目标检测即模仿人类的视觉注意力机制,在图片数据中找到最重要的信息,进行后续处理。
  显著性目标检测是一个偏主观的应用,不同的人在看同一张图片时,关注点也会不同。在标注显著性目标检测的数据库时,也是请了几个人同时看一张图片,取多数人看到的显著区域作为gt。显著性目标检测的应用有:自适应压缩,内容感知的图像编辑,图像检索,缩略图裁剪,图像增强等。实际应用中,Twitter推出了图像的智能裁切功能,在预览时,能自动显示显著性区域,效果如下图所示:

  这里要介绍的是南开大学程明明教授的DSS方法,该方法目前已应用在华为mate10上,大光圈智能拍照。在介绍DSS之前,首先要引入两个参考框架:FCN和HED。
一、FCN
  FCN(Fully Convolutional Networks),将图像级别的分类扩展成像素级的分类,实现了语义分割,首先将VGG最后的三个全连接层换成了卷积层,然后分别独立输出三个尺度的分割结果。(在最后一层反卷积,或转置卷积进行dense prediction)

  文章中的图及各个尺度的分割结果:


  FCN的8s,16s和32s对应三种尺度的输出,但都是独立的分割结果,彼此之间没有联系。
  caffe源代码keras版本tensorflow版本

二、HED(Holistically-Nested Edge Detection)
1、HED的特点
  HED是用于边缘检测的网络,思路基于FCN。以前的基于CNN的边缘检测网络多是patch-to-class模式,使用滑窗的的方法,以patch为中心。在FCN出现后,直接应用FCN做边缘检测效果不佳,原因可能是边缘检测不同于语义分割,需要更多的多尺度信息来找到边缘。所以,基于FCN,但又不同于FCN,HED结构的特点:
1)类似FCN,是image-to-image的
2)加入了deep supervision,学习不同尺度的特征
3)整合side output,即不同尺度的预测结果。
2、网络结构
  HED的网络结构如下图所示,在VGG的基础上,首先去掉了最后的全连接层,减少计算和存储;其次,考虑到stride=32时,生成的预测图太模糊,边缘已经不明显,所以去掉了最后一个pooling层;最后,以pooling为界,对卷积操作分组,在每一组的最后一个卷积层之后,经过1x1卷积和反卷积操作,生成与原图相同大小的feature map,然后经过sigmoid激活函数,得到每一组最终的预测mask(文章中的side output)。最后,将五组预测mask以concat的方式组合,经过1x1卷积和sigmoid,得到融合的预测mask(fused mask)。

  在预测时,最终的mask是五个side output和fused mask的平均值。

3、损失函数
  HED的损失函数分别两个部分:Deep supervision和Weighted-fusion supervision。Deep supervision是对每个side output的监督,定义为:

其中,lside是第m个side output的loss,定义为交叉熵,其中beta是为了平衡正负样本,因为在边缘检测的ground truth中,大部分像素都是非边缘,只有极少部分是边缘,所以正负样本不均衡,如果用一般的交叉熵,loss会有偏重,这里为了减缓这种现象,加入了beta,beta定义为非边缘像素点的个数占总像素点个数的比例。alpha是第m个side output的loss在总的Lside中占的比例,论文中设置为1,每个side output对总的loss的贡献是一样的。
  第二部分是weighted-fusion supervision,定义为fused mask对应的损失函数,计算方法如下:

其中,h是在得到fused mask时,每个side output所占比例,是由网络自己去学习的,Lfuse定义为fused mask与ground truth的距离,实际上也是交叉熵。最终的损失函数是deep supervision与weighted-fusion supervision相加。
4、实验
  在实验部分,作者对比了FCN-2s,8s以及有无deep supervision的结果,并可视化了有无deep supervision的结果:


结果显示,有deep supervision时,网络的side output趋向于自然直观,得到的预测图是由粗到细,由局部到整体的结构;否则,网络学到的是无序的,且偏重于学习大结构的边缘。

三、DSS
  文中提到,HED不太适合来做显著性目标检测,下图第一行显示了HED做显著性目标检测的结果。一方面,显著性目标检测是比边缘检测更难的任务,显著性目标检测需要提取的是显著性区域,而不仅仅是边缘;另一方面,浅层提取的特征比较杂乱,深层的side-output提取的显著性图缺少规律性。
  为了解决上述问题,作者首先提出了增强型HED结构:首先,由于深层能比较好地定位最显著的区域,所以在HED的基础上,在VGG的最后一个层也加入side output,输出预测的显著性图;其次,在每个side output的1*1卷积之前,接入两组卷积,不同side output的卷积核大小不同,如下图所示。上采样使用的方法同样是双线性插值(相较于反卷积效果更好一点),损失函数也是带权重的交叉熵损失函数,不同的是,ground truth中的像素点对应的权重为显著性区域的像素所占比例,这里主要考虑显著性目标检测不同于边缘检测,正负样本比例并不是很悬殊。

  实验结果证明,增强型的HED结构提高了3%。但在实验中发现,深层的side output能找到显著性区域的位置,但缺少细节信息;浅层的side output更注重低级特征的提取,但缺少全局信息,所以可以使用short connection的结构将高层与底层的输出结合,得到最终的预测图。short connection的方法有三种,虽然公式17-19看起来很复杂,但是仔细分析,不难看出,几种方案均是将高层分辨率低的feature map经上采样后,合并到低层的feature map中。
  第一种方案:f(6)=f(6); f(5)=f(5)+f(6); f(4)=f(4)+f(5)+f(6); f(3)=f(3)+f(4)+f(5)+f(6); f(2)=f(2)+f(3)+f(4)+f(5)+f(6); f(1)=f(1)+f(2)+f(3)+f(4)+f(5)+f(6)
  第二种方案:f(6)=f(6); f(5)=f(5); f(4)=f(4)+f(5)+f(6); f(3)=f(3)+f(4)+f(5); f(2)=f(2)+f(3)f(4); f(1)=f(1)+f(2)+f(3)
  第三种方案:f(6)=f(6); f(5)=f(5); f(4)=f(4)+f(5)+f(6); f(3)=f(3)+f(5)+f(6); f(2)=f(2)+f(3)+f(4)+f(5)+f(6); f(1)=f(1)+f(3)f(4)+f(5)+f(6)

  基于以上实验对比,最终选取第三种方案作为baseline,测试每个side output的1*1卷积之前的两组卷积在设置不同卷积核情况下的实验效果:

  测试时,将第2-4层的预测图对位相加后经sigmoid得到一个融合的预测图,将融合的预测图和第2-4层的预测图一起取mean之后作为最终的预测图。

  最后,DSS仍存在的一些问题:复杂背景,前景背景低对比度和透明的物体这三种情况下的显著性目标检测效果还有待提升。

  附南开大学媒体计算实验室主页,里面有发表的论文和部分源码。