向AI转型的程序员都关注了这个号 👇👇👇
直线检测是经典的底层视觉任务,对一些视觉任务,如自动驾驶、场景3D建模、无人机地平线检测等不可或缺。我们熟知的霍夫变换,就是解决直线检测问题的经典算法。然而,传统算法缺乏鲁棒性,只能受限于简单的应用场景。如今在充分的标注数据支持下,基于神经网络的直线检测算法对检测精度和鲁棒性有了很大提升。在数据驱动下,通过神经网络解决底层视觉任务,效果一般会更好。
传统算法 经典的霍夫变换算法,其一般流程是:提取图像边缘,并将边缘点坐标变换到霍夫空间。霍夫空间中每个点都代表一条直线,图像中同一直线上的点在霍夫空间会产生交点。在单位面积的霍夫空间中进行包含的像素点数统计,倘若高于设定阈值的,则认为包含一条直线。霍夫直线检测结果受阈值、霍夫空间分辨率等的影响,同时只能检测边缘直线,无法检测多个像素宽度的"粗直线"。但霍夫变换应用广泛,还可以应用于圆、椭圆等几何形状的检测。
LSD(line segment detection)也是传统的直线检测方法。它是一种“感知聚类”方法,依赖于精心设计的图像特征和检测策略,其精度、算法复杂度等都要好于霍夫直线检测。其主要思想是基于梯度构建每个像素点的特征,来表征这一点可能处于什么方向的直线上。随后对这些特征依据邻近程度、方向相似度等进行聚类,得到可能的直线区域。最后对这些区域进行筛选、后处理等,得到最终的直线检测结果。整个检测过程很复杂,为了得到较好的检测结果,需要精心调节多个算法参数。
LSD算法 上述算法均集成在了opencv中,除此以外opencv还包含了一些其他的传统直线检测算法,具体可以参考这篇博文:opencv直线检测算法汇总
直线检测算法汇总
深度学习算法 神经网络离不开数据支持,直线检测网络的发展离不开wireframe数据集【CVPR 2018】的公布。该数据集包含了多种场景下的5000多张包含线段标注的图像。
wireframe数据集 有了数据集的支持,近些年有不少直线检测顶会论文发表。
Wireframe 【CVPR 18】 wireframe是随数据集提出的直线检测网络。其思路是,一路检测直线的两个端点(junction),一路对直线像素做分割。其中,junction路需要去回归端点的位置(junction center decoders)和端点对应的直线方向、置信度信息(junction branch decoders),而line路则是要判断每个点是否是直线像素。
wireframe架构 对于端点,需要注意其所对应的直线不一定只有一条,(如矩形顶点都对应两条边)。对此,wireframe首先将可能的方向分为K份,每份360/K度,作为一个bin。文章假设在端点每个bin的方向上,只包含一条线段。因此,网络需要预测端点在K个方向上有直线的概率,同时对直线的精确角度进行回归(精确角度为相对bin起点的角度偏移量)。
另一方面,对于直线像素的分割,wireframe采用级联沙漏网络(Stacked Hourglass Networks)作为backbone。级联沙漏网络最初应用于人体姿态检测任务,其名称由来是在网络架构上,不断地将bottom-up,top-down的沙漏型结构子网络级联,从而不断地整合全局和局部信息,有利于对人体关节、四肢、人体位置等各个尺度上的信息进行整合。直线检测任务与人体姿态检测任务在全局、局部信息的利用上是类似的,从直线跨度上看是宏观的,但从直线像素本身的定位来看则是微观的,因此也需要不断整合各个尺度上的信息。
wireframe网络并非端到端的网络,其需要后处理来将分割结果和端点检测结果进行融合,才能得到最终检测结果。之后提到的几篇文章都是端到端的检测网络。
LCNN 【ICCV 19】 LCNN(Line-CNN)是双阶段的检测网络,它可以看成是RCNN从二维到一维上的迁移。(名字和网络架构都可体现)
LCNN网络架构 LCNN首先进行特征提取,采用的backbone也是级联沙漏网络。随后,得到的特征图送入junction header,来预测可能的端点位置。在推理时,对预测的所有端点,两两生成一个line proposal(类比RCNN region proposal),随后通过proposal的两个端点位置,去特征图上采样得到该proposal对应的特征向量(line feature),采样的过程为LoI Pooling(类比RCNN RoI pooling)。最终,将line feature送入全连接层,得到该proposal的分数,从而判定是否为一条直线。
值得注意的是,由于边的数目是远小于所有端点的两两组合数的,因此proposal中会生产大量的负样本,造成正负样本数的严重不平衡,会影响后续网络的训练。因而在训练时,Line Sampler并非生成所有的proposal,而是分别从正负样本中采样数目相等的proposal进行训练。同时,Line Sampler还会保证一些难样本(如一些与正样本有重合部分的负样本)的数目,来增加鲁棒性。
TP-LSD【 ECCV 20】 TP-LSD 是单阶段的直线检测网络。TP表示“Tri-points”,表示其对直线的三点式建模方式,这也是它能做到single stage的原因。
不同的直线建模方式 将直线表示成中点及到两端点的方向和距离,就可以同时去回归中点位置、直线方向、中点到两侧的距离。如此一来,就可以避免预测端点,再对端点两两组合预测分数的过程。
TP-LSD网络架构 从其网络架构看出,它也是先利用通用的特征提取器提取多尺度特征,随后通过不同的解码层,分别进行直线像素语义分割、中点检测,中点到两端点的位移向量预测。直线语义分割作为辅助信息,帮助中点定位,位移向量求解以及最终的融合。一般来说,在detection任务中做segmentation分支,都能提升检测效果。
机器学习算法AI大数据技术
搜索公众号添加: datanlp
长按图片,识别二维码
阅读过本文的人还看了以下文章:
TensorFlow 2.0深度学习案例实战
基于40万表格数据集TableBank,用MaskRCNN做表格检测
《基于深度学习的自然语言处理》中/英PDF
Deep Learning 中文版初版-周志华团队
【全套视频课】最全的目标检测算法系列讲解,通俗易懂!
《美团机器学习实践》_美团算法团队.pdf
《深度学习入门:基于Python的理论与实现》高清中文PDF+源码
《深度学习:基于Keras的Python实践》PDF和代码
特征提取与图像处理(第二版).pdf
python就业班学习视频,从入门到实战项目
2019最新《PyTorch自然语言处理》英、中文版PDF+源码
《21个项目玩转深度学习:基于TensorFlow的实践详解》完整版PDF+附书代码
《深度学习之pytorch》pdf+附书源码
PyTorch深度学习快速实战入门《pytorch-handbook》
【下载】豆瓣评分8.1,《机器学习实战:基于Scikit-Learn和TensorFlow》
《Python数据分析与挖掘实战》PDF+完整源码
汽车行业完整知识图谱项目实战视频(全23课)
李沐大神开源《动手学深度学习》,加州伯克利深度学习(2019春)教材
笔记、代码清晰易懂!李航《统计学习方法》最新资源全套!
《神经网络与深度学习》最新2018版中英PDF+源码
将机器学习模型部署为REST API
FashionAI服装属性标签图像识别Top1-5方案分享
重要开源!CNN-RNN-CTC 实现手写汉字识别
yolo3 检测出图像中的不规则汉字
同样是机器学习算法工程师,你的面试为什么过不了?
前海征信大数据算法:风险概率预测
【Keras】完整实现‘交通标志’分类、‘票据’分类两个项目,让你掌握深度学习图像分类
VGG16迁移学习,实现医学图像识别分类工程项目
特征工程(一)
特征工程(二) :文本数据的展开、过滤和分块
特征工程(三):特征缩放,从词袋到 TF-IDF
特征工程(四): 类别特征
特征工程(五): PCA 降维
特征工程(六): 非线性特征提取和模型堆叠
特征工程(七):图像特征提取和深度学习
如何利用全新的决策树集成级联结构gcForest做特征工程并打分?
Machine Learning Yearning 中文翻译稿
蚂蚁金服2018秋招-算法工程师(共四面)通过
全球AI挑战-场景分类的比赛源码(多模型融合)
斯坦福CS230官方指南:CNN、RNN及使用技巧速查(打印收藏)
python+flask搭建CNN在线识别手写中文网站
中科院Kaggle全球文本匹配竞赛华人第1名团队-深度学习与特征工程
不断更新资源
深度学习、机器学习、数据分析、python
搜索公众号添加: datayx