记录一手最近看的直线检测论文。
线段和连接点是低级视觉中的重要视觉特征,为高级视觉任务提供基本信息,如姿势估计、运动结构、3D重建,图像匹配、线框到图像的转换和图像校正。
LSD直线检测方法首先计算每个像素点的水平线(level-Line)角度,从而形成了一个水平线场,即单位矢量场,这里像素点的水平线角度就是该点梯度方向的垂直角度,如下图所示,而水平线场就是一个与图像中的点一一对应的矩阵,矩阵中元素的值即为对应到图像中点的水平线角度。
算法首先计算每个像素的水平线角度,以构成一个水平线场。该场被分割为连通的若干个部分,它们方向近似相同并且在容忍度τ内,这样可以得到一系列区域,这些区域被称为 line support regions(支持域)。
整体算法的过程图
随着深度神经网络的出现,基于深度学习的LSD体系结构已经采用模型来学习线段的各种几何线索,并证明其性能有所提高。
York Urban Line Segment Database Information
wireframe
网络将输入图像划分为一个 H × W H\times W H×W网格。如果连接点的中心落入网格单元,该单元负责检测它。因此,每个第 i j ij ij单元预测置信度得分 c i j c_{ij} cij,反映模型认为该单元中存在连接点的置信度。为了进一步定位连接点,每个第 i j ij ij单元还预测其到单元中心的相对位移 x i j x_{ij} xij。
分支检测
将圆(即从0到360度)划分为 K K K个相等的bin,每个bin跨越 360 K \frac{360}{K} K360度。设第 k k k个bin的中心为 b k b_k bk,然后将角度 θ θ θ表示为 ( k , ∆ k ) (k,∆k) (k,∆k) ,如果 θ θ θ落入第 k k k个bin,其中 ∆ k ∆k ∆k是从中心bk沿顺时针方向的剩余角度。因此,对于每个bin,我们回归到这个局部方向 ∆ k ∆k ∆k 。
网络架构由一个编码器和两组解码器组成。编码器将整个图像作为输入,通过卷积网络生成高级描述符的 H × W H×W H×W网格。然后,解码器使用特征描述符进行连接点预测。每个连接点由 p i j = ( x i j , c i j , θ i j , c i j k θ k = 1 K ) p_{ij}=(x_{ij},c_{ij},{θ_{ij},c^θ_{ijk}}^K_{k=1}) pij=(xij,cij,θij,cijkθk=1K)描述,其中, x i j x_{ij} xij是连接中心的坐标, c i j ∈ [ 0 , 1 ] c_{ij}∈ [0,1] cij∈[0,1]是第 i j ij ij个网格单元中存在连接的置信度得分, θ i j k θ_{ijk} θijk是第 k k k个bin中分支的角度, c i j k c_{ijk} cijk是bin的置信度得分。这两组解码器分别预测连接中心和分支。每个FCN解码器是一个卷积层+回归器。
连接点Loss
L = λ c o n f c L c o n f c + λ l o c c L l o c c + λ c o n f b L c o n f b + λ l o c b L l o c b L=\lambda_{conf}^cL^c_{conf}+\lambda^c_{loc}L^c_{loc}+\lambda^b_{conf}L^b_{conf}+\lambda^b_{loc}L^b_{loc} L=λconfcLconfc+λloccLlocc+λconfbLconfb+λlocbLlocb
编码器基于Google的Inception-v2模型,只使用网络中的前几层,每个解码器由一个 3 × 3 × 256 3×3×256 3×3×256卷积层、一个ReLU层和一个回归器组成。
该网络为每个像素 p p p预测其是否落在线 l l l上。为了抑制局部边缘、短线和曲线,将像素 p p p处的预测值 h ( p ) h(p) h(p)设置为其所属线的长度。给定具有GT线 L L L的图像, h ( p ) h(p) h(p)的目标值定义为:
h ( p ) = { d ( l ) p is on a line l in L 0 p is not on any line in L h(p)= \begin{cases} d(l) &\text{$p$is on a line l in L}\\ 0 &\text{$p$is not on any line in L} \end{cases} h(p)={d(l)0pis on a line l in Lpis not on any line in L
直线Loss
L = ∑ i , j ∣ ∣ h ^ ( p i j ) − h ( p i j ) ∣ ∣ 2 2 L=\sum_{i,j}||\hat{h}(p_{ij})-h(p_{ij})||^2_2 L=i,j∑∣∣h^(pij)−h(pij)∣∣22
以一幅 320 × 320 × 3 320×320×3 320×320×3的RGB图像作为输入,通过三个金字塔残差模块(PRM)提取一幅 80 × 80 × 256 80×80×256 80×80×256的特征地图。然后,特征图经过五个堆叠的沙漏模块,然后是两个完全卷积和ReLU层( 5 × 5 × 32 和 5 × 5 × 16 5×5×32和5×5×16 5×5×32和5×5×16)和一个 5 × 5 × 1 5×5×1 5×5×1卷积层,以输出 320 × 320 × 1 320×320×1 320×320×1像素级的heatmap。
首先应用阈值 w w w将线heatmap h h h转换为二值图 M M M。一对检测到的连接点 p p p和 q ∈ P q∈ P q∈P,如果它们在(或接近于)彼此的分支上,通过线段 l = ( p , q ) l=(p,q) l=(p,q)连接,则将该线段 l l l添加到 L L L。如果在连接点 p p p的同一分支上有多个检测到的连接,只保留最短的线段,以避免重叠。
对于连接点 p p p的未连接分支,首先查找位于分支射线上的最远线像素 q M q_M qM,再找线段 ( p , q M ) (p,q_M) (p,qM)与L中线段的交点 q 1 , q 2 . . . q S {q_1,q_2...q_S} q1,q2...qS,计算每个段的线支撑比 k k k(线像素数与线段总长度比例), k k k大于0.6则将该段放入 L L L,其端点放入 P P P。
一种自下而上的直线检测方法。
结构复杂,存在多个相互独立的阶段(DWP)
L-CNN包含了四个模块:
一个用来进行特征提取的主干网络将一个图片作为输入并为后续的模块提供了共享卷积特征图;
连接点预测模块,输出候选连接点;
线段采样模块,从连接点预测模块输出的连接点预测出线段;
线段校正模块,分类出预测的线段。
主干网络选择SHN,首先通过两个步长为2的卷积层进行下采样,然后通过堆叠的沙漏模块进行特征细化。Loss为各模块Loss之和。
一个 W × H W\times H W×H的图片首先被划分成 W b × H b W_b\times H_b Wb×Hb个区域。对于每个区域,网络预测该区域是否存在一个连接点,如果存在,网络继续预测连接点在该区域的相对位置。在数学上,网络输出一个连接点似然概率特征图 J J J和一个偏移特征图 O O O。
J ( b ) = { 1 ∃ i ∈ V : p i ∈ b 0 o t h e r w i s e J(b)= \begin{cases} 1 &\exists i\in V:p_i\in b\\ 0 &otherwise \end{cases} J(b)={10∃i∈V:pi∈botherwise
O ( b ) = { ( b − p i ) / W b ∃ i ∈ V : p i ∈ b 0 o t h e r w i s e O(b)= \begin{cases} (b-p_i)/W_b &\exists i\in V:p_i\in b\\ 0 &otherwise \end{cases} O(b)={(b−pi)/Wb0∃i∈V:pi∈botherwise
将预测J视作一个分类问题并使用平均的二分类交差熵损失作为损失函数。使用L2回归来预测偏移量特征图 O O O。为了预测 J J J和 O O O,L-CNN设计了一个包含两个 1 × 1 1\times 1 1×1卷积层的网络来将特征图转化为 J J J和 O O O。由于偏移量 O ( b ) O(b) O(b)的范围在 [ − 1 / 2 , 1 / 2 ) × [ − 1 / 2 , 1 / 2 ) [-1/2, 1/2) ×[-1/2, 1/2) [−1/2,1/2)×[−1/2,1/2),我们在网络的输出后面追加一个带-0.5的偏移量的sigmoid激活函数用来归一化输出。
使用非极大值抑制矫正得到 J ′ ( b ) J'(b) J′(b),利用max-pooling实现。
线段采样模块的目的是在训练阶段生成一个线段列表 L j j = 1 M = ( p ~ j 1 , p ~ j 2 ) j = 1 M {L_j}^M_{j=1}={(\tilde{p}^1_j,\tilde{p}^2_j)}^M_{j=1} Ljj=1M=(p~j1,p~j2)j=1M,这样线段校正模块就可以进行线段预测的学习。在这个任务中,正负样本及其不平衡,L-CNN通过设计采样机制来定位这个问题。
静态采样器:对于每张图片,静态线段采样直接从真实标注中提取出 N s + N_s+ Ns+个正样本和 N s − N_s- Ns−个负样本。负线段样本的总量相比正线段样本十分巨大。为了缓解这个问题,我们对负线段样本S-进行采样,一组负线段样本的集合可能难以分类,使用以下的启发式算法来计算S-:首先我们将所有的真实线段映射到一个 64 × 64 64\times 64 64×64的低分辨率二值图上。然后,对于每个可能的由一对儿连接点构成而实际上却不是真实线段的连接,我们定义它的hard分数为该线段的二值图上的平均像素密度。对每张图片,S-被设置为具有最高hard分数的2000个线段。
动态采样器:采样器首先将所有的预测连接点匹配到真实连接点上。 m i = a r g m i n j ∣ ∣ p ^ i − p i ∣ ∣ 2 m_i=arg min_j||\hat{p}_i-p_i||_2 mi=argminj∣∣p^i−pi∣∣2,如果 p i p_i pi和 p m i p_{mi} pmi之间的l2距离小于阈值 η η η,我们认为候选连接点 p i p_i pi完成了匹配。对每个候选线段 ( p ^ i 1 , p ^ i 2 ) (\hat{p}_{i1},\hat{p}_{i2}) (p^i1,p^i2),根据如下准则将它放入D+,D-和D*:
如果 p i 1 p_{i1} pi1和 p i 2 p_{i2} pi2都被匹配了,且 ( m i 1 , m i 2 ) ∈ E (m_{i1}, m_{i2}) ∈ E (mi1,mi2)∈E,我们添加该条线段到正样本集合D+中;
如果 p i 1 p_{i1} pi1和 p i 2 p_{i2} pi2都被匹配了,且 ( m i 1 , m i 2 ) ∈ S − (m_{i1}, m_{i2}) ∈ S- (mi1,mi2)∈S−,我们添加该线段到负向样本集合D-中;
随机样本集合D*包含所有候选连接点预测出的线段,不管匹配结果是什么。
线段验证模块接收到一个候选线段的列表和特征图,并预测每个线段是否正确。在训练阶段,L由线采样模块训练得出,在推理阶段,L是每个预测连接点对的集合。
对每个候选线段,将两个端点的坐标送入LoI池化层,并返回一个固定长度的特征向量。然后,将合并后的特征向量输入到一个由两个全连接层构成的网络并取log值返回。线段的损失函数是sigmoid二元交叉熵损失,loss计算单元是该log值和该线段的真实标签,可以是正样本或负样本。为了保持正负样本之间的损失平衡,修正网络中每张图片的损失是两个互相独立的损失的和,分别是正样本线段和负样本线段的平均。
AFM提出了一种基于区域划分的线段地图吸引场对偶表示方法,并将线段检测问题归结为区域着色问题。后者则通过学习深度卷积神经网络来解决。是一种自上而下的直线检测方法。
线段heatmap中线/非线不平衡性问题,需要额外的启发式搜索算法(L-CNN)。
根据一个点到线的距离函数,将每个像素分配给一个且仅一个线段来计算。与一条线段相关联的像素形成一个区域。
在吸引场图中,分区区域中的每个像素由其在像素和线段上的投影点之间的吸引/投影向量表示。
给定一个吸引场图A,首先通过计算晶格中每个像素p的实值投影点来反转它,并进行离散化,然后计算线图。利用了区域生长思想。
L-CNN中线采样器阶段计算效率低,AFM并非严格端到端,性能低于L-CNN。
所提出的方法由三个部分组成:
初始化:线段检测和连接点检测。给定输入图像,它首先通过共享特征主干来提取深层特征。主干网络选择SHN。
细化:线段和连接点匹配。在细化过程中,如果线段的两个端点由两个连接点支持,则保留线段。如果连接点未找到任何支持线段,则将其删除。
验证:线段和连接点分类。验证过程是对细化阶段的线段和连接点进行分类(双重检查)。采用L-CNN中的LoI
AFM方法中基于位移向量的几何重参数化方案只能提供投影点不在线段外的像素投影向量的完整信息。如果不仅使用p与其投影点之间的位移向量,还包括p与线段两端点之间的两个位移向量,我们可以通过其6-D位移向量重新参数化p,该向量可以完全确定线段。有些像素(例如,任何线段上的点)不应重新参数化,以避免退化,并被视为背景。由于6-D编码训练效果差,作者改用改进的4-D编码方式。
平移:将点p用作新的坐标原点。
旋转:然后将线段与垂直 y y y轴对齐,端点 x 1 x_1 x1在顶部,点 p p p(新原点)在左侧。旋转角度用 θ θ θ表示。
缩放:距离 d d d作为单位长度,在新坐标系中归一化 x x x轴/ y y y轴。
在仿射变换后的新坐标系中,设 θ 1 θ_1 θ1和 θ 2 θ_2 θ2为图所示的两个角度, p ( l ¨ ) p(\ddot{l}) p(l¨)被重新参数化为
p ( l ¨ ) = ( d , θ , θ 1 , θ 2 ) p(\ddot{l})=(d,\theta,\theta_1,\theta_2) p(l¨)=(d,θ,θ1,θ2)
对于没有被任何线段吸引的“背景”点,我们使用虚拟4-D向量对其进行编码(−1, 0, 0, 0)。
仿射变换后进行规范化。 d / d m a x d/d_{max} d/dmax, θ 2 π + 1 2 \frac{\theta}{2\pi}+\frac{1}{2} 2πθ+21。
设 A ^ \hat{A} A^为4-D预测图, Δ d \Delta d Δd为距离残差图,总损失为 l 1 l_1 l1计算的 L L S = L ( A , A ^ ) + L ( Δ d , Δ d ^ ) L_{LS}=L(A,\hat{A})+L(\Delta d,\hat{\Delta d}) LLS=L(A,A^)+L(Δd,Δd^)。
与L-CNN相同使用 J J J, O O O。
当且仅当其两个端点可以与基于欧几里德距离的两个连接点相匹配且具有预定义阈值 τ τ τ时,才保留来自初始集的线段。如果在细化后与任何线段方案不匹配,则将删除连接点。匹配后,将线段和连接点耦合在一起,并使用轻型分类器进一步验证。
采用与L-CNN相同的LoI,此外采用了与L-CNN中静态采样器类似的方法进行了样本扩充,验证阶段采用二值交叉熵损失。
采用图的方法进行线段预测。在第一阶段检测连接点,然后识别所有点之间的连接性。包括四部分
1、用于在整个输入图像上进行特征提取的卷积主干架构
2、连接检测模块(JDM)
3、线段对齐模块(LSAM),用于提取由一对检测到的连接定义的线段候选的特征张量
4、邻接矩阵推理模块(AMIM),用于检测每个连接对之间的连接
给定一幅图像,网络预测两个连接点的位置及其由邻接矩阵表示的连接度。
使用CSAIL网络作为主干网络,对于大小为 H × W H×W H×W的输入图像,骨干网络提取大小为 H / 4 × W / 4 H/4×W/4 H/4×W/4的256通道特征图。
JDM首先通过卷积结构从主干网络提取的特征中回归点heatmap,卷积结构包括两个conv3x3-bn-relu块,然后是一个带有sigmoid激活的conv1x1层。然后确定heatmap中的所有点,其中点响应高于阈值 τ τ τ,并且在8个相邻点中最高。然后对检测到的点进行分组,分组内任意两点之间的距离不大于 ϵ \epsilon ϵ,预测各组中连接响应最高的点为连接点。
给定两个连接点和一个特征映射,LSAM沿着连接对定义的线段候选对特征映射进行采样,并从特征映射中提取固定长度的特征向量。
LSAM提取对应于不同连接顺序的线段的两个特征向量,然后将其馈送到三个级联的conv2d-gn-relu块中。然后,使用单个conv2d-sigmoid块以不同的顺序获得连接对的连通性置信度,其中最低的为连接对的最终置信度。
(实在是懒得打公式了,直接截图了)
自上而下的方法没有对端点的明确定义,自下而上的方法受连接点预测的影响,且计算速度低。
提出了三点(TP)表示法,它使用一个根点作为唯一恒等式来定位线段,并且相应的两个端点用其相对于根点的位移来表示。此外,受人类根据直线感知线段的启发,我们通过嵌入特征聚合模块,将直线分割图与TP相关特征融合,利用直线分割图作为结构化先验来指导TP的推理。该检测器由三部分组成:特征提取主干、TP提取分支和线段分支。
U形网络用于生成共享特征,然后将其馈送到两个分支:1、TP提取分支,其中包含根点检测任务和偏移回归任务;2、线条分割分支,生成像素级线图。这两个分支由特征聚合模块(FAM)连接。最后,经过点滤波模块处理后,通过TP Generat将过滤后的TPs转换为矢量化的线段实例。
根点检测部分:每个像素都被分类以区分它是否是根点。输出激活函数为sigmoid函数。
偏移回归:回归连续域中起点和终点相对于根点的两个位移。
不精确的确定端点,为线段检测提供先验知识。输出激活函数是sigmoid函数。
FAM:由 t a n h ( w × P ( L + b ) ) tanh(w\times P(L+b)) tanh(w×P(L+b))获得直线激活映射 A l A_l Al,共享特征首先与 A l A_l Al聚合,送入根点检测部分。偏移回归部分类似。
PFM:利用线图过滤线外的噪声根点。
P ~ ( R ) = P ~ ( R ∣ L ) × P ~ ( L ) α \tilde{P}(R)=\tilde{P}(R|L)\times \tilde{P}(L)^\alpha P~(R)=P~(R∣L)×P~(L)α
L t o t a l = λ r o o t L r o o t + λ d i s p L d i s p + λ l i n e L l i n e L_{total}=\lambda_{root}L_{root}+\lambda_{disp}L_{disp}+\lambda_{line}L_{line} Ltotal=λrootLroot+λdispLdisp+λlineLline
根点置信度图由GT在零值图上标记根点位置,进行二维高斯平滑并使用 5 × 5 5\times 5 5×5窗口截断。对于偏移图,计算根点附近 5 × 5 5\times5 5×5窗口到端点的距离,赋予这些像素。
L M S = S c o r e θ × S c o r e l LMS=Score_{\theta}\times Score_{l} LMS=Scoreθ×Scorel
使用轻量化的Mobile-V2网络,直接从特征图生成线段。
L T P = L c e n t e r + L d i s p + L m a t c h L_{TP}=L_{center}+L_{disp}+L_{match} LTP=Lcenter+Ldisp+Lmatch
SoL损失同理
从中心点和位移向量导出的端点应为连接点。学习连接点和线段的分割图可以作为LSD的空间注意线索。总分段损失定义为 L s e g = L j u n c + L l i n e L_{seg}=L_{junc}+L_{line} Lseg=Ljunc+Lline
由于偏移向量可以从线段的长度和度数中导出,因此它们可以作为额外的几何线索。我们根据GT计算长度和度数,并在每个GT图的线段中心标记该值。接下来,将这些值外推到 3 × 3 3×3 3×3窗口,以便给定像素的所有相邻像素包含相同的值。总回归损失可表示为 L r e g = L l e n t h + L d e g r e e L_{reg}=L_{lenth}+L_{degree} Lreg=Llenth+Ldegree
几何损失函数定义为分段损失和回归损失之和:
L G e o = L s e g + L r e g L_{Geo}=L_{seg}+L_{reg} LGeo=Lseg+Lreg
总损失函数如下:
L t o t a l = L T P + L S o L + L G e o L_{total}=L_{TP}+L_{SoL}+L_{Geo} Ltotal=LTP+LSoL+LGeo
1、图像特征提取:给定图片首先基于 ResNet 提取图片特征 x ∈ R H × W × C x\in R^{H\times W\times C} x∈RH×W×C
2、图像特征编码:将特征 x ∈ R H × W × C x\in R^{H\times W\times C} x∈RH×W×C拉平编码 x ′ ∈ R H W × C x'\in R^{HW\times C} x′∈RHW×C,使用标准Transformer框架的多头自注意力模块和前馈网络。
3、Transformer解码器: N N N个可学习的线实体通过SA,CA,与编码器输出交互。
4、线段预测:线实体使用Transformer解码器顶部的两个预测头进行线段预测。
设计了多尺度的编解码器
设计了直线检测Loss
在粗解码阶段,我们将图像特征和线实体传递到编码器-解码器-转换器架构中。编码器从ResNet的Conv5(C5)输出中接收原始分辨率为 1 32 \frac{1}{32} 321的粗略特征。
细解码器从粗解码器继承线实体,从细编码器继承高分辨率特征。编码器的输入来自ResNet的Conv4(C4)输出,原始分辨率为 1 16 \frac{1}{16} 161。