直线检测论文(霍夫变换,LSD,DWP,L-CNN,AFM,HAWP,PPGNet,TP-LSD,M-LSD,LETR)
记录一手最近看的直线检测论文。
直线检测
线段和连接点是低级视觉中的重要视觉特征,为高级视觉任务提供基本信息,如姿势估计、运动结构、3D重建,图像匹配、线框到图像的转换和图像校正。
传统方法
霍夫变换
LSD
LSD直线检测方法首先计算每个像素点的水平线(level-Line)角度,从而形成了一个水平线场,即单位矢量场,这里像素点的水平线角度就是该点梯度方向的垂直角度,如下图所示,而水平线场就是一个与图像中的点一一对应的矩阵,矩阵中元素的值即为对应到图像中点的水平线角度。
算法首先计算每个像素的水平线角度,以构成一个水平线场。该场被分割为连通的若干个部分,它们方向近似相同并且在容忍度τ内,这样可以得到一系列区域,这些区域被称为 line support regions(支持域)。
整体算法的过程图
基于深度学习的LSD
随着深度神经网络的出现,基于深度学习的LSD体系结构已经采用模型来学习线段的各种几何线索,并证明其性能有所提高。
LSD数据集
York Urban Line Segment Database Information
wireframe
[DWP](Learning to Parse Wireframes in Images of Man-Made Environments (thecvf.com))
连接点检测
网络将输入图像划分为一个H×WH\times WH×W网格。如果连接点的中心落入网格单元,该单元负责检测它。因此,每个第ijijij单元预测置信度得分cijc_{ij}cij,反映模型认为该单元中存在连接点的置信度。为了进一步定位连接点,每个第ijijij单元还预测其到单元中心的相对位移xijx_{ij}xij。
分支检测
将圆(即从0到360度)划分为KKK个相等的bin,每个bin跨越360K\frac{360}{K}K360度。设第kkk个bin的中心为bkb_kbk,然后将角度θθθ表示为(k,∆k)(k,∆k)(k,∆k) ,如果θθθ落入第kkk个bin,其中∆k∆k∆k是从中心bk沿顺时针方向的剩余角度。因此,对于每个bin,我们回归到这个局部方向∆k∆k∆k 。
网络架构由一个编码器和两组解码器组成。编码器将整个图像作为输入,通过卷积网络生成高级描述符的H×WH×WH×W网格。然后,解码器使用特征描述符进行连接点预测。每个连接点由pij=(xij,cij,θij,cijkθk=1K)p_{ij}=(x_{ij},c_{ij},{θ_{ij},c^θ_{ijk}}^K_{k=1})pij=(xij,cij,θij,cijkθk=1K)描述,其中,xijx_{ij}xij是连接中心的坐标,cij∈[0,1]c_{ij}∈ [0,1]cij∈[0,1]是第ijijij个网格单元中存在连接的置信度得分,θijkθ_{ijk}θijk是第kkk个bin中分支的角度,cijkc_{ijk}cijk是bin的置信度得分。这两组解码器分别预测连接中心和分支。每个FCN解码器是一个卷积层+回归器。
连接点Loss
L=λconfcLconfc+λloccLlocc+λconfbLconfb+λlocbLlocbL=\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×2563×3×2563×3×256卷积层、一个ReLU层和一个回归器组成。
直线检测
该网络为每个像素ppp预测其是否落在线lll上。为了抑制局部边缘、短线和曲线,将像素ppp处的预测值h(p)h(p)h(p)设置为其所属线的长度。给定具有GT线LLL的图像,h(p)h(p)h(p)的目标值定义为:
h(p)={d(l)pis on a line l in L0pis not on any line in Lh(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^(pij)−h(pij)∣∣22L=\sum_{i,j}||\hat{h}(p_{ij})-h(p_{ij})||^2_2 L=i,j∑∣∣h^(pij)−h(pij)∣∣22
以一幅320×320×3320×320×3320×320×3的RGB图像作为输入,通过三个金字塔残差模块(PRM)提取一幅80×80×25680×80×25680×80×256的特征地图。然后,特征图经过五个堆叠的沙漏模块,然后是两个完全卷积和ReLU层(5×5×32和5×5×165×5×32和5×5×165×5×32和5×5×16)和一个5×5×15×5×15×5×1卷积层,以输出320×320×1320×320×1320×320×1像素级的heatmap。
连接点与直线结合
首先应用阈值www将线heatmaphhh转换为二值图MMM。一对检测到的连接点ppp和q∈Pq∈ Pq∈P,如果它们在(或接近于)彼此的分支上,通过线段l=(p,q)l=(p,q)l=(p,q)连接,则将该线段lll添加到LLL。如果在连接点ppp的同一分支上有多个检测到的连接,只保留最短的线段,以避免重叠。
对于连接点ppp的未连接分支,首先查找位于分支射线上的最远线像素qMq_MqM,再找线段(p,qM)(p,q_M)(p,qM)与L中线段的交点q1,q2...qS{q_1,q_2...q_S}q1,q2...qS,计算每个段的线支撑比kkk(线像素数与线段总长度比例),kkk大于0.6则将该段放入LLL,其端点放入PPP。
L-CNN
所解决的问题
结构复杂,存在多个相互独立的阶段(DWP)
L-CNN包含了四个模块:
一个用来进行特征提取的主干网络将一个图片作为输入并为后续的模块提供了共享卷积特征图;
连接点预测模块,输出候选连接点;
线段采样模块,从连接点预测模块输出的连接点预测出线段;
线段校正模块,分类出预测的线段。
主干网络
主干网络选择SHN,首先通过两个步长为2的卷积层进行下采样,然后通过堆叠的沙漏模块进行特征细化。Loss为各模块Loss之和。
连接点预测
一个W×HW\times HW×H的图片首先被划分成Wb×HbW_b\times H_bWb×Hb个区域。对于每个区域,网络预测该区域是否存在一个连接点,如果存在,网络继续预测连接点在该区域的相对位置。在数学上,网络输出一个连接点似然概率特征图JJJ和一个偏移特征图OOO。
J(b)={1∃i∈V:pi∈b0otherwiseJ(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−pi)/Wb∃i∈V:pi∈b0otherwiseO(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回归来预测偏移量特征图OOO。为了预测JJJ和OOO,L-CNN设计了一个包含两个1×11\times 11×1卷积层的网络来将特征图转化为JJJ和OOO。由于偏移量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实现。
线采样模块
线段采样模块的目的是在训练阶段生成一个线段列表Ljj=1M=(p~j1,p~j2)j=1M{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通过设计采样机制来定位这个问题。
静态采样器:对于每张图片,静态线段采样直接从真实标注中提取出Ns+N_s+Ns+个正样本和Ns−N_s-Ns−个负样本。负线段样本的总量相比正线段样本十分巨大。为了缓解这个问题,我们对负线段样本S-进行采样,一组负线段样本的集合可能难以分类,使用以下的启发式算法来计算S-:首先我们将所有的真实线段映射到一个64×6464\times 6464×64的低分辨率二值图上。然后,对于每个可能的由一对儿连接点构成而实际上却不是真实线段的连接,我们定义它的hard分数为该线段的二值图上的平均像素密度。对每张图片,S-被设置为具有最高hard分数的2000个线段。
动态采样器:采样器首先将所有的预测连接点匹配到真实连接点上。mi=argminj∣∣p^i−pi∣∣2m_i=arg min_j||\hat{p}_i-p_i||_2mi=argminj∣∣p^i−pi∣∣2,如果pip_ipi和pmip_{mi}pmi之间的l2距离小于阈值ηηη,我们认为候选连接点pip_ipi完成了匹配。对每个候选线段(p^i1,p^i2)(\hat{p}_{i1},\hat{p}_{i2})(p^i1,p^i2),根据如下准则将它放入D+,D-和D*:
如果pi1p_{i1}pi1和pi2p_{i2}pi2都被匹配了,且(mi1,mi2)∈E(m_{i1}, m_{i2}) ∈ E(mi1,mi2)∈E,我们添加该条线段到正样本集合D+中;
如果pi1p_{i1}pi1和pi2p_{i2}pi2都被匹配了,且(mi1,mi2)∈S−(m_{i1}, m_{i2}) ∈ S-(mi1,mi2)∈S−,我们添加该线段到负向样本集合D-中;
随机样本集合D*包含所有候选连接点预测出的线段,不管匹配结果是什么。
线验证模块
线段验证模块接收到一个候选线段的列表和特征图,并预测每个线段是否正确。在训练阶段,L由线采样模块训练得出,在推理阶段,L是每个预测连接点对的集合。
对每个候选线段,将两个端点的坐标送入LoI池化层,并返回一个固定长度的特征向量。然后,将合并后的特征向量输入到一个由两个全连接层构成的网络并取log值返回。线段的损失函数是sigmoid二元交叉熵损失,loss计算单元是该log值和该线段的真实标签,可以是正样本或负样本。为了保持正负样本之间的损失平衡,修正网络中每张图片的损失是两个互相独立的损失的和,分别是正样本线段和负样本线段的平均。
[AFM](IEEE Xplore Full-Text PDF:)
AFM提出了一种基于区域划分的线段地图吸引场对偶表示方法,并将线段检测问题归结为区域着色问题。后者则通过学习深度卷积神经网络来解决。是一种自上而下的直线检测方法。
所解决的问题
线段heatmap中线/非线不平衡性问题,需要额外的启发式搜索算法(L-CNN)。
区域分割图
根据一个点到线的距离函数,将每个像素分配给一个且仅一个线段来计算。与一条线段相关联的像素形成一个区域。
吸引力场图
在吸引场图中,分区区域中的每个像素由其在像素和线段上的投影点之间的吸引/投影向量表示。
挤压模块
给定一个吸引场图A,首先通过计算晶格中每个像素p的实值投影点来反转它,并进行离散化,然后计算线图。利用了区域生长思想。
HAWP
L-CNN中线采样器阶段计算效率低,AFM并非严格端到端,性能低于L-CNN。
初始化:线段检测和连接点检测。给定输入图像,它首先通过共享特征主干来提取深层特征。主干网络选择SHN。
细化:线段和连接点匹配。在细化过程中,如果线段的两个端点由两个连接点支持,则保留线段。如果连接点未找到任何支持线段,则将其删除。
验证:线段和连接点分类。验证过程是对细化阶段的线段和连接点进行分类(双重检查)。采用L-CNN中的LoI
HAFM
AFM方法中基于位移向量的几何重参数化方案只能提供投影点不在线段外的像素投影向量的完整信息。如果不仅使用p与其投影点之间的位移向量,还包括p与线段两端点之间的两个位移向量,我们可以通过其6-D位移向量重新参数化p,该向量可以完全确定线段。有些像素(例如,任何线段上的点)不应重新参数化,以避免退化,并被视为背景。由于6-D编码训练效果差,作者改用改进的4-D编码方式。
改进的编码方式
平移:将点p用作新的坐标原点。
旋转:然后将线段与垂直yyy轴对齐,端点x1x_1x1在顶部,点ppp(新原点)在左侧。旋转角度用θθθ表示。
缩放:距离ddd作为单位长度,在新坐标系中归一化xxx轴/yyy轴。
在仿射变换后的新坐标系中,设θ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/dmaxd/d_{max}d/dmax,θ2π+12\frac{\theta}{2\pi}+\frac{1}{2}2πθ+21。
线段预测
设A^\hat{A}A^为4-D预测图,Δd\Delta dΔd为距离残差图,总损失为l1l_1l1计算的LLS=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相同使用JJJ,OOO。
线段与连接点匹配
当且仅当其两个端点可以与基于欧几里德距离的两个连接点相匹配且具有预定义阈值τττ时,才保留来自初始集的线段。如果在细化后与任何线段方案不匹配,则将删除连接点。匹配后,将线段和连接点耦合在一起,并使用轻型分类器进一步验证。
线段与连接点验证
采用与L-CNN相同的LoI,此外采用了与L-CNN中静态采样器类似的方法进行了样本扩充,验证阶段采用二值交叉熵损失。
[PPGNet](ppgnet-cvpr19.pdf (aiyoggle.me))
采用图的方法进行线段预测。在第一阶段检测连接点,然后识别所有点之间的连接性。包括四部分
3、线段对齐模块(LSAM),用于提取由一对检测到的连接定义的线段候选的特征张量
4、邻接矩阵推理模块(AMIM),用于检测每个连接对之间的连接
给定一幅图像,网络预测两个连接点的位置及其由邻接矩阵表示的连接度。
主干网络
使用CSAIL网络作为主干网络,对于大小为H×WH×WH×W的输入图像,骨干网络提取大小为H/4×W/4H/4×W/4H/4×W/4的256通道特征图。
连接检测模块
JDM首先通过卷积结构从主干网络提取的特征中回归点heatmap,卷积结构包括两个conv3x3-bn-relu块,然后是一个带有sigmoid激活的conv1x1层。然后确定heatmap中的所有点,其中点响应高于阈值τττ,并且在8个相邻点中最高。然后对检测到的点进行分组,分组内任意两点之间的距离不大于ϵ\epsilonϵ,预测各组中连接响应最高的点为连接点。
线段对齐模块
给定两个连接点和一个特征映射,LSAM沿着连接对定义的线段候选对特征映射进行采样,并从特征映射中提取固定长度的特征向量。
邻接矩阵推理模块
LSAM提取对应于不同连接顺序的线段的两个特征向量,然后将其馈送到三个级联的conv2d-gn-relu块中。然后,使用单个conv2d-sigmoid块以不同的顺序获得连接对的连通性置信度,其中最低的为连接对的最终置信度。
损失函数
(实在是懒得打公式了,直接截图了)
TP-LSD
问题
自上而下的方法没有对端点的明确定义,自下而上的方法受连接点预测的影响,且计算速度低。
方法
提出了三点(TP)表示法,它使用一个根点作为唯一恒等式来定位线段,并且相应的两个端点用其相对于根点的位移来表示。此外,受人类根据直线感知线段的启发,我们通过嵌入特征聚合模块,将直线分割图与TP相关特征融合,利用直线分割图作为结构化先验来指导TP的推理。该检测器由三部分组成:特征提取主干、TP提取分支和线段分支。
U形网络用于生成共享特征,然后将其馈送到两个分支:1、TP提取分支,其中包含根点检测任务和偏移回归任务;2、线条分割分支,生成像素级线图。这两个分支由特征聚合模块(FAM)连接。最后,经过点滤波模块处理后,通过TP Generat将过滤后的TPs转换为矢量化的线段实例。
TP提取分支
根点检测部分:每个像素都被分类以区分它是否是根点。输出激活函数为sigmoid函数。
偏移回归:回归连续域中起点和终点相对于根点的两个位移。
线段分支
不精确的确定端点,为线段检测提供先验知识。输出激活函数是sigmoid函数。
FAM:由tanh(w×P(L+b))tanh(w\times P(L+b))tanh(w×P(L+b))获得直线激活映射AlA_lAl,共享特征首先与AlA_lAl聚合,送入根点检测部分。偏移回归部分类似。
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)α
损失
Ltotal=λrootLroot+λdispLdisp+λlineLlineL_{total}=\lambda_{root}L_{root}+\lambda_{disp}L_{disp}+\lambda_{line}L_{line} Ltotal=λrootLroot+λdispLdisp+λlineLline
根点置信度图由GT在零值图上标记根点位置,进行二维高斯平滑并使用5×55\times 55×5窗口截断。对于偏移图,计算根点附近5×55\times55×5窗口到端点的距离,赋予这些像素。
LMS评估指标
LMS=Scoreθ×ScorelLMS=Score_{\theta}\times Score_{l} LMS=Scoreθ×Scorel
M-LSD
改进
使用轻量化的Mobile-V2网络,直接从特征图生成线段。
匹配损失
TP损失
LTP=Lcenter+Ldisp+LmatchL_{TP}=L_{center}+L_{disp}+L_{match} LTP=Lcenter+Ldisp+Lmatch
SoL损失同理
几何损失
从中心点和位移向量导出的端点应为连接点。学习连接点和线段的分割图可以作为LSD的空间注意线索。总分段损失定义为Lseg=Ljunc+LlineL_{seg}=L_{junc}+L_{line}Lseg=Ljunc+Lline
由于偏移向量可以从线段的长度和度数中导出,因此它们可以作为额外的几何线索。我们根据GT计算长度和度数,并在每个GT图的线段中心标记该值。接下来,将这些值外推到3×33×33×3窗口,以便给定像素的所有相邻像素包含相同的值。总回归损失可表示为Lreg=Llenth+LdegreeL_{reg}=L_{lenth}+L_{degree}Lreg=Llenth+Ldegree
几何损失函数定义为分段损失和回归损失之和:
LGeo=Lseg+LregL_{Geo}=L_{seg}+L_{reg} LGeo=Lseg+Lreg
总损失函数如下:
Ltotal=LTP+LSoL+LGeoL_{total}=L_{TP}+L_{SoL}+L_{Geo} Ltotal=LTP+LSoL+LGeo
[LETR](2101.01909.pdf (arxiv.org))
算法流程
1、图像特征提取:给定图片首先基于 ResNet 提取图片特征x∈RH×W×Cx\in R^{H\times W\times C}x∈RH×W×C
2、图像特征编码:将特征x∈RH×W×Cx\in R^{H\times W\times C}x∈RH×W×C拉平编码x′∈RHW×Cx'\in R^{HW\times C}x′∈RHW×C,使用标准Transformer框架的多头自注意力模块和前馈网络。
3、Transformer解码器:NNN个可学习的线实体通过SA,CA,与编码器输出交互。
4、线段预测:线实体使用Transformer解码器顶部的两个预测头进行线段预测。
创新
设计了多尺度的编解码器
设计了直线检测Loss
粗编码
在粗解码阶段,我们将图像特征和线实体传递到编码器-解码器-转换器架构中。编码器从ResNet的Conv5(C5)输出中接收原始分辨率为132\frac{1}{32}321的粗略特征。
细编码
细解码器从粗解码器继承线实体,从细编码器继承高分辨率特征。编码器的输入来自ResNet的Conv4(C4)输出,原始分辨率为116\frac{1}{16}161。
线段损失
分类损失
距离损失
总损失
直线检测论文(霍夫变换,LSD,DWP,L-CNN,AFM,HAWP,PPGNet,TP-LSD,M-LSD,LETR)相关推荐
- 形状识别之直线检测(LSD)
转自一篇基于直线检测的形状识别方法,不同于霍夫直线检测. 原文网址:https://blog.csdn.net/liujiabin076/article/details/74917605 LSD官网( ...
- LSD快速直线检测的原理概要及OpenCV代码实现(CV类LineSegmentDetector)
图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 LSD快速直线检测算法是由Rafael Grom ...
- 【车道线检测与寻迹】LSD、LBD快速直线检测
python应用LSD opencv 这个LSD https://github.com/primetang/pylsd是封装好的,不知道哪儿改参数,原始的LSD检测前会将图片缩小至80%,当图片很小是 ...
- 【车道线检测】霍夫变换(HoughLines)检测直线详解
总结 霍夫变换是一种思想,用来检测任意能够用数学公式表达的形状,即使这个形状被破坏或者有点扭曲. 霍夫变换的原理是将特定图形上的点变换到一组参数空间上,根据参数空间点的累计结果找到一个极大值对应的解, ...
- LSD直线检测和霍夫线变换的学习建议
最近笔者学习霍夫线变换和LSD直线检测算法,有一些学习建议,希望可以给予大家一些帮助. 学习霍夫变换的感想 每个人理解的霍夫变换或许略有差异,但是最主要的是笛卡尔坐标系跟极坐标系的相互转换. 霍夫变 ...
- 直线检测算法博文中缺失的几个源码(Hough_line、LSD、FLD、EDlines、LSWMS、CannyLines、MCMLSD、LSM)
直线检测在我们的图像处理算法中是非常重要的. 博文https://blog.csdn.net/WZZ18191171661/article/details/101116949 对常用的直线检测算法进行 ...
- LSD:一种直线检测算法
申明:本文为转载,原文地址为:http://blog.csdn.net/carson2005/article/details/9326847点击打开链接 LSD是一种直线检测分割算法,它能在线性的时间 ...
- OpenCV 霍夫变换直线检测(SHT、MSHT和PPHT)
一.霍夫变换简述 霍夫变换(Hough Transform)是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进算法.主要用来从图像中分离出具有某种相同特征的几何形状(如,直线 ...
- lsd程序matlab,LSD直线检测(opencv+matlab)
[实例简介] LSD直线检测算法是检测结果比霍夫变换更好的算法,本工具箱支持opencv和matlab,使用起来非常简单方便 [实例截图] [核心代码] LSD-OpenCV-MATLAB └── L ...
最新文章
- 【Plant Cell】突破!加入一种酵母,可显著提高水稻氮利用率及产量!
- kvm之三:本地安装虚拟机
- Mysql 5.5的编译安装 在ubuntu 10平台上面
- ubuntu 设置静态路由_Linux系统添加永久静态路由的方法
- iPhone开发教程 UI基础课程(58课时)
- WebGIS开发快速入门
- 正则表达式Regex
- javascript基础知识之三座大山
- [附源码]JAVA+ssm计算机毕业设计城市公交系统(程序+Lw)
- 安焦删除贴 牛人纷纷出现(2)
- PC端下载文件到本地
- 1553B总线基础知识及扩展
- 艾克---BBB时间设置
- VB编程:DoWhile...Loop当循环计算0~100累加和-15_彭世瑜_新浪博客
- 全球及中国植物甾醇羟基硬脂酸酯行业发展应用与投资潜力分析报告2022版
- 转 ROS:解决Error:cannot launch node of type [map_server/map_server]: can't locate node [map_server]
- 工作中常用的学习总结套路
- 网站负载均衡与容灾备份方案
- python 毕设 毕业设计 题目 课题 选题推荐
- labview通过编程自定义控件运行时快捷菜单