参考代码:RCLane

1. 概述

介绍:在这篇文章中介绍了一种新的车道线描述范式(基于点的车道线建模),也就是通过关键点(文章对应称之为relay points)和关键点之间的关系场构建推理出车道线。具体为文章通过segformer实现车道线二值分割得到分割结果SSS,并同时通过不同的head预测TTT(transfer map,用于确定临近点位置)和DDD(distance map,用于确定终止点),之后在SSS上做point-nms实现车道线上点的确立,以这些点为起点结合DDD和TTT推理出整条车道线。按照这样的思想该算法具有较强的车道线结构适应能力,如分离汇入、弯道场景也能很好建模,目前就公开数据集性能已经超过之前的condlanenet了,还是值得期待完整开源的。

2. 方法设计

2.1 整体pipeline

文章的整体结构见下图所示:

这篇文章是以segformer作为benchmark,并在其基础上添加两个head,分别实现DDD(distance map)和TTT(transfer map)预测工作,也就是对应图中左边半边部分。需要注意的是TTT和DDD预测的都是双向的,这样可以从任意的一个点上进行推理得到整条线。对于推理的起点这里是通过对车道线二值分割结果进行point-nms选择实现的,最后对所有推理出来的线进做IoU-NMS操作得到最终输出结果。因而这篇文章的算法后处理是相对较重的。

2.2 distance map和transfer map的表示

对于这两个map的描述可见下图中的(a)图:

其中Tˉf(pi),Tˉb(pi)\bar{T}_f(p_i),\bar{T}_b(p_i)Tˉf​(pi​),Tˉb​(pi​)表示的是当前点pip_ipi​(车道线二值mask上的每一个点)到相邻两个点的affine filed(也就是分别对应的forward和backward方向),Dˉf(pi),Dˉb(pi)\bar{D}_f(p_i),\bar{D}_b(p_i)Dˉf​(pi​),Dˉb​(pi​)表示的是当前点pip_ipi​分别到端点的距离。

distance map:
该图描述的是车道线上点到两个端点的距离关系,这里依据车道线点的y坐标划分forward还是backward,具体为最小y坐标值(对应坐标点pendf=(xendf,yendf)p_{end}^f=(x_{end}^f,y_{end}^f)pendf​=(xendf​,yendf​))和最大y坐标值(对应坐标点pendb=(xendb,yendb)p_{end}^b=(x_{end}^b,y_{end}^b)pendb​=(xendb​,yendb​))。那么当前点pip_ipi​对应的distance map标注可以描述为:
Dˉf(pi)=(xi−xendf)2+(yi−yendf)2\bar{D}_f(p_i)=\sqrt{(x_i-x_{end}^f)^2+(y_i-y_{end}^f)^2}Dˉf​(pi​)=(xi​−xendf​)2+(yi​−yendf​)2​
Dˉb(pi)=(xi−xendb)2+(yi−yendb)2\bar{D}_b(p_i)=\sqrt{(x_i-x_{end}^b)^2+(y_i-y_{end}^b)^2}Dˉb​(pi​)=(xi​−xendb​)2+(yi​−yendb​)2​

transfer map:
该图描述的是车道线上点到相邻两个点的关系,这里通过构建当前点和相邻两个点(pib=(xib,yib)p_i^b=(x_i^b,y_i^b)pib​=(xib​,yib​)和pib=(xib,yib)p_i^b=(x_i^b,y_i^b)pib​=(xib​,yib​))的向量场进行描述,需要注意的是这里采样的相邻点是按照距离ddd进行采样得到的,则向量场的描述为:
Tˉf(pi)=(xif−xi,yif−yi)\bar{T}_f(p_i)=(x_i^f-x_i,y_i^f-y_i)Tˉf​(pi​)=(xif​−xi​,yif​−yi​)
Tˉb(pi)=(xib−xi,yib−yi)\bar{T}_b(p_i)=(x_i^b-x_i,y_i^b-y_i)Tˉb​(pi​)=(xib​−xi​,yib​−yi​)
且需要满足采样的距离要求:
∣∣Tˉf(pi)∣∣2=∣∣Tˉb(pi)∣∣2=d||\bar{T}_f(p_i)||_2=||\bar{T}_b(p_i)||_2=d∣∣Tˉf​(pi​)∣∣2​=∣∣Tˉb​(pi​)∣∣2​=d
这里需要主要的是在分离汇入场景下当前点的下一个点是存在歧义的,也就是对于点(xm,ym)(x_m,y_m)(xm​,ym​)它的下一个点是存在于车道线(分离汇入分别两根线分别标注){(x1,y1),…,(xm,ym),…,(xn11,yn11)}\{(x_1,y_1),\dots,(x_m,y_m),\dots,(x_{n1}^1,y_{n1}^1)\}{(x1​,y1​),…,(xm​,ym​),…,(xn11​,yn11​)}和{(x1,y1),…,(xm,ym),…,(xn22,yn22)}\{(x_1,y_1),\dots,(x_m,y_m),\dots,(x_{n2}^2,y_{n2}^2)\}{(x1​,y1​),…,(xm​,ym​),…,(xn22​,yn22​)}中的,这里针对这样的歧义场景是随机选择该点的下一个点作为相邻点的,也就是从(xm+11,ym+11)(x_{m+1}^1,y_{m+1}^1)(xm+11​,ym+11​)和(xm+12,ym+12)(x_{m+1}^2,y_{m+1}^2)(xm+12​,ym+12​)中随机选择一个。

具体车道线的编码方式可以参考如下代码:

def encode(lanes):2022.10.31操作删除

文中的这几个分量对于性能的影响见下表所示:

2.3 损失函数

这篇文章的方法是包含3个预测头的,则其对应的监督损失函数也是对应的3个部分:二值分割损失(采用OHEM)、distance map和transfer map损失(采用SmoothL1),它们分别定义为:
Lseg=1Npos+Nneg(∑i∈Sposyilog(pi)+∑i∈Sneg(1−yi)log(1−pi))L_{seg}=\frac{1}{N_{pos}+N_{neg}}(\sum_{i\in S_{pos}}y_ilog(p_i)+\sum_{i\in S_{neg}}(1-y_i)log(1-p_i))Lseg​=Npos​+Nneg​1​(i∈Spos​∑​yi​log(pi​)+i∈Sneg​∑​(1−yi​)log(1−pi​))
LD=1Npos∑i∈SposLSmoothL1(D(pi),Dˉ(pi))L_D=\frac{1}{N_{pos}}\sum_{i\in S_{pos}}L_{Smooth_{L_1}}(D(p_i),\bar{D}(p_i))LD​=Npos​1​i∈Spos​∑​LSmoothL1​​​(D(pi​),Dˉ(pi​))
LT=1Npos∑i∈SposLSmoothL1(T(pi),Tˉ(pi))L_T=\frac{1}{N_{pos}}\sum_{i\in S_{pos}}L_{Smooth_{L_1}}(T(p_i),\bar{T}(p_i))LT​=Npos​1​i∈Spos​∑​LSmoothL1​​​(T(pi​),Tˉ(pi​))
总的损失函数就是三者相加:
Ltotal=Lseg+LD+LTL_{total}=L_{seg}+L_D+L_TLtotal​=Lseg​+LD​+LT​

2.4 推理过程

在推理的过程中同时使用到3个头的信息,其具体步骤描述为:

Step1:
在二值分割结果的基础上使用point-nms选择起始种子点集合pstartp_{start}pstart​,对于这里种子点的选择依据现有能掌握到的信息是根据车道线点的分类概率得到的,具体可以参考(具体怎么实现的还需参考最后开源之后的实现):

def seg2keypoint(self, seg_map):  # 输入为车道线分割概率2022.10.31操作删除

Step2:
得到起始点pstartp_{start}pstart​之后便是以起始点出发依据distance map和transfer map推理得到整条车道线,这里distance map的作用其实就是确定车道线的终止位置。其可参见下图:

Step3:
对由起始点pstartp_{start}pstart​得到的车道线使用IoU-NMS进行去重过滤得到最后检测结果。

3. 实验结果

CULane:

CurveLanes:

《RCLane:Relay Chain Prediction for Lane Detection》论文笔记相关推荐

  1. 论文笔记之Understanding and Diagnosing Visual Tracking Systems

    Understanding and Diagnosing Visual Tracking Systems 论文链接:http://dwz.cn/6qPeIb 本文的主要思想是为了剖析出一个跟踪算法中到 ...

  2. 《Understanding and Diagnosing Visual Tracking Systems》论文笔记

    本人为目标追踪初入小白,在博客下第一次记录一下自己的论文笔记,如有差错,恳请批评指正!! 论文相关信息:<Understanding and Diagnosing Visual Tracking ...

  3. 论文笔记Understanding and Diagnosing Visual Tracking Systems

    最近在看目标跟踪方面的论文,看到王乃岩博士发的一篇分析跟踪系统的文章,将目标跟踪系统拆分为多个独立的部分进行分析,比较各个部分的效果.本文主要对该论文的重点的一个大致翻译,刚入门,水平有限,如有理解错 ...

  4. 目标跟踪笔记Understanding and Diagnosing Visual Tracking Systems

    Understanding and Diagnosing Visual Tracking Systems 原文链接:https://blog.csdn.net/u010515206/article/d ...

  5. 追踪系统分模块解析(Understanding and Diagnosing Visual Tracking Systems)

    追踪系统分模块解析(Understanding and Diagnosing Visual Tracking Systems) PROJECT http://winsty.net/tracker_di ...

  6. ICCV 2015 《Understanding and Diagnosing Visual Tracking Systems》论文笔记

    目录 写在前面 文章大意 一些benchmark 实验 实验设置 基本模型 数据集 实验1 Featrue Extractor 实验2 Observation Model 实验3 Motion Mod ...

  7. Understanding and Diagnosing Visual Tracking Systems

    文章把一个跟踪器分为几个模块,分别为motion model, feature extractor, observation model, model updater, and ensemble po ...

  8. CVPR 2017 SANet:《SANet: Structure-Aware Network for Visual Tracking》论文笔记

    理解出错之处望不吝指正. 本文模型叫做SANet.作者在论文中提到,CNN模型主要适用于类间判别,对于相似物体的判别能力不强.作者提出使用RNN对目标物体的self-structure进行建模,用于提 ...

  9. ICCV 2017 UCT:《UCT: Learning Unified Convolutional Networks forReal-time Visual Tracking》论文笔记

    理解出错之处望不吝指正. 本文模型叫做UCT.就像论文题目一样,作者提出了一个基于卷积神经网络的end2end的tracking模型.模型的整体结构如下图所示(图中实线代表online trackin ...

  10. CVPR 2018 STRCF:《Learning Spatial-Temporal Regularized Correlation Filters for Visual Tracking》论文笔记

    理解出错之处望不吝指正. 本文提出的模型叫做STRCF. 在DCF中存在边界效应,SRDCF在DCF的基础上中通过加入spatial惩罚项解决了边界效应,但是SRDCF在tracking的过程中要使用 ...

最新文章

  1. docker 系列之 配置阿里云镜像加速器
  2. tensorflow打印模型结构_Tensorflow上手1: Print与py_func
  3. 数据分析师常用的十种数据分析思路,你都知道吗?
  4. 怎样把centos 6.2 系统里的网卡em1还原为eth0
  5. 基于 C# 的 ETL 大数据并行编程
  6. api-hook,更轻量的接口测试工具
  7. spearman相关性_Spearman的相关性及其在机器学习中的意义
  8. LeetCode 581. Shortest Unsorted Continuous Subarray
  9. 【matlab】三维网格曲面图(mesh的用法)
  10. odoo13 订单模板设置_ERP输出嵌入公章的采购订单电子档,其实真的不难
  11. python高斯滤波和降噪_高斯滤波器和高斯滤波器中sigma与带宽的关系
  12. CAD2010安装→注册
  13. 深度学习-感知机模型---思路图解+python代码
  14. 以太网没有有效的ip怎么解决
  15. 建站过程中,网站优化的雷区
  16. Win10下怎么查看WIFI密码
  17. 基于TCP协议网上聊天程序(python)带界面
  18. .Net Framework 、.Net 、 .NET Standard的概念与区别
  19. 【EMMC】MSM8953里时钟是如何分频的
  20. 【实战】轻轻松松使用StyleGAN(一):创建令人惊讶的黄种人脸和专属于自己的老婆动漫头像

热门文章

  1. intern string java_聊聊java String的intern
  2. Bugzilla的配置和安装
  3. 【Bugzilla】我按照bugzilla的官方指导进行的安装。(一)
  4. PCIe物理层详细总结-PCIe专题知识(一)
  5. 什么是中文分词及中文分词的应用
  6. ArchSummit深圳2016优秀演讲公布,北京站专题抢先看
  7. 【网络】Cookie是什么?
  8. android 单点登录
  9. 七月:交通车辆管理、门禁考勤,智能化升级的最优方案你get到了吗?
  10. 80端口和8080端口