Ultra-Fast-Lane-Detection代码学习与报错解决

论文简介

表于2020年ECCV的《Ultra Fast Structure-aware Deep Lane Detection》

创新点:提出了利用车道线的先验知识,设计了structural loss(结构损失),给网络输出增加几何约束,以解决严重遮挡和极端光照条件下车道线检测问题。

在CULane和TuSimple数据集上取得了很好的结果,检测速度达到300fps以上。

模型的设计思路:总体网络结构。辅助分支显示在上部,仅在训练时有效。特征提取器在蓝色框中显示。基于分类的预测和辅助分割任务分别用绿色框和橙色框表示。对每个排锚进行分组分类。

实验结果显示,论文中提出的方法在车道检测任务上达到了前所未有的速度,轻量级版本的检测速度可达300+帧每秒(FPS),是先前最先进方法的4倍。

代码

1、代码下载地址:GitHub - cfzd/Ultra-Fast-Lane-Detection: Ultra Fast Structure-aware Deep Lane Detection (ECCV 2020)

或者
git clone https://github.com/cfzd/Ultra-Fast-Lane-Detection.git

2、数据集准备:

CULane: CULane是用于行车道检测学术研究的大规模具有挑战性的数据集。它由安装在六辆由北京不同驾驶员驾驶的不同车辆上的摄像机收集。收集了超过55小时的视频,并提取了133,235帧。数据示例如上所示。我们将数据集分为88880个训练集,9675个验证集和34680个测试集。测试集分为正常和8个挑战性类别,分别对应于上述9个示例。
百度飞桨里有人分享了,下载挺快的: CULane_数据集-飞桨AI Studio星河社区
数据集是文件夹.MP4里面但是截取的图片和标签
数据集文件夹应包括:
1.训练与验证的图像和注释:
- driver_23_30frame.tar.gz
- driver_161_90frame.tar.gz
- driver_182_30frame.tar.gz
对于每个图像,将有一个.txt注释文件,其中每个行给出车道标记关键点的x,y坐标。
2.测试图像和注释:
- driver_37_30frame.tar.gz
- driver_100_30frame.tar.gz
- driver_193_90frame.tar.gz
3.训练/验证/测试列表:
- list.tar.gz
对于用于训练的train_gt.txt,每行的格式为“输入图像,每个像素的标签,四个0/1数字,指示从左到右存在四个车道标记”。
4. Train&val的车道分段标签:
-laneseg_label_w16.tar.gz
,它是从原始注释生成的。
TuSimple:在kaggle里下载: TuSimple --- TuSimple (kaggle.com)
注意:这里TuSimple的标签格式和模型使用的有点不一样,要在scripts\convert_tusimple.py中运行一下
python scripts/convert_tusimple.py --root configs/tusimple.py
因为这些数据集都太大了,我下了 CULane,选取一部分跑一下。直接用完整的数据集肯定更简单。
在CULane数据集介绍中train,val,test都只保留一两个,吧.txt中多余的文件路径删去。
尝试代码能否运行
1、    代码还是很好跑的,首先在configs\culane.py中修改
data_root = 'CULane'
log_path = 'log'
test_model = 'culane_18.pth'
test_work_dir 
也可以在终端用命令行python test.py configs/tusimple.py --test_model culane_18.pth --test_work_dir configs\culane.py
2、先跑一下demo.py,缺什么库就安装什么
python demo.py configs\culane.py
运行保存的是图片拼接的视频

3、从data开始加载数据

4、模型

    主要是model\backbone.py和models\model.py,我想查看模型每层的输出,在model.py最后面
if __name__ == '__main__':
    x = torch.randn(1, 3, 288, 800)
    print('x', x.size())
    net = parsingNet()
    y = net(x)
    print(y.size())
不知道导入为什么有问题,单独构建个models\__init__.py
from .backbone import resnet
from .model import parsingNet
可能报错
C:\Users\WWXX\.conda\envs\mmlab\lib\site-packages\torch\nn\functional.py:718: UserWarning: Named tensors and all their associated APIs are an experimental feature and subject to change. Please do not use them for anything important until they are released as stable. (Triggered internally at ..\c10/core/TensorImpl.h:1156.) return torch.max_pool2d(input, kernel_size, stride, padding, dilation, ceil_mode) <built-in method size of Tensor object at 0x000002EDD8DF0EA0>
在导入前加上
import warnings# 忽略特定类型的警告
warnings.filterwarnings("ignore", message="Named tensors and all their associated APIs are an experimental feature.*")
# 在导入 torch 之前执行上述代码
import torch
UniRepLKNet.py
if __name__ == '__main__':
    inputs = torch.randn((1, 3, 288, 800))
    model = unireplknet_a(r'model\unireplknet_a_in1k_224_acc77.03.pth')
    y1 = model(inputs)[0]
    print('y1',y1.size())
    y2 = model(inputs)[1]
    print('y2',y2.size())
    y3 = model(inputs)[2]
    print('y3',y3.size())
    y4 = model(inputs)[3]
    print('y4',y4.size())
    res = model(inputs)[-1]
    print('res4', res.size())
    model.switch_to_deploy()
    res_fuse = model(inputs)[-1]
    print(torch.mean(res_fuse - res))

6、train.py

在使用命令行
python train.py configs\culane.py
运行代码时觉得不方便,不好debug,用的vscode,好像是要配置参数并运行脚本,不会。
找了半天,在utils\common.py中的
args = get_args().parse_args()
直接把我用的路径放进去就能训练了
args = get_args().parse_args(['configs\culane.py'])
改了backbone的网络
报错:
该报错原因是:
OMP:错误#15:初始化libip5md. dll,但发现libip5md.dll已经初始化。
OMP:提示这意味着OpenMP运行时的多个副本已链接到程序中。这很危险,因为它会降低性能或导致不正确的结果
解决方法:
1、找到每一个 import os,改为
import os
os.environ[“KMP_DUPLICATE_LIB_OK”]=“TRUE”
2、在你的环境路径中找到libiomp5md.dll文件,将该文件删除或者重命名。
如报错的地方给了个路径File "C:\Users\XX\.conda\envs\mmlab\lib\site-packages\tqdm\std.py", line 1178, in __iter__
找到Library\bin里面的libiomp5md.dll把它剪切到其它位置,方便复原,这样就能跑通了
<think>好的,用户想了解Ultra-Fast-Lane-Detection系统的实现原理、代码和下载方式。首先,我需要回忆一下这个项目的基本信息。根据提供的引用资料,这是一个在ECCV 2020提出的车道检测系统,强调速度和结构感知。 首先,实现原理方面。用户可能想知道模型是如何做到高速检测的。根据引用[1]和[2],系统可能采用了轻量化的网络结构,比如基于ResNet的骨干网络,结合特定的车道表示方法。比如,将车道线检测转化为行方向的分类问题,这样能减少计算量,提高速度。此外,可能使用了结构损失函数来保持车道的连续性,这属于结构感知的部分。 接下来是代码部分。用户需要下载链接和代码结构。根据引用[1][2][3],代码托管在GitHub上,链接可能需要检查是否正确。比如引用[3]提供了github.com/cfzd/Ultra-Fast-Lane-Detection,而引用[2]的gitcode镜像可能作为备用。需要确认这些链接是否有效,并指出主仓库和镜像的区别。此外,代码解析部分可能包括数据预处理、模型定义、训练流程和推理步骤,需要简要说明各部分的作用。 关于下载方式,用户可能需要具体的步骤,比如直接克隆仓库或者通过GitCode镜像。需要提醒用户依赖安装和数据集准备,例如TuSimple和CULane数据集,以及如何配置环境。 用户还可能关心应用场景,比如自动驾驶中的实时车道检测,这时候模型的高速度非常重要。同时,可能需要提到性能指标,如F1分数和推理速度,以展示系统的优势。 需要检查是否有遗漏的信息,比如训练自己的数据集的方法,或者部署到实际环境中的注意事项。引用中提到的复现和部署指南(引用[3])可能包含这部分内容,应建议用户参考相关文档。 最后,生成相关问题时要考虑用户可能深入的问题,比如原理的细节、代码的具体模块、部署的步骤或者其他模型的比较。确保问题能引导用户进一步探索。</think>### Ultra-Fast-Lane-Detection 系统解析 #### 1. **实现原理** Ultra-Fast-Lane-Detection 是一种基于深度学习的车道线检测系统,核心创新在于将车道线检测任务**转化为行方向上的分类问题**,而非传统的像素级分割或锚框回归。其关键技术包括: - **轻量化网络结构**:采用 ResNet 或类似骨干网络提取特征,结合轻量级解码器,显著降低计算量[^2]。 - **行分类表示**:将图像按行划分,每行预测车道线存在的概率和横向偏移量,通过 $$P(y_i=k) = \text{Softmax}(Wx_i + b)$$ 实现高效分类[^1]。 - **结构感知损失**:引入车道线连续性约束,确保相邻行预测结果的一致性,公式为 $$L_{\text{structure}} = \sum_{i=1}^{N-1} \| \Delta x_i - \Delta x_{i+1} \|^2$$。 #### 2. **代码获取结构** - **代码下载地址**: - 主仓库:GitHub - [cfzd/Ultra-Fast-Lane-Detection](https://github.com/cfzd/Ultra-Fast-Lane-Detection) [^1][^3] - 镜像仓库:GitCode - [gh_mirrors/Ultra-Fast-Lane-Detection](https://gitcode.com/gh_mirrors/Ultra-Fast-Lane-Detection) - **代码结构解析**: ```plaintext ├── model/ # 模型定义(骨干网络、解码器等) ├── demo.py # 单张图像推理脚本 ├── train.py # 训练流程实现 ├── dataset/ # 数据集加载预处理(TuSimple、CULane) └── utils/ # 损失函数、评估指标等工具 ``` #### 3. **使用训练** - **依赖安装**:需配置 PyTorch、OpenCV 和常见科学计算库。 - **数据集准备**:支持 TuSimple 和 CULane 数据集,需按规范组织图像和标注文件。 - **训练命令示例**: ```bash python train.py --config configs/tusimple_res18.yaml --gpus 0 ``` - **推理示例**: ```bash python demo.py --img_path example.jpg --weight_path model.pth ``` #### 4. **应用场景** - **自动驾驶实时感知**:推理速度达 300+ FPS(RTX 2080 Ti),适合车载嵌入式部署[^2]。 - **车道偏离预警**:高精度检测车道线位置曲率。 - **交通监控系统**:结合视频流分析车道占用情况。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值