【论文阅读笔记】Partial Convolution based Padding

本文介绍了部分卷积(partial convolution)在解决深度学习中padding引入无效信息的问题,通过自适应加权在边界区域提供更精准的检测。实验表明,部分卷积训练的模型在不同填充策略下表现稳健,尤其在分类和语义分割任务中优于零填充。部分卷积用于边界处理,改善了边缘预测的准确性,并展示了在VGG和ResNet模型上的应用以及对其他填充方案的鲁棒性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

论文地址:https://arxiv.org/abs/1811.11718
代码地址:https://github.com/NVIDIA/partialconv

论文小结

  本文提出一种有效地解决因padding造成的无效信息增加的方案。
  本文提出的解决方案借鉴于partial convolution的思想,以此一起解决padding造成的问题,可以在边界处得到更有效的检测,可以得到比zero-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)11(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)
x ′ ( i , j ) = W T ( X ( i , j ) p 0 ⊙ 1 ( i , j ) p 0 ) r ( i , j ) + b = W T X ( i , j ) p 0 r ( i , j ) + b \begin{aligned}x'(i,j)&=W^T(X_{(i,j)}^{p0}\odot1_{(i,j)}^{p0})r(i,j)+b \\ &= W^TX_{(i,j)}^{p0}r(i,j)+b \end{aligned} x(i,j)=WT(X(i,j)p01(i,j)p0)r(i,j)+b=WTX(i,j)p0r(i,j)+b其中,r(i,j)的表示如下: r ( i , j ) = ∥ 1 ( i , j ) p 1 ∥ 1 ∥ 1 ( i , j ) p 0 ∥ 1 r(i,j)=\frac{\|1_{(i,j)}^{p1}\|_1}{\|1_{(i,j)}^{p0}\|_1} r(i,j)=1(i,j)p011(i,j)p11

  如上公式所示,零填充的方式就是该方案的一种特例,其中 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)11(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重叠的分割结果。可看出部分卷积对边界区域的分割效果更好。
在这里插入图片描述
  下面展示了没有重叠的tile分割结果。
在这里插入图片描述

  仅评估边界区域的mIoUs,而不关心中心区域。本文做了很多消除中心区域的比例,下表展示了消除中心区域信息的mIoUs评估结果。可以看出:当剔除中心区域面积越大,则零填充和部分卷积的填充之间的评估差距越大。这进一步证明了部分卷积的填充方案巨大地改善了近图像边缘的预测准确度。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值