ASLFeat(CVPR 2020)特征点检测论文笔记

1. 前言

论文地址
代码地址

问题:
(1)CNN 在提取特征的时候会忽略局部形状,而局部形状是增强几何不变性的关键
(2)检测的关键点精度不够,主要针对 D2-Net

原因:
(1)传统方法会对特征点周围区域做缩放、旋转、仿射变换等等操作使得到的特征描述符具备局部形状信息(感觉就是为了在各种差异较大的状态下也能让描述符正确匹配),但是深度方法是检测和描述符同步获取的,套用传统思路不行,举了个 LF-Net 的例子是对中间特征图进行变换,总之没有什么好的现有方案。
(2)用于检测的特征图分辨率低,并且怀疑深层特征是否能识别角点、边缘等低级结构信息。论文中提到了 SuperPoint,说是通过人工的像素级点有监督的对特征图进行上采样(总感觉说的不太对,转为分类问题应该不算对特征图上采样);R2D2 用 dilated convolution(空洞卷积/扩张卷积)来维持分辨率但是计算量太大。

创新点:
(1)通过 DCN(deformable convolutional network)关注局部形状,增强特征提取
(2)利用特征的层次结构恢复分辨率和低级信息,提高特征点精度,且不增加计算量
(3)基于 D2-Net 改进,利用峰值测量增强特征点检测

2. 方法

2.1 DCN

(1)标准的卷积

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

其中, p \mathbf{p} p 为计算卷积的空间位置, R \mathcal{R} R 为卷积核对应的偏移网格,如 ( − 1 , − 1 ) , ( 0 , − 1 ) , ⋯   , ( 1 , 1 ) (-1,-1),(0,-1),\cdots,(1,1) (1,1),(0,1),,(1,1)

(2)DCN
  DCN 通过学习采样偏移量 { △ p n ∣ n = 1 , … , N } \left\{\triangle \mathbf{p}_{n} \mid n=1, \ldots, N\right\} { pnn=1,,N} 和特征幅度 { △ m n ∣ n = 1 , … , N } \left\{\triangle \mathbf{m}_{n} \mid n=1, \ldots, N\right\} { mnn=1,,N} 来增强标准卷积, N = ∣ R ∣ N=| \mathcal{R}| N=R

y ( p ) = ∑ p n ∈ R w ( p n ) ⋅ x ( p + p n + △ p n ) ⋅ △ m n \mathbf{y}(\mathbf{p})=\sum_{\mathbf{p}_{n} \in \mathcal{R}} \mathbf{w}\left(\mathbf{p}_{n}\right) \cdot \mathbf{x}\left(\mathbf{p}+\mathbf{p}_{n}+\triangle \mathbf{p}_{n}\right) \cdot \triangle \mathbf{m}_{n} y(p)=pnRw(pn)x(p+pn+pn)mn

一些细节:
△ p n \triangle \mathbf{p}_{n} pn 通常是分数,用双线性插值实现,初始值设为0;
△ m n \triangle \mathbf{m}_{n} mn 取值范围限制在 ( 0 , 1 ) (0,1) (0,1) 之间,初始值设为0.5。

在这里插入图片描述
  DCN 论文中的示意图,(a) 为标准卷积,采样点很规则;(b) 为 DCN,采样点很灵活;(c) 和 (d) 是两个特例,体现对比例缩放、旋转的适应性。

扫描二维码关注公众号,回复: 15865827 查看本文章

(3)几何约束的 DCN
  原始的 DCN 自由度太高了,譬如 3 × 3 3\times3 3×3 的卷积有 9 × 2 9\times2 9×2 个偏移量,虽然可以表现非常复杂的变形,但是容易过拟合,比较简单的仿射变换、透视变换是比较好的近似。说白了就是这个偏移量像 (b) 那么自由也没啥意义,甚至还导致不好训练,人为给一些特定的几何变换来限制会好很多。
  文中设计了三种几何变形模型进行对比,(1) similarity,(2) affine,(3) homography
在这里插入图片描述

  各种变换的参数化部分跳过,总之得到了变换 T ∈ { S , A , H } \mathbf{T} \in\{\mathbf{S}, \mathbf{A}, \mathbf{H}\} T{ S,A,H},因此偏移量可以通过 △ p n = T p n − p n ,  where  p n ∈ R \triangle \mathbf{p}_{n}=\mathbf{T} \mathbf{p}_{n}-\mathbf{p}_{n}, \text { where } \mathbf{p}_{n} \in \mathcal{R} pn=Tpnpn, where pnR 获得。

2.2 关键点检测

  下式为 D2-Net 用于选择特征点的通道得分,左边是原公式,右边是 ASLFeat 修改了下符号。ASLFeat 认为用和最大值的比率作为指标不好,因为是否为特征点可能只和通道上的分布有微弱的关系。
β i j k = D i j k / max ⁡ t D i j t   ⟶   β i j c = y i j c / max ⁡ t y i j t \beta_{i j}^{k}=D_{i j}^{k} / \max _{t} D_{i j}^{t}\ \longrightarrow\ \beta_{i j}^{c}=\mathbf{y}_{i j}^{c} / \max _{t} \mathbf{y}_{i j}^{t} βijk=Dijk/tmaxDijt  βijc=yijc/tmaxyijt

  先是简单尝试了用 softmax 替换,结果性能降了。之后受 R2D2 启发,用峰值(peakiness)检测关键点:
β i j c = softplus ⁡ ( y i j c − 1 C ∑ t y i j t ) \beta_{i j}^{c}=\operatorname{softplus}\left(\mathbf{y}_{i j}^{c}-\frac{1}{C} \sum_{t} \mathbf{y}_{i j}^{t}\right) βijc=softplus(yijcC1tyijt)

其中, softplus ⁡ \operatorname{softplus} softplus 用来将峰值变为正值, C C C 对应原来的 N N N 代表特征维度。为了平衡两个得分,把另一个也改了一下:
α i j k = exp ⁡ ( D i j k ) ∑ ( i ′ , j ′ ) ∈ N ( i , j ) exp ⁡ ( D i ′ j ′ k )   ⟶   α i j c = exp ⁡ ( y i j c ) ∑ ( i ′ , j ′ ) ∈ N ( i , j ) exp ⁡ ( y i ′ j ′ c )   α i j c = softplus ⁡ ( y i j c − 1 ∣ N ( i , j ) ∣ ∑ ( i ′ , j ′ ) ∈ N ( i , j ) y i ′ j ′ c ) \alpha_{i j}^{k}=\frac{\exp \left(D_{i j}^{k}\right)}{\sum_{\left(i^{\prime}, j^{\prime}\right) \in \mathcal{N}(i, j)} \exp \left(D_{i^{\prime} j^{\prime}}^{k}\right)}\ \longrightarrow\ \alpha_{i j}^{c}=\frac{\exp \left(\mathbf{y}_{i j}^{c}\right)}{\sum_{\left(i^{\prime}, j^{\prime}\right) \in \mathcal{N}(i, j)} \exp \left(\mathbf{y}_{i^{\prime} j^{\prime}}^{c}\right)} \\ \ \\ \alpha_{i j}^{c}=\operatorname{softplus}\left(\mathbf{y}_{i j}^{c}-\frac{1}{|\mathcal{N}(i, j)|} \sum_{\left(i^{\prime}, j^{\prime}\right) \in \mathcal{N}(i, j)} \mathbf{y}_{i^{\prime} j^{\prime}}^{c}\right) αijk=(i,j)N(i,j)exp(Dijk)exp(Dijk)  αijc=(i,j)N(i,j)exp(yijc)exp(yijc) αijc=softplusyijcN(i,j)1(i,j)N(i,j)yijc

  看来还得补一下 R2D2,这边看上去就是都改成了和均值相减, softplus ⁡ \operatorname{softplus} softplus 可能是取绝对值?R2D2 已补
  看起来 softplus ⁡ \operatorname{softplus} softplus 就是取绝对值,没看代码也不确定,不过这边也并不关键,只是简单改了一下检测得分的设计规则。如果是取绝对值的话,和之前的区别主要在于值特别低也行,之前都是取最大值。

2.3 MulDet

  Multi-level keypoint detection (MulDet) 别的恢复分辨率的方法都会增加计算量,这边利用 CNN 的特征金字塔结构,结合多个层级的特征来检测。
  不同层级的特征图 { y ( 1 ) , y ( 2 ) , … , y ( l ) } \left\{\mathbf{y}^{(1)}, \mathbf{y}^{(2)}, \ldots, \mathbf{y}^{(l)}\right\} { y(1),y(2),,y(l)} 有不同的下采样倍率 { 1 , 2 , … , 2 ( l − 1 ) } \left\{1, 2, \ldots, 2^{(l-1)}\right\} { 1,2,,2(l1)},在每个特征图上都计算检测得分会得到一个分图 { s ( 1 ) , s ( 2 ) , … , s ( l ) } \left\{\mathbf{s}^{(1)}, \mathbf{s}^{(2)}, \ldots, \mathbf{s}^{(l)}\right\} { s(1),s(2),,s(l)},对每个分图都上采样到原图分辨率然后做加权求和:
s ^ = 1 ∑ l w l ∑ l w l s ( l ) \hat{\mathrm{s}}=\frac{1}{\sum_{l} w_{l}} \sum_{l} w_{l} \mathbf{s}^{(l)} s^=lwl1lwls(l)

  文章比较了几种多尺度方法:
  (a) D2-Net 和 R2D2 里用的,输入几种比例的原图,得到不同分辨率的特征图,然后做插值并相加;
  (b) LF-Net 里用的,通过调整中间特征的分辨率做多尺度预测;
  (c) 标准的 U-Net;
在这里插入图片描述
  喜闻乐见的分析原因:
(1)符合经典尺度空间理论(scale-space theory 一篇论文)的隐式多尺度检测(implicit multi-scale detection),利用不同大小的感受野定位特征点;
(2)和 U-Net 相比不会增加权重;
(3)U-Net 是直接融合低级和高级特征,而本文方法是保持低级特征不变,融合了在多层语义上的检测结果,有助于保留低级特征(边、角)。

2.4 网络结构

在这里插入图片描述
(1)将 D2-Net 的 VGG 主干替换为 L2-Net;
(2)和 R2D2 类似,把 L2-Net 最后 8 × 8 8\times 8 8×8 的卷积替换为3个 2 × 2 2\times 2 2×2 ,得到128维分辨率为输入图像 1/4 的特征图;
(3)将最后三个卷积层 conv6/7/8 替换为 DCN;
(4)选择 conv1/3/8 的输出做 MulDet
(5)MulDet 公式中的权重设为 w i = 1 , 2 , 3 w_i=1,2,3 wi=1,2,3,计算 α i j k \alpha_{i j}^{k} αijk 里的像素范围 N ( i , j ) \mathcal{N}(i, j) N(i,j) 设为 3 , 2 , 1 3,2,1 3,2,1,平衡对低层和高层特征的注意力。

2.5 损失函数

  发现 FCGF 的损失更好:
M ( f c , f c ′ ) = [ D ( f c , f c ′ ) − m p ] + + [ m n − min ⁡ ( min ⁡ k ≠ c D ( f c , f k ′ ) , min ⁡ k ≠ c D ( f k , f c ′ ) ) ] + \mathcal{M}\left(\mathbf{f}_{c}, \mathbf{f}_{c}^{\prime}\right)=\left[D\left(\mathbf{f}_{c}, \mathbf{f}_{c}^{\prime}\right)-m_{p}\right]_{+}+\left[m_{n}-\min \left(\min _{k \neq c} D\left(\mathbf{f}_{c}, \mathbf{f}_{k}^{\prime}\right), \min _{k \neq c} D\left(\mathbf{f}_{k}, \mathbf{f}_{c}^{\prime}\right)\right)\right]_{+} M(fc,fc)=[D(fc,fc)mp]++[mnmin(k=cminD(fc,fk),k=cminD(fk,fc))]+

其中, D ( ⋅ , ⋅ ) D(\cdot,\cdot) D(,) 表示两个描述符间的欧氏距离, m p = 0.2 m_p=0.2 mp=0.2 m n = 1.0 m_n=1.0 mn=1.0,并且和 D2-Net 类似,设了一个安全半径为3(不把离得很近的点作为错误匹配点,也就是把相对于 ground truth 距离非常近的点也当做匹配成功)

3. 个人总结

(1)用了比较高级的卷积 DCN,并且设计了几何约束规则限制了自由度,使这个卷积很适合特征点检测任务。
(2)略微修改了检测得分的设计规则。
(3)多尺度融合,这边的思路不是把特征图融合做检测,而是对不同的特征图做了检测以后把检测的结果通过加权求和融合。
  感觉比较偏工程化刷指标,流程创新不是很大。

猜你喜欢

转载自blog.csdn.net/weixin_43605641/article/details/121487885