| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 【文献阅读】Cascaded Partial Decoder for Fast and Accurate Salient Object Detection -> 正文阅读 |
|
[人工智能]【文献阅读】Cascaded Partial Decoder for Fast and Accurate Salient Object Detection |
写在前面这是2019CVPR的一篇文章,关于显著目标检测的。提出了一种CPD框架 整体框架这篇文章的模型是基于VGG16设计的 VGG16分为五个阶段 我们先说一下本文的网络模型的整体结构: 将VGG16这五个阶段得到的特征图,分别表示为 f i = f 1 , f 2 , f 3 , f 4 , f 5 f_i=f_1,f_2,f_3,f_4,f_5 fi?=f1?,f2?,f3?,f4?,f5?,大小为 H / 2 ( i ? 1 ) ??? , W / 2 ( i ? 1 ) H/2^{(i-1)} \ \ \ , W/2^{(i-1)} H/2(i?1)???,W/2(i?1) 作者设计了一种分支网络,利用最后两个卷积块构造了两个分支(注意力分支和检测分支) 这是作者给出的网络结构 上面是注意力分支,下面是检测分支。 在注意力分支作者设计了一个部分解码器partial decoder 来集成后三层卷积块 f 3 , f 4 , f 5 f_3,f_4,f_5 f3?,f4?,f5?提取的特征 经过这个部分解码器,生成了初始的显著图像 S i S_i Si?。 我们把这个部分解码器叫做 D a = g a ( f 3 a , f 4 a , f 5 a ) D_a=g_a (f_3^a,f_4^a,f_5^a) Da?=ga?(f3a?,f4a?,f5a?),解码器输出 S i S_i Si? S i S_i Si?再经过一个整体注意力模块(holistic attention module,HAM)后,得到一个增强的特征 S h S_h Sh?
然后我们将特征图 f 3 f_3 f3?与 S h S_h Sh?按元素相乘,得到检测分支的细化特征 f 3 d = f 3 ⊙ S h f_3^d =f_3\odot S_h f3d?=f3?⊙Sh? 同理,将 f 4 f_4 f4?与 S h S_h Sh?按元素相乘,得到 f 4 d = f 4 ⊙ S h f_4^d =f_4\odot S_h f4d?=f4?⊙Sh? 将 f 5 f_5 f5?与 S h S_h Sh?按元素相乘,得到 f 5 d = f 5 ⊙ S h f_5^d =f_5\odot S_h f5d?=f5?⊙Sh? 我们为检测分支构造另一个部分解码器 D d = g d ( f 3 d , f 4 d , f 5 d ) D_d = g_d(f_3^d,f_4^d,f_5^d) Dd?=gd?(f3d?,f4d?,f5d?),这个解码器输出最终的显著图像 S d S_d Sd? 使用ground truth联合训练两个分支,两个分支参数不共享。 这就是网络的整体结构和处理流程 下面我们主要详细说下两个部分解码器(partial decoder)和整体注意力模块(holistic attention module,HAM) 部分解码器这个部分解码器,主要目的就是快速的集成三个块得到的特征图,这里作者设计了一个上下文模块conext module 主要借鉴于这篇论文
这篇文章是ECCV2018年,主要贡献就是提出了RFB(Receptive Field Block) 出发点是模拟人类视觉的感受野从而加强网络的特征提取能力 做法就是将特征图通过不同卷积分支,最后再合并不同分支的结果,然后再与特征图合并。 网络结构如下图所示: 就是在ReLU之前,通过这个模块,增加感受野 左边的结构是原始的RFB,右边的结构相比RFB把3×3的conv变成了两个1×3和3×1的分支,一是减少了参数量,二是增加了更小的感受野,这样也是在模拟人类视觉系统,捕捉更小的感受野。 而本文作者在原有的RFB基础上增加了一个分支。 我画了个图 代码如下:
回到我们的论文中,VGG16后三个卷积块提取的特征,首先全部经过一个RFB,然后再送入我们的部分解码器 这个部分解码器具体做了些什么呢? 首先,VGG16的五个块每次通过池化都会让图像的尺寸减半。 参考文章:https://blog.csdn.net/qq_42012782/article/details/123222042 但是本论文中使用的VGG是修改过的 池化层放在卷积块的前面,并且第一个卷积块不池化。 具体的可以去看代码,此处只要知道 假设输入图片是WxW,第一个块输出尺寸等于原尺寸,第二个块原尺寸的1/2,第三个块是1/4,第四个块是1/8,第五个块是1/16 这个部分解码器,就是将x5,x4,x3拿出来。
做了个示意图,虚线框圈起来的就是部分解码器做的事情 代码如下:
整体注意力我们可以拿上面注意力分支得到的显著图 S i S_i Si?直接与下面的特征图相乘,然后送入检测分支。但是这样的做法有利有弊,如果我们获得的 S i S_i Si?是准确的,那么我们这样做可以很好的抑制干扰,但是如果我们的 S i S_i Si?是错误的,那么这种做法就会得到不好的结果。 所以,本文作者提出了“整体注意力模块”Holistic Attention Module 这个模块的目的是扩大初始显著图
S
i
S_i
Si?中显著目标的面积 f m i n _ m a x ( ) f_{min\_max}() fmin_max?()是一个归一化函数,使值模糊映射在范围[0,1]内 M A X ( ) MAX() MAX()是一个极大值函数,由于卷积运算会模糊Si,它倾向于增加Si显著区域的权重系数 这边代码上做的是:
代码如下:
然后下面检测分支,拿到这个x3,以及x4,x5,同样的做一个部分解码器,这个解码器与注意力分支的那个解码器操作一致。 最终输出结果 S d S_d Sd? 整体代码整个网络的流程代码如下:
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 20:49:30- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |