Deformable Convolutional Networks 可变形卷积网络解析

Deformable Convolutional Networks

1. 什么是可变形卷积?

Deformable Convolutional Networks 中提出了一种可以变形的卷积核和池化核,也就是不使用原来的正方形卷积核,而且一个多边形。这样可以让卷积核更多地聚集在目标的轮廓上。

下面对比两种图片:

卷积核聚集在人的身上:
在这里插入图片描述
卷积核聚集在羊的身上:
在这里插入图片描述
所以论文中的核心思想就是:将固定形状的卷积过程改造成了能适应物体形状的可变的卷积过程,从而使结构适应物体形变的能力更强

2. 可形变卷积解决了什么问题?

传统的CNN只能靠一些简单的方法(比如max pooling)来适应物体的形变,如果形变的太厉害就无能为力了。为了改变这种情况专家们想了很多方法,最常见的有两种:

  1. 使用大量的数据进行训练。 比如用ImageNet数据集,再在其基础上做翻转等变化来扩展数据集,通俗地说就是通过穷举的方法使模型能够适应各种形状的物体,这种方法收敛较慢而且要设计复杂的网络结构才能达到理想的结果,但是,如果用训练中没有遇到过的新形状物体(但同属于一类)来做测试,由于新形状没有训练过,会造成测试不准确,而且靠数据集来适应形变的训练过程太耗时,网络结构也必须设计的很复杂
  2. 设计一些特殊的算法来适应形变。 比如SIFT,目标检测时用滑动窗口法来适应目标在不同位置上的分类也属于这类;但是,如果物体的形状极其复杂,要设计出能适应这种复杂结构的算法就更困难了。

传统的方法都不行,那要怎么办呢?

思路很清晰就是:我预定为正方形的感知野,但是感受野上的每一个点加一个偏移量,偏移的大小是通过学习得来的,偏移后感受野不再是个正方形,而是和物体的实际形状相匹配。这么做的好处就是无论物体怎么形变,卷积的区域始终覆盖在物体形状的周围。

下面用论文中的一个图来演示一下变化过程:
在这里插入图片描述

3. 可变形卷积的具体实现细节

在说明具体实现细节之前我现在这样说明一下双线性插值的概念

3.1 双线性插值

想要理解双线性查找,那我们想来说一下什么是线性插值。

线性插值的概念非常简单粗暴,就是两个点A,B,要在AB中间插入一个点C(点C坐标在AB连线上),就直接让C的值落在AB的值的连线上就可以了。

如A点坐标(0,0),值为3,B点坐标(0,2),值为5,那要对坐标为(0,1)的点C进行插值,就让C落在AB线上,值为4就可以了。当然前提是C在AB的连线上,如果C不在AB的连线上要怎么办呢,很简单分别沿x轴和y轴进行线性插值,然后给他加起来就ok啦,这个过程就叫做双线性插值

举个栗子:

如图,已知Q12,Q22,Q11,Q21,但是要插值的点为P点,这就要用双线性插值了,首先在x轴方向上,对R1和R2两个点进行插值,这个很简单,然后根据R1和R2对P点进行插值。
在这里插入图片描述
有兴趣的可以去维基百科看看推导的公式

说了那么多这个公式究竟是用来干什么的呢?在cv中主要是用来改变图像的大小,但是在这里并不是这个用法。你需要知道双线性插值是更加坐标系中已知量的值去得到一个未知坐标的值。下面的公式就会对其进行一个运用

3.2 可变形卷积 Deformable Convolution

传统的卷积结构可以定义成如下公式:

y ( p 0 ) = ∑ p n ∈ R w ( p n ) ⋅ x ( p 0 + p n + Δ p n ) \mathbf{y}\left(\mathbf{p}_{0}\right)=\sum_{\mathbf{p}_{n} \in \mathcal{R}} \mathbf{w}\left(\mathbf{p}_{n}\right) \cdot \mathbf{x}\left(\mathbf{p}_{0}+\mathbf{p}_{n}+\Delta \mathbf{p}_{n}\right) y(p0)=pnRw(pn)x(p0+pn+Δpn)
pn是卷积输出每一个点相对感受野上的每一个点的偏移量,取整数。

采用全新的可变形卷积后要在公式1基础上给每个点再增加一个偏移量Δpn,这个新的偏移量是由另一个卷积得出,所以一般是小数

y ( p 0 ) = ∑ p n ∈ R w ( p n ) ⋅ x ( p 0 + p n + Δ p n ) \mathbf{y}\left(\mathbf{p}_{0}\right)=\sum_{\mathbf{p}_{n} \in \mathcal{R}} \mathbf{w}\left(\mathbf{p}_{n}\right) \cdot \mathbf{x}\left(\mathbf{p}_{0}+\mathbf{p}_{n}+\Delta \mathbf{p}_{n}\right) y(p0)=pnRw(pn)x(p0+pn+Δpn)

x(p0+pn+Δpn)的取值位置非整数,并不对应feature map上实际存在的点,所以必须用插值来得到,这里我们就用双线性插值的方法来获取。然后我们可以得到这个公式
x ( p ) = ∑ q G ( q , p ) ⋅ x ( q ) = ∑ q g ( q x , p x ) ⋅ g ( q y , p y ) ⋅ x ( q ) = ∑ q max ⁡ ( 0 , 1 − ∣ q x − p x ∣ ) ⋅ max ⁡ ( 0 , 1 − ∣ q y − p y ∣ ) ⋅ x ( q ) \begin{array}{l} x(\mathrm{p})=\sum_{q} G(\mathrm{q}, \mathrm{p}) \cdot x(\mathrm{q}) \\ =\sum_{q} \mathrm{g}\left(\mathrm{q}_{\mathrm{x}}, \mathrm{p}_{\mathrm{x}}\right) \cdot g\left(\mathrm{q}_{\mathrm{y}}, \mathrm{p}_{\mathrm{y}}\right) \cdot x(\mathrm{q}) \\ =\sum_{q} \max \left(0,1-\left|\mathrm{q}_{\mathrm{x}}-\mathrm{p}_{\mathrm{x}}\right|\right) \cdot \max \left(0,1-\left|\mathrm{q}_{\mathrm{y}}-\mathrm{p}_{\mathrm{y}}\right|\right) \cdot x(\mathrm{q}) \end{array} x(p)=qG(q,p)x(q)=qg(qx,px)g(qy,py)x(q)=qmax(0,1qxpx)max(0,1qypy)x(q)
x(q)表示feature map上所有整数位置上的点的取值

这里双线性插值的公式我就不在多做说明了。原理我在上面已经说过了。通过这样的可变形卷积层我们就完成了可变形卷积啦

下面放上论文中的可变形卷积的网络结构:
在这里插入图片描述
其中上方的卷积用于输出偏移量,该输出的长宽和输入特征图的长宽一致,维度则是输入的2倍(因为同时输出了x方向和y方向的偏移量,要用2个维度分开存储)。

3.3 可变形的ROI Pooling

ROI Pooling 的改进和卷积核的改进方式基本相同都是再增加一个偏移量

改进前:

y ( i , j ) = ∑ p ∈  bin  ( i , j ) x ( p 0 + p ) / n i j \mathbf{y}(i, j)=\sum_{\mathbf{p} \in \text { bin }(i, j)} \mathbf{x}\left(\mathbf{p}_{0}+\mathbf{p}\right) / n_{i j} y(i,j)=p bin (i,j)x(p0+p)/nij
改进后:

y ( i , j ) = ∑ p ∈ bin ⁡ ( i , j ) x ( p 0 + p + Δ p i j ) / n i j \mathbf{y}(i, j)=\sum_{\mathbf{p} \in \operatorname{bin}(i, j)} \mathbf{x}\left(\mathbf{p}_{0}+\mathbf{p}+\Delta \mathbf{p}_{i j}\right) / n_{i j} y(i,j)=pbin(i,j)x(p0+p+Δpij)/nij

其中 Δ p i j \Delta p_{i j} Δpij是每个bin的偏移量,要注意这个偏移量是针对整个bin的,也就是说一个bin中的每一个点该值都相同。

下面放上网络结构:
在这里插入图片描述
可以看到,需要做ROI Pooling处理的区域首先完成没有偏移下的pooling过程,输出kkchannel个数据,再用一个全连接层输出kk2*channel个点表示在x和y方向上的偏移 p n p^n pn,再对它按如下公式进行处理处理得到真正的偏移量pn。公式中 γ \gamma γ是个增益,作者建议取0.1,与(w,h)进行点乘是为了让偏移量的调整幅度能适配ROI的尺寸。pn也是个小数,需要通过双线性插值来得到真正的值,插值的方法和可变卷积相同,不再重复描述。

Δ p i j = γ ⋅ Δ p ^ i j ∘ ( w , h ) \Delta \mathbf{p}_{i j}=\gamma \cdot \Delta \widehat{\mathbf{p}}_{i j} \circ(w, h) Δpij=γΔp ij(w,h)

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可变形卷积网络Deformable Convolutional Networks, DCN)是一种卷积神经网络,其允许卷积核的形状在运行时发生变化。这使得网络能够适应不同形状的目标,并在识别对象时获得更高的精度。DCN通过在普通卷积层上加入一个可变形控制层来实现可变形卷积。 ### 回答2: 可变形卷积网络Deformable Convolutional Networks,DCN)是一种基于卷积神经网络(CNN)的改进技术。它是由微软亚洲研究院提出的一种新型的卷积实现。相比于传统的卷积操作,可变形卷积更加适合于图像中存在的错位、形变等问题。 可变形卷积网络使用了可变形卷积操作代替了普通的卷积操作。其主要思想是在空间结构中引入可变形卷积核,并利用其根据突出区域自适应进行偏移,从而获得更准确的分割结果。具体来说,可变形卷积使用了两个并行的转换网络,它们的输出结果被用来控制卷积核的偏移。一个转换网络用于生成偏移量,而另一个用于生成系数。 对于一个输入图像的像素点而言,传统的卷积操作使用的卷积核是在固定位置上的局部像素数据去学习特征的权重。而可变形卷积则引入了可变形卷积核,并增加了一个偏移量的学习过程。即可变形卷积核首先会根据突出区域自适应调整,形成具有方向性和形变性质的卷积核,再用这个卷积核去识别图像的特征。 总之,相比较于使用固定的卷积核来进行卷积操作,可变形卷积网络可以更加准确地提取图像的特征,消除像素错位的问题,并获得更加可靠和精准的预测结果。近年来,可变形卷积网络已经被广泛应用到目标检测、语义分割等领域,取得了不俗的成效。 ### 回答3: Deformable Convolutional Networks(可变形卷积网络)是一种基于卷积神经网络(CNN)的创新结构,能够自适应感受野来适应不同尺度的特征提取。传统CNN的卷积核是固定的,无法区分不同位置像素的重要性,而DCN则引入了可变形卷积来实现自适应调整卷积核,从而获得更好的特征提取能力。 DCN最大的特点就是在卷积操作中引入了可变形卷积,即使卷积核不断变形,也能够对图像中不同成分进行区分。具体来说,可变形卷积将每个卷积核拆分成两部分,一部分是原始卷积核,一部分则是从特征图中自适应生成的偏移量。通过调整偏移量,可变形卷积核能够自适应调整,以适应不同的图像区域,从而提高了准确率。 相对于传统CNN,DCN在许多领域都有了极大的优势。比如在目标检测中,DCN能够对于不同尺度的物体进行更好的特征提取,因此在各种目标检测任务中都取得了很不错的成果。在语义分割领域,DCN能够真正意义上地较好地适应于不规则的语义区域,能够更加准确地分割出更加复杂的物体。 总之,Deformable Convolutional Network 是一种创新结构,能够通过引入可变形卷积来提高图像特征提取的准确性,并在目标检测和分类、语义分割等领域中取得了良好的表现。未来,这种创新性结构还会不断地被应用于更加丰富多彩的图像识别场景中,带来更加优秀的表现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值