Attentive Feedback Network for Boundary-Aware Salient Object Detection

版权声明: https://blog.csdn.net/Dorothy_Xue/article/details/91398519

原文链接:https://pan.baidu.com/s/1n-dRVC4sLWCmhhD5bnVXqg

这是2019CVPR中的一篇图片显著对象检测的文章,是我所跑通的几篇code中效果比较不错的,主打边缘速度

文章的主要贡献可以大致分成两部分:

  1.  提出了一个注意力的反馈网络(Attentive Feedback Network, AFNet),主要用于编码器解码器每一级(一一对应的)的特征传递,逐级预测显著性对象,以及边缘优化。
  2. 提出了一个边缘增强的损失函数。

直接上模型:

图中E^{(l)}D^{(l)}分别是VGG16,以及其对应的解码结构。l代表第几阶段,从图中可以看出来,一共分成了5个阶段,其中E和D一一对应。最后的GPM是一个全局感知模型,其实就是这样的:

这个图很好理解,不多说了,重点是那个AFM结构,口述一下它运行的流水账流程:

  1. E^{(3)}接收E^{(2)}的直接结果,通过3个卷积层之后得到f^{(3,1)}_e,这个特征图的上下标意思是编码阶段第3阶段第1时间步得到的特征图。将f^{(3,1)}_ef^{(4,2)}_dS^{(4,2)}Concate到一起,得到I^{(3,1)}。然后I^{(3,1)}被送进解码器对应的解码结构中,也是3层卷积,与编码一一对应,得到f^{(3,1)}_dS^{(3,1)},用于第2时间步的计算。
  2. 在第2时间步中,首先要先计算一张三元图。包括:确定是前景的部分,确定是背景的部分,不确定的部分。怎么分?将第1时间步得到的S^{(3,1)}进行膨胀腐蚀(其实就是进行了两次最大池化操作,膨胀:D^{(l)}(S^{(l,1)})=P^{max}_{M^{(l)}_d}(S^{(l,1)}),腐蚀:E^{(l)}(S^{(l,1)})=-P^{max}_{M^{(l)}_e}(-S^{(l,1)})),然后对膨胀及腐蚀后特征图取平均,得到三元图T^{(3)}前景值接近1,不确定部分接近0.5,背景值接近0。
  3. E^{(3)}将接收的E^{(2)}与三元图T^{(3)}逐像素相乘,这样就相当于做了一个预处理操作,然后再送到编码器中,经过3个卷积层之后得到f^{(3,2)}_e,也就是编码阶段第3阶段第2时间步得到的特征图。然后将步骤1中得到的f^{(3,1)}_dS^{(3,1)}f^{(3,2)}_e进行Concate之后得到I^{(3,2)}
  4. 最后再将I^{(3,2)}送到解码部分中进行解码,得到最终的显著图。

关于损失函数部分:

这项工作对解码阶段的每个阶段得到的不同尺度的显著图都进行了损失计算,把GT弄成对应大小就行。

损失函数主要分成两部分:一个是常规的用于显著性检测的交叉熵损失函数,另一部分是边缘增强损失函数。关于这个边缘增强损失函数,是这样定义的:

L(S^{(l,t)},G^{(l)})=\lambda _1\cdot L_{ce}(S^{(l,t)},G^{(l)})+\lambda _2\cdot L_e(B^{(l)}(S^{(l,t)}),B^{(l)}(G^l}))

其中L_{ce}(S^{(l,t)},G^{(l)})就是交叉熵损失函数。S和G分别是预测的显著图以及GT。L_e(B^{(l)}(S^{(l,t)}),B^{(l)}(G^l}))就是边缘增强损失函数。其中B^{(l)}定义如下:

B^{(l)}(X)=|X-P^{ave}_{A^{(l)}}(X)|

X是GT,P^{ave}_{A^{(l)}}(X)是指对X进行最大池化操作,得到的B^{(l)}(X)就是GT对应的边缘。所以边缘增强损失函数,就是求GT的边缘与模型得到的显著图的边缘之间的差异。

大致流程如此,详见论文。

猜你喜欢

转载自blog.csdn.net/Dorothy_Xue/article/details/91398519