Detail-Preserving Pooling in Deep Networks (2018 cvpr)
作者:Faraz Saeedan,Nicolas Weber,Michael Goesele,Stefan Roth
该文章提出的Detail-Preserving Pooling(DPP)使得max pooling,average pooling成为其特例,并且在池化过程中结合了卷积操作,其保留细节的探究令人愉悦,与max pooling(averag pooling)在池化核中直接提取最显著特征(平均特征)而放弃其他特征的做法(Hinton提出的capsule部分基于这点)形成对比。本文作为小博主研读该文章的结果。受博主知识上界限制,文中理解不充分之处在所难免,恭请批评指教。
摘要直译:
大部分卷积神经网络都用某种方法来逐渐缩减隐含层的规模。这种方法通常被称为池化,可以用来降低参数的规模,增强对某些扭曲的不变性,同时增大感受野。因为池化本身就是一个有损耗的过程,所以这样的层是非常重要的,它保持对网络的判别力非常重要的那部分**。然而,在块上简单的取最大值或者平均值,也就是最大值池化或者均值池化,或者是以步长卷积的形式来朴素的下采样,都是标准操作。在这篇paper中,我们的目标是在深度学习上展示image downscaling的最近结果。 受人类视觉系统聚焦于局部空间变化的启发,该文作者们提出detail-perserving pooling (DPP), 一种自适应的池化方法,这种方法能够放大空间变化并保留重要的结构细节。同样重要的是,它的参数可以和网络的其余部分共同学习。该文作者们分析了该理论的特性并在几个数据集和网络上展示它可实证的好处,即DPP始终比之前的池化方法优越。
核心分析:
考虑到上下文的连贯性和一致性,本部分将分析该文章中第三,四,五部分, 分别为detail-preserving image downscaling, detail-preserving pooling和analysis and discussion。
# Detail-Preserving Image Downscaling (DPID)
在文献[2]中,作者们的目标是保留输入图片的细小细节,因为细节往往对准确的视觉印象非常关键。他们的直觉是细微的细节比相同颜色的大块区域带有更多的信息。因此使用逆双边滤波器(inverse bilateral filter)强调不同而不是惩罚不同。给定一张输入图片
,用DPID可计算出缩减尺度的输出
其中线性缩减尺度图片
由下式给定
在第一个公式中,可以看到归一化因子
,
Fig.1 DPID的流程图
总的来说,DPID计算了输入图片的一个加权均值,并且从公式(1)中可以看出输入图片中像素值与
差别大的对输出贡献更多。且这种差别可以是正的,也可以是负的,这也意味着较亮的或较暗的像素值(与
相减)都会有较大贡献。这种机制就具有定点放大细节的效果。
# Detail-Preserving Pooling
首先直接上公式
上述公式(2)在输入图片的一个邻域上计算了该邻域中心结点的空间加权均值。对比公式(1),我们发现基本形式完全没有变化,但逆双边滤波器换成了逆双边权重(inverse bilateral weights)。该权重在论文中有两种变体,一种是对称的,另一种是非对称的。那么下面来讨论逆双边权重,论文中用下式定义
其中 偏置
,用来保证输入不会完全被消除,并能够对输出产生影响,奖励指数
,在前文也有讲到,用来调整奖励函数的形状;由于以上两个参数都可以从data中学习,这种从data中学习的机制使得池化能够适应每个feature map的需要,达到定制话的效果。
对于对称奖励函数,有以下形式
对于非对称奖励函数,有以下形式
观察以上两个奖励函数的形式,可以知道对称形式包括正负两个半轴,非对称形式限制在正半轴,也就是要求
。下面来看看奖励指数
对逆双边函数的影响,参看下图(Fig. 2)
Fig. 2 逆双边函数用来在邻域
上计算输入节点对应的权重(结合公式(3))。
左边为对称形式,奖励较大的绝对值,右边为非对称形式,奖励较大的正值。
更小的奖励指数
会压缩奖励函数的动态范围,当
趋近于0时,就相当于计算邻域上的均值。
注意到公式(3)中有个
,那么它是从哪里来的呢?答案是线性缩减尺度(linear downscaling),上公式
其中
是在邻域
上的一个可学习的,非标准化的2D滤波器,文中
的大小为3x3,使用这种
的池化,文中称其为Full-DPP。个人理解是,这里结合卷积操作,少量的增加可训练参数,可以使得特征更加鲁棒。值得注意的是,
与
在表示上有点区别,这也意味着
与
并不一定大小相同。此外,文中也给出一种DPP的变体,称为Lite-DPP,区别在于,Lite-DPP使用的
,
, 使用这种
,不会增加可训练参数,也就不会增加灵活性,达到效果就是取平均。对于Lite-DPP,论文的作者们使用的滤波大小为2x2,而不是3x3,因为3x3的大小并不能带来提升(猜测可能是性能下降,较大的滤波区上取平均,会带来更多的信息损耗......)。
既然存在可学习的参数
,
,
,就需要对这些参数求微分并更新。
我们知道之前的max pooling和average pooling并不存在梯度更新,单就max pooling,误差项会直接传递到上一层对应的区域块中最大值所对应的神经元,average pooling则把误差项平均分配到上一层对应的区域块中所有的神经元。即是是max pooling和average pooling的线性组合形式的池化,也天生不具有梯度更新的特性。那么DPP中,各参数是如何更新的呢?
从公式(2)中,可以看到,
关于
,
,
可微。对
的求微分是显而易见的。 对
,
求微分可以追溯到对称或非对称奖励函数。对于非对称奖励函数
,求其对
的微分,可以得到如下表达式
由上述公式看,是常规的微分计算。
总得来说,由于DPP能够放大特征图中的细节,所以需要对各个细节的重要性进行衡量,衡量的方式就是用
,
来控制各个节点的响应强度。
last but not least, code
参考文献
[1] Detail-Preserving Poolingi in Deep Networks. here
[2] Rapid, detail-preserving image downscaleing. here