电脑基础 · 2023年4月19日

车道线检测CLRNet算法复现在Tusimple数据集测试demo

0 写在前面

分享最近在车道线检测方面的工作,详细跟大家说下我的配置环境和过程,欢迎自动驾驶的朋友来交流学习,助力自动驾驶早日落地。

分享一篇今年CVPR车道线检测方向的新工作——CLRNet: Cross Layer Refinement Network for Lane Detection,是自动驾驶创业公司飞布科技和浙江大学合作完成的。

参考代码:https://github.com/Turoad/clrnet

参考原文:https://arxiv.org/abs/2203.10350

介绍:车道线检测任务是一种高次层次信息都依赖的任务,本篇文章中提出了一种级联优化(从高层次的特征到低层次的特征)的车道线检测算法,极大限度利用了高低维度的特征去优化车道线在高分辨率下的预测准确度。不同与之前的LaneeATT中直接特征index的方案,提出了基于双线性采样的线型RoI提取算子(ROIGather)

车道线检测是无人驾驶系统感知模块的重要功能,主要由搭载在车身上的视觉摄像头来完成,对于车道线检测任务,CNN网络的高层次语义信息具有较强的抽象表达能力,可以更加准确判别是否为车道线。而低层次特征中包含较为丰富的纹理信息,可以帮助车道线进行精确定位。使用不同的特征级别对于准确的车道检测非常重要,但这方面的研究仍然不足,并且在港口、城市道路等真实场景中,车道线经常存在破损、被遮挡等情况。为此,文章提出了跨层优化网络(CLRNet),首先检测具有高级语义特征的车道,然后基于低级特征进行细化,充分利用车道检测中的高级和低级特征,提出了ROIGather来收集全局上下文信息,进一步增强了车道的特征表示。此外,设计了整体维度的Lane IoU loss来约束整体车道线的回归精度。

配置环境

1.Prerequisites  Installation:

Only test on Ubuntu18.04 and 20.04 with:

Python >= 3.8 (tested with Python3.8)

PyTorch >= 1.6 (tested with Pytorch1.6)

CUDA (tested with cuda10.2)

Other dependencies described in requirements.txt

2.Clone this repository:

git clone https://github.com/Turoad/clrnet

3.Create a conda virtual environment and activate it (conda is optional)

  • conda create -n clrnet python=3.8 -y
    conda activate clrnet 
  • 安装pytorch,基于cuda10.2安装1.9.1
  • conda install pytorch==1.9.1 torchvision==0.10.1 torchaudio==0.9.1 cudatoolkit=10.2 -c pytorch
  • python setup.py build develop

报错:ImportError: cannot import name ‘nms_impl’ from partially initialized module ‘lanedet.ops’ (most likely due to a circular import)

分析:没有安装setup.py

4.准备Tusimple数据集

数据目录如下所示:

车道线检测CLRNet算法复现在Tusimple数据集测试demo

 由于Tusimple数据没有提供语义分割标签,所以需要自己准备

打开终端,执行:

python tools/generate_seg_tusimple.py --root data/Tusimple

生成对应的seg_label

5.Getting Started

For training, run:

python main.py configs/clrnet/clr_resnet34_tusimple.py --gpus 0

For testing, run:

python main.py configs/clrnet/clr_resnet18_tusimple.py --validate --load_from tusimple_r18.pth --gpus 1

 6.Visualization

run:

​
python main.py configs/clrnet/clr_resnet18_tusimple.py --validate --load_from tusimple_r18.pth --gpus 1 --view
​

生成的result在work_dirs文件夹里面,如下图所示:

车道线检测CLRNet算法复现在Tusimple数据集测试demo

效果好的可视化示例:

车道线检测CLRNet算法复现在Tusimple数据集测试demo

车道线检测CLRNet算法复现在Tusimple数据集测试demo

车道线检测CLRNet算法复现在Tusimple数据集测试demo

7.视频demo(自己训练测试的)

动态-哔哩哔哩车道线检测CLRNet算法复现在Tusimple数据集测试demohttps://t.bilibili.com/734992612459544576?share_source=pc_native

【CVPR2022车道线检测SOTA工作CLRNet在Tusimple数据集训练测试demo,助力自动驾驶早日落地】https://www.bilibili.com/video/BV1QG4y1G7X9?vd_source=ee36d11fdc4ead2bc0650f7fd81063b1

8.车道线检测相关工作

当前的基于CNN的车道线检测方案主要分为以下三类:基于分割的车道线检测、基于anchor的车道线检测、基于曲线参数化拟合的车道线检测

  1. 基于分割的方案由于需要在整张图上进行逐像素的预测且没有将车道线当做一个完整单元,所以往往比较ineffective and time-consuming。
  2. 基于anchor的方案中,在一些复杂场景中的起点很难识别,这造成相对欠佳的性能表现。
  3. 基于参数化拟合的方案虽然回归更少的参数,但对于预测的参数较为敏感,如高阶系数的错误预测可能造成车道线形状的变化。尽管基于参数化的方案有更快的推理速度,但在精度上有一定的瓶颈。

车道线检测CLRNet算法复现在Tusimple数据集测试demo

最后,写作能力也有限,有不对的地方欢迎大家批评指正!