Abstract
对局部图像特征做高效率匹配是许多计算机应用的基础任务。但是对于算力有限的设备(如手机或无人机)来说,顶尖的匹配算法会大打折扣。本文介绍了 BEBLID,一个高效的二元图像描述子。它改进了之前的实数描述子—BELID,匹配更加高效、准确。作者使用了 AdaBoost 和改进后的 weak-learner 训练方式,输出更好的局部描述信息。此外,强迫所有的 weak learners 拥有与 strong learner 组合相同的权重,对描述子做二元化,在未标注数据集上训练,解决匹配和提取任务中不对称的问题。在本文实验中,BEBLID 取得了与 SIFT 相近的准确率,效率要高于 ORB,是目前业内最快的算法。
1. Introduction
当出现较强的外观变化时(比如光照变化或几何变换),可用局部图像表征来做匹配。它们是计算机视觉任务中的一个基础组成,包括3D重建、SLAM、图像检索、跟踪、识别或姿态估计。局部特征是目前最流行的图像表征方法,因为局部特征是有差异的,可在不同视角下保持不变性,对局部遮挡鲁棒性强、高效率,排除了信息少的图像区域。
为了输出一个局部图像表征,我们必须检测出一组显著的图像结构,给出每个的描述信息。不少高效的检测器能用于各种低层级结构的检测,如角点、区域、线条,可用实数或二进制描述子来表示,二进制是最快的提取与匹配方法。本文作者解决了高效二进制特征描述任务。
尽管 SIFT 描述子已经提出了近20年了,它仍被认为是一个黄金标准技术。但是从最近提出的 HPatches 基准,可以看到仍然有很大的改进空间。基于深度模型的描述器在各任务上都提升了 mAP,但需要巨大的计算资源。这就使其在硬件和电量有限的设备上使用很困难,比如手机、无人机、机器人等。人们对此进行了大量研究,提出了许多局部特征检测器和描述器,使它们可以在资源有限的设备上运行,达到实时性,但准确率要明显低于 SIFT。
最近作者提出了一个高效率的实数描述器 — BELID。该特征使用完整的图像来高效计算两个方形图像区域的平均灰度值差异。在 BELID 中,作者使用 BoostedSSC 算法来选择一组特征,然后结合起来产生一个很强的描述信息。BELID 的执行时间接近目前最快的方法 ORB,准确率接近于 SIFT。在图块验证方面,它的准确性高于 SIFT;而在 HPatches 基准的图像匹配和图块检索任务上,要差于 SIFT。这里作者使用了 AdaBoost 来改进 BELID 的特征选取过程,对描述内容做二值化。
本文中,作者介绍了 BEBLID(Boosted Efficient Binary Local Image Descriptor),一个非常高效率的二值局部图像描述器。作者使用了 AdaBoost 和不均衡的数据集来训练该描述器,解决其严重的不对称图像匹配问题。为了二值化该描述器,我们最小化一个新的相似度损失,所有的 weak learners 共享一般权重。在实验中,BEBLID 在准确率和速度上都领先于 ORB 和 LATCH,这俩是目前非深度学习领域中顶尖的二值描述器。
2. Related Works
SIFT 是目前最知名的的特征检测和描述算法。因为它在许多视觉任务上都表现不错,应用很广。但是在某些场景中,它需要使用 GPU 来实现实时性。
人们后来提出的其它的描述器来改进 SIFT,如 SURF、BRIEF、BRISK、ORB、FREAK、BOLD。二值方法能输出一个二值化的描述子,在内存占用和匹配速度上都非常高效率。最快的二值化方法(BRIEF、BRISK、ORB、FREAK、BOLD)根据像素对的比较来使用特征。它们速度快的关键就是,比较次数是有限的。在比较 512 对随机的像素值之前,BRIEF 使用固定 ( 9 × 9 ) (9\times 9) (9×9)的平滑卷积核。BRISK 使用了一个圆环模式,通过高斯方法对像素做平滑,像素点距离中心点越远,方差就越大。FREAK 也有一个圆环模式,与 BRISK 相似,通过重叠高斯来选择无关联的像素对。ORB 描述器是 BRIEF 的扩展,它考虑了局部特征的不同朝向信息。通过一个固定的子窗口大小,对整幅图像做平滑。它使用了一个贪心算法,将选中的像素对设为不相关。BOLD 使用了与 ORB 相似的对间比较,计算方式类似 ORB,选择一组能降低图块内距离的比较结果。该方法的问题是,它们为了速度牺牲了准确性,表现远差于 SIFT。
基于监督学习算法的描述器能进一步提升性能。DAISY 学习池化区域,以及如何进行降维。Simonyan 等人利用凸优化来预测超参数,而BinBoost和BELID使用Boosting。LATCH 描述器比较了三个选中区域的灰度值,在图块验证问题上是不相关、可判别的。
深度学习使描述器端到端的监督学习成为可能。基于CNN的方法会用裁剪图块中的像素对或三元组来训练。一些方法用了 Siamese 网络、L2 损失和负样本难例挖掘。另一些方法则关于平均精度来优化损失,或优化一个三元组损失,在训练过程中聚焦到负样本上。L2Net 是最流行的 CNN 描述器结构,也在 Hardnet 和 DOAP 中有用。TFeat 以一种高效的方式使用三元组,出于速度考虑,只训练了一个很浅的网络。这些方法在 HPatches 基准上的准确度表现都显著领先于SIFT。但是,它们的计算成本太高了。TFeat 是深度学习描述器中最快的一个方法,它使用了一块 GPU,却要比 CPU 上跑的 ORB 慢了4倍。L2Net 更大,在 GPU 上的运行速度要比 CPU 上的 ORB 慢15倍。
本文提出了 BEBLID,一个使用了 Boosting 方法的二值描述器,选择局部图像区域中最具判别力的像素(见图1)。类似于最快的二值化方法,该特征也是基于灰度值的差异。但在BELID中,作者计算的是一个格子内的平均灰度值差异。格子的大小是一个尺度参数,提升判别力。BEBLID 和 BinBoost 相似,使用 Boosting 机制来找寻最佳特征。但是,BinBoost 输出的描述信息中,每一个bit都是梯度特征的组合,这要比对间比较的计算更多。在实验中,从速度和精度两个方面,作者证明了像素值对比较要比 BinBoost 量化梯度特征更优。
图1. 在 Liberty Patch 数据集上训练的,BELID 和 BEBLID 像素点采样对(左)和空间权重热力图(右)的可视化。这两种方法学到的点对分布都不错,中心区域要更加重要一些。
3. Boosted Efficient Binary Local Image Descriptor
本章节,作者提出了二值图像描述器,BEBLID。至此,作者首先介绍一个基于AdaBoost的实数描述器。在 weak learner (WL)选取策略中使用 AdaBoost 使我们可以在不均衡数据上训练。当所有的 WL共享权重时,可进一步简化为一个二值描述器。这两类描述器的效率高,关键在于它们使用了一个高效的 WL,基于阈值的对间比较。
3.1 Real valued Boosted Efficient Local Image Descriptor
{ ( x i , y i , l i ) } i = 1 N \{(\mathbf{x}_i, \mathbf{y}_i, l_i)\}_{i=1}^N {(xi,yi,li)}i=1N是训练集,由图块对组成 x i , y i ∈ X \mathbf{x}_i, \mathbf{y}_i \in \mathcal{X} xi,yi∈X,标签是 l i ∈ { − 1 , 1 } l_i \in \{-1, 1\} li∈{−1,1}。其中 l i = 1 l_i = 1 li=1表示这两个图块都属于同一显著图像结构, l i = − 1 l_i=-1 li=−1表示它们是不同的。我们使用 AdaBoost 来最小化损失:
L B E L I D = ∑ i = 1 N exp ( − γ l i ∑ k = 1 K α k h k ( x i ) h k ( y i ) ⏟ g s ( x i , y i ) ) (1) \mathcal{L}_{BELID} = \sum_{i=1}^N \exp \left( -\gamma l_i \underbrace{\sum_{k=1}^K \alpha_k h_k (\mathcal{x}_i) h_k (\mathcal{y}_i)}_{g_s(\mathcal{x}_i, \mathcal{y}_i)} \right) \tag{1} LBELID=i=1∑Nexp⎝⎜⎜⎜⎜⎛−γligs(xi,yi) k=1∑Kαkhk(xi)hk(yi)⎠⎟⎟⎟⎟⎞(1)
γ \gamma γ是收缩率或学习率参数, h k ( z ) ≡ h k ( z ; f , T ) h_k(\mathbf{z}) \equiv h_k(\mathbf{z};f,T) hk(z)≡hk(z;f,T)对应ensemble g s g_s gs中,第k个与权重 α k \alpha_k αk结合的 WL。WL 需要一个特征提取函数: f : X → R f:\mathcal{X}\rightarrow \mathbb{R} f:X→R 和一个阈值 T T T。给定 f f f和 T T T,通过阈值为 T T T的函数 f ( x ) f(\mathbf{x}) f(x) 来定义 WL:
h k ( x ; f , T ) = { + 1 if f ( x ) ≤ T − 1 if f ( x ) > T (2) h_k(\mathbf{x};f,T)=\left\{ \begin{aligned} +1 & \quad \text{if} & f(\mathbf{x})\leq T \\ -1 & \quad \text{if} & f(\mathbf{x})> T \end{aligned} \right. \tag{2} hk(x;f,T)={+1−1ififf(x)≤Tf(x)>T(2)
等式1的损失可以看作为一个由 g s g_s gs给定的相似度学习函数, h ( x ) \mathbf{h(x)} h(x)是对图像块 x \mathbf{x} x的 K K K 个 WL 响应的向量。该图块的描述子为:
D ( x ) = A 1 2 h ( x ) = [ α 1 ⋅ h 1 ( x ) , . . . , α K ⋅ h K ( x ) ] T (3) \mathbf{D(x)=A^{\frac{1}{2}} h(x)} = [\sqrt{\alpha_1}\cdot h_1(\mathbf{x}), ..., \sqrt{\alpha_K} \cdot h_K(\mathbf{x})]^T \tag{3} D(x)=A21h(x)=[α1⋅h1(x),...,αK⋅hK(x)]T(3)
其中 A = diag ( α 1 , . . . , α k ) \mathbf{A}=\text{diag}(\alpha_1, ..., \alpha_k) A=diag(α1,...,αk), α i \alpha_i αi是 AdaBoost 对于第i个 WL h i ( x ) h_i(\mathbf{x}) hi(x)的权重。我们将该描述子表示为 BELID-U-ADA,这与BELID不同,BELID 学习一个完整的矩阵 A \mathbf{A} A,对 WLs 的关系建模。
3.2 Thresholded Average Box weak learner
BEBLID 效率的关键在于选择一个 f ( x ) f(\mathbf{x}) f(x),其判别力和计算速度都不错。特征提取函数 f ( x ) f(\mathbf{x}) f(x)的定义如下:
f ( x ; p 1 , p 2 , s ) = 1 s 2 ( ∑ q ∈ R ( p 1 , s ) I ( q ) − ∑ r ∈ R ( p 2 , s ) ) (4) f(\mathbf{x;p_1,p_2},s) = \frac{1}{s^2}\left( \sum_{\mathbf{q}\in R(\mathbf{p_1},s)} I(\mathbf{q}) - \sum_{\mathbf{r}\in R(\mathbf{p_2},s)} \right) \tag{4} f(x;p1,p2,s)=s21⎝⎛q∈R(p1,s)∑I(q)−r∈R(p2,s)∑⎠⎞(4)
其中 I ( t ) I(t) I(t)是像素点t的灰度值, R ( p , s ) R(\mathbf{p},s) R(p,s)是中心位于 p \mathbf{p} p的方形边框,大小是 s s s。因此, f f f计算 R ( p 1 , s ) R(\mathbf{p_1},s) R(p1,s)和 R ( p 2 , s ) R(\mathbf{p_2},s) R(p2,s)像素点的平均灰度值的差异。图2的红色和蓝色框分别表示 R ( p 1 , s ) R(\mathbf{p_1},s) R(p1,s)和 R ( p 2 , s ) R(\mathbf{p_2},s) R(p2,s)。
图2. BEBLID 描述器提取流程。为了描述图像块,BEBLID 高效地计算红框和蓝框中的像素平均灰度值。对于每对红-蓝框,它减去平均值。然后,对
f
(
x
)
f(x)
f(x)应用阈值,得到
h
(
x
)
h(x)
h(x)和二值描述符
D
(
x
)
=
h
(
x
)
≥
0.
D(x)=h(x)\geq 0.
D(x)=h(x)≥0.
每次 AdaBoost 迭代时,作者通过下面的评价手段找到最佳的 WL:1) 像素对 ( p 1 , p 2 ) (p_1,p_2) (p1,p2)的一个固定数 N p N_p Np,2) 所有大小是 s s s的方形区域,3) 所有的阈值 T T T。受 BoostedSSC 启发,作者针对给定的 WL 设计了一个高效算法来选择最佳的离散阈值。该算法将每对图块 f ( x ; p 1 , p 2 , s ) f(\mathbf{x;p_1,p_2},s) f(x;p1,p2,s)的响应作为输入,找到能最小化加权分类损失的阈值。算法的复杂度是 O ( P log P ) ( P = 2 N ) O(P\log P)(P=2N) O(PlogP)(P=2N),使我们可以最快的速度搜索所有可能的阈值。
为了加速 f f f的计算,我们使用了 S S S,输入图像的全部。当 S S S有了,方形边框的灰度和就有了,只需4次内存读取和3次算数计算。为了让该描述子与欧式变换无关,作者用局部结构来对结果做缩放。
3.3 Binary descriptor learning
为了得到一个二值描述,作者优化下面的损失函数:
L B E B L I D = ∑ i = 1 N exp ( − γ l i ∑ k = 1 K h k ( x ) h k ( y ) ) (5) \mathcal{L}_{BEBLID} = \sum_{i=1}^N \exp \left( -\gamma l_i \sum_{k=1}^K h_k(\mathbf{x})h_k(\mathbf{y}) \right) \tag{5} LBEBLID=i=1∑Nexp(−γlik=1∑Khk(x)hk(y))(5)
其中 γ \gamma γ是 WL 的权重。在实际操作中,它是一个收缩参数,控制训练的速度。如果算法无法找到一个比盲猜更好的 WL,我们就会停止训练, γ \gamma γ决定了选中的 WL 的个数。
最终,为了让输出为 { 0 , 1 } \{0,1\} {0,1},作者将-1转化为了0, + 1 +1 +1转化为了1(如图2)。新的二值描述器叫做 BEBLID。
这就是 Boosting 机制,所有 WL 对最终决策提供相同的贡献。该机制背后的想法如下。对于 AdaBoost 的最小化过程,每个 WL 的贡献程度都用 α k \alpha_k αk 加权。在解决二值图块分类的问题时,这个常数依赖于第 k k k个 WL。但是,我们对于描述器解决其它的图像问题也很感兴趣。对于其它一些任务来说,如图像匹配和图像检索,如果一个描述器中所有的 WL 都具备相同的权重,表现会更好。在实验中,作者证明这个想法是对的。
3.4 BELID, BELID-U and BELID-U-ADA
在以前的工作中,通过最小化等式1,作者使用了 BoostedSSC 来计算 BELID-U 描述器。如3.1节所说,本文作者通过 AdaBoost 来优化它,得到 BELID-U-ADA。
通过建模 WL 之间的关系,预测矩阵 A \mathbf{A} A,提升其相似度。FP-Boost 预测一个对称的 A \mathbf{A} A,利用随机梯度下降法来最小化:
L F P = ∑ i = 1 N exp ( − l i h ( x ) T A h ( y ) ) (6) \mathcal{L}_{FP} = \sum_{i=1}^N \exp (-l_i \mathbf{h(x)}^T \mathbf{Ah(y)}) \tag{6} LFP=i=1∑Nexp(−lih(x)TAh(y))(6)
BELID 将一张图像块 x \mathbf{x} x表示为 D ( x ) = B T h ( x ) \mathbf{D(x)=B}^T\mathbf{h(x)} D(x)=BTh(x),其中 B = [ b 1 , . . . , b D ] , b ∈ R K \mathbf{B=[b}_1,...,\mathbf{b}_D],\mathbf{b}\in \mathbb{R}^K B=[b1,...,bD],b∈RK是矩阵 A \mathbf{A} A中最大的 D D D个特征值对应的特征向量,它是用FP-Boost预测的。