| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 【论文阅读笔记】Partial Convolution based Padding -> 正文阅读 |
|
[人工智能]【论文阅读笔记】Partial Convolution based Padding |
论文地址:https://arxiv.org/abs/1811.11718 论文小结??本文提出一种有效地解决因padding造成的无效信息增加的方案。 ??直观上来说,partial convolution是通过mask,得到一个有效区域的权重,从而只使用“有效”区域的信息进行推理,再以此权重进行调整。在padding上的问题上,具体而言,依据padded区域和卷积滑动窗口区域的比率,来给卷积结果在图像边界附近重新加权。 ??该方法是一种即插即用的方法,可以在任何网络中使用。 论文介绍??在本文中,将padding之类的无效区域称为"holes"(孔洞),而将有效的原始区域成为"holes"(孔洞)。 ??在作者的试验中,反射填充(reflection padding)和复制填充(replication padding)一般和零填充(zero padding)相似,有些情况下甚至更差。零填充是向输入添加了额外不相关的数据,而reflection和replication是复用边界附近的信息。这三种方式都是给原始输入添加或复制了同样是“同等”的输入特征(即网络分不清是否是不同的特征),这使得网络有可能因此被混淆。 ??与零填充相比,基于部分卷积的padding,自适应地给输出加权,以调整缺失部分的比例。相对地,零填充使用零作为缺失的输入。因此,作者将pad区域视为孔洞(holes),然后利用部分卷积(partial convolution)层进行卷积操作的重加权。 ??通过实验,作者发现,使用零填充训练的网络,对推理过程中使用的填充方式十分敏感,若使用不同的填充将会有很大的性能下降。相应的,基于部分卷积的padding训练的模型具有鲁棒性,无论在推理过程使用哪种填充方式,模型性能都相似。 ??同时,使用基于部分卷积的padding方式,可以改善边缘附近区域的语义分割。 部分卷积??Partial Convolution一开始提出是为了处理不完全的输入数据,比如有孔洞的图像。 X ( i , j ) X_{(i,j)} X(i,j)?表示滑动窗口内的特征值,而 M ( i , j ) M_{(i,j)} M(i,j)?是对应的二元mask,其中mask中的0表示孔洞区域,mask中的1表示非孔洞区域。部分卷积在每个位置的定义如下: x ( i , j ) ′ = { W T ( X ( i , j ) ⊙ M ( i , j ) ) r ( i , j ) , ∥ M ( i , j ) ∥ 1 > 0 0 , o t h e r s i s e x'_{(i,j)}=\left\{ \begin{aligned} &W^T(X_{(i,j)}\odot M_{(i,j)})r(i,j), & \|M_{(i,j)}\|_1 > 0 \\ &0, &othersise \end{aligned} \right. x(i,j)′?={?WT(X(i,j)?⊙M(i,j)?)r(i,j),0,?∥M(i,j)?∥1?>0othersise?其中, ⊙ \odot ⊙是元素积, 1 ( i , j ) 1_{(i,j)} 1(i,j)?是和输入一样大小的全1向量,而 r ( i , j ) r_{(i,j)} r(i,j)?的定义如下: r ( i , j ) = ∥ 1 ( i , j ) ∥ 1 ∥ M ( i , j ) ∥ 1 r_{(i,j)}=\frac{\|1_{(i,j)}\|_1}{\|M_{(i,j)}\|_1} r(i,j)?=∥M(i,j)?∥1?∥1(i,j)?∥1?? ??Paritial Convolution和普通置零的区别就在于多了一个重权值因子 r ( i , j ) r_{(i,j)} r(i,j)?,这样的卷积输出只依赖于有用的输入。 ??在每次应用部分卷积的操作后,就需要更新mask,步骤如下:如果这个滑动窗口中含有一个有效值,则这个位置的mask就是有效值。 m ( i , j ) ′ = { 1 , i f ?? ∥ M ( i , j ) ∥ 1 > 0 0 , o t h e r w i s e m'_{(i,j)}=\left\{ \begin{aligned} &1,&if\ \ \|M_{(i,j)}\|_1>0 \\ &0,&otherwise \end{aligned} \right. m(i,j)′?={?1,0,?if??∥M(i,j)?∥1?>0otherwise? ??这部分卷积的操作,作为前向传播的一部分,可以很容易在任何深度学习框架中实现。 基于部分卷积的padding??特征
X
(
i
,
j
)
X_{(i,j)}
X(i,j)?是图像边界处的输入,让
1
(
i
,
j
)
1_{(i,j)}
1(i,j)?是和
X
(
i
,
j
)
X_{(i,j)}
X(i,j)?有一样长宽,但只有一个通道的的2D矩阵,
X
(
i
,
j
)
p
0
X_{(i,j)}^{p0}
X(i,j)p0?表示为
X
(
i
,
j
)
X_{(i,j)}
X(i,j)?的零填充,
1
(
i
,
j
)
p
0
1_{(i,j)}^{p0}
1(i,j)p0?表示
1
(
i
,
j
)
1_{(i,j)}
1(i,j)?的零填充,
1
(
i
,
j
)
p
1
1_{(i,j)}^{p1}
1(i,j)p1?表示
1
(
i
,
j
)
1_{(i,j)}
1(i,j)?的
1
1
1填充。下图是以上表示的可视化。 ??将部分卷积扩展到处理padding,则定义原始输入区域为非孔洞,而padding区域为孔洞。卷积的结果如下所示:
X
(
i
,
j
)
p
0
X_{(i,j)}^{p0}
X(i,j)p0?和
1
(
i
,
j
)
p
0
1_{(i,j)}^{p0}
1(i,j)p0?的零填充区域一致,故实际上这和平常的零填充不一样的地方还是加了一个重权重因子
r
(
i
,
j
)
r(i,j)
r(i,j)。 ??如上公式所示,零填充的方式就是该方案的一种特例,其中 r ( i , j ) r(i,j) r(i,j)是设为了常量 1 1 1。 x ′ = W T X ( i , j ) p 0 + b x'=W^TX_{(i,j)}^{p0}+b x′=WTX(i,j)p0?+b Case of Big Padding Size??为了让网络模型的输入大小一致,一般都会在图像层面上加padding。在这样的边界上应用卷积,可能没有有效的原始数据,因为可能窗口大小要小于填充元素的大小。在这种情况下,应用第一层卷积前,要将mask进行填充,即对Mask进行padding。卷积的应用也如上面更新Mask一样进行更替。 实现和实验??本文的实现方式是纯pytorch实现,将mask作为和输入tensor X有相同batchsize、相同宽高的单通道特征。当前的实现是基于现有的pytorch接口,允许用户无需编译新的CUDA内核即可使用。若这个padding方案直接使用CUDA实现,则额外的时间耗费可耗费不计,因为我们只需要在边界重新加权卷积结果。 ??同时,
∥
1
(
p
1
)
∥
1
∥
1
(
p
0
)
∥
1
\frac{\|1_{(p1)}\|_1}{\|1_{(p0)}\|_1}
∥1(p0)?∥1?∥1(p1)?∥1??只需要在每个输入分辨率大小改变的时候计算一次,之后就可以缓存结果,以备以后的迭代使用。故第二次迭代的执行时间短于第一次迭代。对比的时间如下图所示: 分类网络任务??在分类网络任务上,训练了VGG和ResNet的几个网络,而VGG使用了带BN层的版本。每个网络训练5次,以此来减少由于初始化和随机小批量抽样造成的方差问题。结果如下面两个表所示:带有部分卷积的padding的模型拥有的标准差要比zero-padding要小,即基于部分卷积的padding模型性能要更稳定,对随机性具有鲁棒性。而且几个不同容量网络的分析,可看出更小的网络有更大的潜力和改进空间。 ??使用部分卷积的padding训练模型和使用zero-padding训练模型的收敛速度对比如下图所示:使用部分卷积的padding训练模型的收敛速度更快,其训练漂移更少,即训练更稳定。 ??下图展示了10张在zero-padding训练模型的5次迭代中都失败的,但是在部分卷积的padding训练的5次迭代都成功的例子。 ??下图展示了最后一列的两个图像的相同激活图。可看出,基于零填充的网络,产生的边缘的特征图有最强的激活响应,这表示很容易混淆网络的预测。由于这些边界特征很大程度上依赖于前一层的填充零值,这在一定程度上也可能意味着零值有可能误导网络。 ??下表展示了零填充训练的网络对其他填充方案进行推断,可看出零填充对于不同的填充方案十分敏感。partial Convolution的padding方案要鲁棒得多,损失较少 语义分割任务网络??语义分割任务为避免减少分辨率,常使用扩张卷积,但扩张卷积通常需要更大的padding。使用部分卷积的padding方案有更好的结果,如下表所示。 ??Tile-based的评估一般有更好的结果,如下图所示: ??tile-based的方法,一张图分开,可能导致不完整的上下文,且显著地增加了边缘信息。我们可以重叠上下文区域进行采样来改进这一点。虽然重叠的tiles可以降低边界问题的重要性。但上表展示了基于部分卷积的padding模型比zero-padding有更大的改进。这是因为部分卷积对边界问题更健壮,因此受边界附近像素增加的影响更小。 ??下图展示了
1
3
\frac13
31?的tile重叠的分割结果。可看出部分卷积对边界区域的分割效果更好。 ??仅评估边界区域的mIoUs,而不关心中心区域。本文做了很多消除中心区域的比例,下表展示了消除中心区域信息的mIoUs评估结果。可以看出:当剔除中心区域面积越大,则零填充和部分卷积的填充之间的评估差距越大。这进一步证明了部分卷积的填充方案巨大地改善了近图像边缘的预测准确度。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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/27 18:22:44- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |