目录
用于车道检测的关键点估计和点实例分割方法
摘要
一、介绍
二、相关工作
三、方法
个人总结
论文地址
代码复现
参考链接
SGPN
自动驾驶的感知技术应该适应各种环境。在交通线检测作为一个重要的感知模块的情况下,需要考虑许多条件,如道路线的数量和目标系统的计算能力。为了解决这些问题,本文提出了一种道路线检测方法,称为点实例网络(PINet);该方法基于关键点估计和实例分割方法。PINet包括几个同时训练的堆叠沙漏网络。因此,可以根据目标环境的计算能力来选择训练模型的大小。我们将预测关键点的聚类问题作为实例分割问题;可以对PINet进行训练,而与业务线的数量无关。PINet在 TuSimple 和 Culane 数据集(用于车道检测的流行公共数据集)上实现了具有竞争力的准确性和假阳性。
我们的代码可在GitHub - koyeongmin/PINet_new
真正的自动驾驶需要了解车辆周围的环境。为了实现这一理解,各种感知模块被融合在一起,许多模式识别和计算机视觉技术被应用于这些感知模块[1],[2]。车道检测是一种主要的感知技术,它可以定位道路上的可行驶区域。有很多方法可以识别车道,但大多数技术都使用交通线检测[3]、[4]或道路区域分割[5]、[6]。在本文中,我们主要研究用于识别车道的交通线检测。图1显示了我们提出的方法的目的,该方法从输入RGB图像中预测车道的精确关键点,并使用所提出的网络提取的嵌入特征,将关键点区分为各个实例。此外,所提出的网络是端到端训练的,并且可以根据目标系统的计算能力来修改网络大小,而无需改变网络架构或进行额外的训练。
图1. 系统概述。所提出的框架预测道路线上的关键点,并区分各个实例,而不考虑道路线的数量。此外,如果用户想在计算能力较弱的系统(如嵌入式板)上运行经过训练的模型,则可以在没有额外训练的情况下对网络进行裁剪和传输。
大多数传统的交通线检测方法使用各种手工特征(如颜色[7]、[8]或边缘[9]、[10])来提取低级交通线特征。这些低级特征可以使用霍夫变换[11]、[12]或卡尔曼滤波器[13]进行组合;组合的特征生成交通线段信息。这些方法很简单,可以适应各种环境,而无需进行重大修改。尽管如此,这些方法的性能取决于测试环境的条件,如照明和遮挡。
深度学习方法在复杂场景中表现出卓越的性能。在深度学习方法中,卷积神经网络(CNN)方法主要应用于计算机视觉中的特征提取[14],[15]。语义分割方法[16],[17],[18]是计算机视觉的主要研究领域,经常应用于交通线检测问题,以推断形状和位置[19],[20],[21],[22]。一些方法使用多类方法来区分各个道路线实例。因此,尽管这些方法可以获得出色的性能,但它们只能应用于由固定数量的道路线组成的场景。为了解决这个问题,应用实例分割方法来区分单个实例。这些基于语义分割的交通线检测方法需要一些后处理来估计预测交通线的确切位置值。为了避免语义分割方法的这种后处理,其他几种方法直接预测交通线位置[23],[24]。
现有的方法有一定的局限性。语义分割方法需要在像素级进行标记或预处理以进行训练,这很麻烦。这些方法还预测了许多不必要的点,因为即使只需要几个点来识别交通线,尾数分割也会生成大小与给定输入图像相同的分类像素图像。此外,根据可用的计算能力,现有的方法不能适应各种环境。为了将它们应用于嵌入式板等照明系统,整个架构应该重新进行修改和训练。
为了克服这些限制,我们提出的方法使用了一个受堆叠沙漏网络启发的深度学习模型来预测交通线上的几个关键点。堆叠沙漏网络[25]通常应用于关键点估计领域,如姿态估计[26]和物体检测[27],[28]。利用下采样和上采样的顺序,堆叠沙漏网络可以提取各种尺度的信息。由于堆叠沙漏网络包括由相同损失函数训练的几个沙漏模块,因此我们可以通过从整个结构中剪裁一些间隔来同时获得具有不同参数大小的各种模型。使用受点云实例分割启发的简单方法,将每个关键点区分为单个实例[29]。
基于摄像头的交通线检测已经得到了积极的发展,许多最先进的方法[30]、[24]对于公共数据集几乎完全有效。然而,有些方法的假阳性率更高。假阴性,模块未能检测到的道路线,不会突然改变控制值,并且可以根据其他检测到的通信线路或先前的结果预测正确的控制值。然而,假阳性可能会导致严重的风险;模块对道路线的错误识别可能导致控制值的快速变化。然而,假阳性可能会导致严重的风险;模块对道路线的错误识别可能导致控制值的快速变化。
图2. 提议的框架包括三个主要部分。512×256大小的输入数据通过大小调整网络进行压缩;压缩的输入被馈送到预测网络,该预测网络包括四个沙漏模块。在每个沙漏块的末端应用三个输出分支;它们预测置信度、偏移和嵌入特征。损失函数可以根据每个沙漏块的输出进行计算。通过剪裁几个沙漏模块,可以调整所需的计算资源。
总之,图2显示了我们提出的道路线检测框架。它有三个输出分支,并预测交通线上点的确切位置和实例特征。第三节介绍了更多细节。这些是本研究的主要贡献:
1、利用关键点估计方法,我们提出了一种新的道路线检测方法。与其他基于语义分割的方法相比,它产生了更紧凑的大小预测输出。
2、该框架由几个沙漏模块组成,因此我们可以通过简单的剪裁获得不同大小的各种模型,因为每个沙漏模块都是使用相同的损失函数同时训练的。
3、所提出的方法可应用于各种场景,包括任何方向的交通线,如垂直或水平交通线,以及任意数量的交通线。
4、所提出的方法具有较低的误报率和值得注意的准确性性能。它保证了自动驾驶汽车的稳定性。
A. 道路线检测
车道线检测是自动驾驶的一个重要研究领域。车道线检测模块根据输入数据识别道路上的可行驶区域。道路线检测被认为是车道线检测的主要方法。道路线检测通常定位区分道路上可行驶区域的标线。特别是关于RGB图像作为输入数据,已经提出了各种手工制作的特征来检测道路线[31]、[32]、[33]、[34]、[35]。然而,这些方法在复杂的场景中显示出局限性。
近年来,深度学习已成为计算机视觉研究的主流方法。语义分割[16],[17],[18],[36]是感知研究中的一个主要课题;它可以将输入图像的像素分类为单独的类。生成方法[37]、[38]也可以执行类似的功能。因此,语义分割方法和生成方法适用于表示复杂形状的线条。[20] ,[30],[39]和[40]显示了语义分割和生成模型在道路线检测中的应用。有些方法使用多类方法来区分每个实例;然而,多类方法只能对固定数量的实例进行分类。针对这一限制,提出了实例分割方法。Neven等人[41]试图通过实例分割来解决多类方法的这个问题。他们提出的LaneNet有一个共享编码器和两个解码器。这些解码器中的一个执行二进制车道分割;另一个预测嵌入特征,例如分割。
尽管语义分割方法可以预测形状复杂的线条,但在训练和测试过程中,它们需要像素级标记数据和后处理来提取线条上的精确点。一些直接方法[23],[24]直接生成直线上的精确点。[23] 预测每条交通线的确切起点和终点,以及固定y轴值的x轴值。[24]介绍了受Faster R CNN[42]的地区提案网络(RPN)启发的线路提案单元(LPU)。LPU预测沿某些预定义线路方案的固定y轴值的水平偏移。
这些方法,语义分割方法、生成方法和直接方法,产生了许多不必要的输出值。在语义分割和生成方法中,并不是所有的像素都需要识别交通线;可以根据几个关键点来预测精确的直线。直接方法也有一些不必要的预测,比如未知的给定目标交通线的长度、起点和终点。
B. 关键点估算
关键点估计技术根据输入信息预测称为关键点的某些重要点。人体姿态估计[26]是关键点估计领域的一个主要研究课题。堆叠沙漏网络[25]由几个同时训练的沙漏模块组成。沙漏模块可以将各种尺度的信息传递到更深的层次,帮助整个网络获得全局和局部特征。由于这种特性,沙漏网络经常用于检测对象检测区域中对象的中心或角。针对关键点估计,不仅开发了网络结构或损失函数,还开发了适用于现有网络的细化方法。[43]提出了一种可以应用于其他多阶段方法的特征聚合和从粗到细的监督方法。[44]提出了改进其他现有模型结果的细化网络。在本文中,这些细化方法并没有用于指示我们提出的框架的性能;然而,它们可以用于提高性能。
对于车道检测,我们训练一个由几个沙漏模块组成的神经网络。该网络,我们将其称为点实例网络(PINet),在车道上生成点,并将预测点区分为单个实例。为了实现这些任务,我们提出的神经网络包括三个输出分支,一个置信分支、偏移分支和嵌入分支。置信度和偏移分支预测道路线的精确点;应用了YOLO[45]启发的损失函数。嵌入分支生成每个预测点的嵌入特征;嵌入特征被馈送到聚类过程以区分每个实例。嵌入分支的损失函数受到实例分割方法的启发。相似性组建议网络(SPGN)[29]是一种用于3D点云的实例分割框架,它引入了一种简单的技术和用于实例分割的损失函数。基于SPGN提出的内容,我们设计了一个损失函数拟合来区分预测交通线路的每个实例。第II-A节介绍了主要建筑的细节;第II-B节包括关于损失函数的细节;并且第II-C节详细地示出了实现。
A. 架构
图2显示了所提出的网络框架。输入RGB图像大小为512×256;它被馈送到调整大小的网络。该图像被调整大小网络中的卷积层序列压缩到较小的大小(64×32);将调整大小网络的输出馈送到预测网络。预测网络中可以包括任意数量的沙漏模块;本研究使用了四个沙漏模块。所有沙漏模块都由相同的损失函数同时训练。在训练步骤之后,用户可以根据计算能力选择使用多少沙漏模块,而无需任何额外的训练。以下各节提供了有关每个网络的详细信息。
1) 调整网络大小
调整网络大小可以减少输入图像的大小,以节省内存和推理时间。首先,输入的RGB图像大小为512×256。该网络由三个卷积层组成。所有卷积层应用的滤波器大小为3×3,步长为2,填充大小为1。在每个卷积层之后使用Prelu[46]和批量归一化[47]。最后,该网络生成大小为64×32的调整大小的输出。表I显示了组成层的细节。
图3. 沙漏块的细节由三种类型的瓶颈层组成:相同的瓶颈、向下的瓶颈和向上的瓶颈。输出分支应用于沙漏层的末端;置信度输出被转发到下一个块。
2) 预测网络
调整大小的网络输出被馈送到预测部分,这将在本节中描述。该部分预测了交通线上的精确点和嵌入特征,例如分割。该网络由几个沙漏模块组成,每个模块包括一个编码器、解码器和三个输出分支,如图3所示。一些跳跃连接将各种尺度的信息传输到更深的层。图3中的每个彩色块都是一个瓶颈模块;这些瓶颈模块如图4所示。瓶颈有三种:相同的、向下的和向上的。同一个瓶颈会生成与输入大小相同的输出。下瓶颈用于编码器中的下采样;下瓶颈的第一层由具有滤波器尺寸3、步长2和衬垫1的卷积层代替。具有滤波器大小3、步长2和填充1的转置卷积层被应用于上采样层中的上瓶颈。每个输出分支有三个卷积层,并生成一个64×32的网格。输出分支预测输出网格中每个单元的关键点存在、偏移和嵌入特征的置信度值。表二显示了预测网络的详细信息。因为更深的网络具有更好的性能[25],它可以充当教师网络。因此,使用知识提取技术,我们可以期待剪辑短网络具有更好的性能。每个输出分支的通道是不同的(置信度:1,偏移量:2,嵌入:4),并且根据各个输出分支的目标应用相应的损失函数。
图4. 瓶颈细节。这三种瓶颈根据其用途有不同的第一层
B. 损失函数
对于训练,将四个损失函数应用于沙漏网络的每个输出分支。以下各节提供了每个损失函数的详细信息。如表II所示,输出分支生成64个网格,输出网格中的每个单元由7个通道的预测值组成,包括置信度值(1个通道)、偏移量(2个通道)值和嵌入特征(4个通道)。置信度值决定交通线路的关键点是否存在;偏移值定位了置信值预测的关键点的准确位置,并利用嵌入特征将关键点区分为单个实例。因此,除了蒸馏损失函数外,三个损失函数被应用于输出网格的每个单元。提取教师网络知识的蒸馏损失函数适用于每个编码器的蒸馏层,如表II所示。以下各节包括每个预测值和特征的详细信息。
1) 置信度损失
置信度输出分支预测每个单元格的置信度值。如果单元格中存在关键点,则置信度值接近1,否则为0。置信度分支的输出有1个通道,它被馈送到下一个沙漏模块。置信度损失由存在损失和不存在损失两部分组成。存在损失适用于包括关键点的单元;利用不存在损失来降低每个背景小区的置信度值。不存在损失是在预测置信值高于0.01的单元处计算的。由于远离关键点的细胞快速收敛,这项技术有助于训练集中在更靠近关键点的单元上。以下显示了置信度分支的损失函数:
其中,Ne表示包括关键点的单元的数量,Nn表示不包括任何关键点的细胞的数量,Ge表示由关键点组成的细胞的集合,Gn表示由点组成的单元的集合,cc表示置信度输出分支中每个细胞的预测值,c*c表示基本真值。具有关键点的小区的地面真值为1;否则为0。在推断时,如果置信度值大于预定义的阈值,我们认为关键点存在于单元处。不存在的第二项是正则化项。
2) 偏移损失
从偏移分支,PINet预测每个输出单元格的关键点的确切位置。每个单元格的输出具有一个介于0和1之间的值;该值指示与对应单元格相关的位置。在本文中,一个单元被匹配到输入图像的8个像素。例如,如果预测的偏移值为0.5,则关键点的实际位置距离单元边缘4个像素。偏移分支有两个通道用于预测x轴和y轴偏移。方程2显示了损失函数:
因为在不包括关键点的单元格中不存在基本事实,所以在计算偏移损失时会忽略这些单元格。
3) 嵌入特征损失
该分支的损失函数受到SGPN的启发,SGPN是一种3D点云实例分割方法[29]。如果在这种情况下嵌入特征相同,则训练分支以使每个单元的嵌入特征更接近。方程3和4示出了特征分支的损失函数:
其中Fi表示小区i的预测嵌入特征,Iij表示小区i和小区j是否是相同实例,并且K是常数,使得K>0。如果Iij=1,则这些单元是相同的实例,如果Iij=0,则这些单元格是不同的实例。当网络被训练时,当每个小区属于同一实例时,损失函数使特征更接近;当细胞属于不同的实例时,它会分布特征。我们可以使用简单的基于距离的聚类技术将关键点区分为单个实例。在本研究中,如果某些预测关键点的嵌入特征在一定距离内,我们认为它们是相同的实例。在本研究中,特征大小设置为4,但观察到该大小对性能没有重大影响。
4) 蒸馏损失
根据Newell等人[25],当堆叠更多沙漏模块时,可以观察到更好的性能。因此,最深的沙漏模块可以是教师网络,并且我们期望,如果应用知识提取方法,那么比教师网络更轻的裁剪短网络将显示出更好的性能。Zagoruyko和Komodakis[48]提出了一种简单的知识提取方法,可以应用于CNN模型。这种方法允许学生网络模仿教师网络;侯等人[30]表明,该方法可以提高整个框架的性能。方程式5。显示了蒸馏的损失函数:
其中,D表示平方和,Am表示第m个沙漏模块处的失真层输出,如表II所示,m表示沙漏模块的数量,Ami表示Am的第i个通道,并且所有运算符如和、幂和绝对值(|·|)都是元素式的。
总损失Ltotal等于上述四个损失项的加权和,并且使用具有以下总损失的端到端过程来训练整个网络:
在训练步骤中,我们将γo设置为0.2,将γf设置为0.5,将γd设置为0.1。γe和γn在第四节中进行了描述。所提出的损失函数适用于每个沙漏模块的输出分支;这有助于稳定地训练整个网络。
C. 实施细节
在训练和测试中将数据馈送到所提出的网络之前,所有输入图像的大小都被调整为512×256,并且没有从0~255的RGB值到0~1的值进行归一化。用于评估所提出方法的两个公共数据集TuSimple[49]和CULane[20]根据固定的y轴值提供了交通线的x轴值。由于注释方法的原因,一些靠近水平线的交通线路注释稀疏。为了解决这个问题,我们通过对原始数据的线性回归,对x轴的每10个像素进行额外的注释。还应用了各种数据增强方法,如阴影、添加噪声、翻转、平移、旋转和强度变化;这些方法如图5所示。
图5. 数据扩充方法。(a) 是原始图像,(b)、(c)、(d)、(e)、(f)和(g)显示了应用的数据增强方法的示例
此外,这两个公共数据集包括大量的图像帧;然而,数据是不平衡的。例如,CULane数据集的测试集由各种类别组成,如正常、夜间和十字路口;类别框的数量变化很大。CULane类别的确切比率可在第IV-B节结果部分找到。为了解决这个问题,我们对在训练步骤中显示较差损失值的硬数据进行采样,并提高硬数据的选择率。这个概念类似于硬负性挖掘技术。
我们使用一个GPU(GTX 2080ti 11GB)进行训练和测试;源代码是用 Pytorch 编写的。在训练步骤中,每个批次包含六个图像;阈值和系数等超参数是通过实验确定的。超参数的精确值如下所示。PINet预测交通线上关键点的准确位置,并采用样条曲线拟合方法获得更光滑的曲线。
PINET: Key Points Estimation and Point Instance Segmentation Approach for Lane Detection
这篇论文没有什么让人眼前一亮的创新点,但是论文整体读起来挺简单的,结构也严谨,思路很清晰,没有什么模糊不清的技术点,图像输入,网络结构,损失函数,数据增强都进行了描述
本文对车道线进行实例分割,但只是进行了实例分割,并没有区分车道线的类别
论文整体看图一,整体网络结构看图二,详细的调整大小网络结构看表一,沙漏块的网络结构看图三,数据增强看图五
输入图像尺寸是512×256,首先进入调整大小的网络,出来之后是64×32;在64×32特征图上做语义分割,backbone使用若干个沙漏网络,最多是4个,具体用多少个,需要看情况,在每一个沙漏网络出来都出损失;backbone之后出三个头,分别对应置信度,偏置和嵌入式特征,其中嵌入式特征是参考SGPN给出的,这个位置个人没有深入地调研;网络结构太大了,因此本文做了蒸馏。总共有四个损失函数,置信度损失,偏置损失、嵌入式特征损失、蒸馏损失。
后处理的位置论文中没有提到,有一个博客里说是论文讲了后处理相关的东西,但是个人没有看到
不清晰
后处理的位置个人没理解清晰,出来三个头之后是如何出车道线的
https://arxiv.org/abs/2002.06604
GitHub - koyeongmin/PINet_new
说实话没啥玩应,看不看都行
车道线检测-PINet - 知乎
Lane Detection (六) PINet - 知乎
https://arxiv.org/pdf/1711.08588.pdf