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把它剪切到其它位置,方便复原,这样就能跑通了
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值