Ultra-Fast-Lane-Detection复现、训练及部署
- 一、复现
- 二、训练
- 三、部署
一、复现
Github下载源码:https://github.com/cfzd/Ultra-Fast-Lane-Detection
(1)将GPU运算改为CPU运算:.cuda() -> .to(‘cpu’)
test.py中33行,demo.py中30行和69行,train.py中19行、27行和116行,evalution/eval_wrapper.py中92行
(2)取消argparse方式:见test3.py和scripts/convert_tusimple.py。
(3)运行test3.py
二、训练
(1)安装标注软件labelme:
pip install labelme -i https://pypi.tuna.tsinghua.edu.cn/simple
(2)利用Edit中的Create Linestrip标注车道线,从左到右分别为Trackline1、Trackline2、Trackline3、Trackline4。
(3)标注完之后每个影像会形成一个json。
(4)将所有图像存在img文件夹中、将所有json存在josn文件夹中。将两个文件夹保存在new_data文件夹中,同时新建文件夹mask。
(5)运行convert_json.py,利用h_samples将json转化为tusimple需要的json格式。
(6)运行scripts/convert_tusimple.py,生成训练所需的txt文件(test.txt和train_gt.txt)。
重点在于.txt文件每行后边的1,1,1,1,如果后边1,1,1,1生成不正确,则训练的LOSS是降不下去的。在Ultra-Fast-Lane-Detection-master/scripts/convert_tusimple.py文件下的generate_segmentation_and_train_list(root, line_txt, names)函数,形成自己的车道线顺序。以4车道线为例1,1,1,1表示从左到右的车道线都存在;1,1,0,0,有2条斜率k<0的左侧线;0,1,0,0表示有1条斜率k<0的左侧线;0,0,1,0表示有1条斜率k>0的右侧线;经过分析发现,不会出现1,0,0,1或者1,0,1,0。也就是说0不能在中间只能在两边,这个是在训练时发现问题的关键。若有6条车道线,可按照 Ultra-Fast-Lane-Detection复现以及存在的问题 修改。
(7)修改configs/tusimple.py中的data_root参数,赋值为img和json所在的文件夹new_data路径。
(8)打开终端,切换当前项目路径,输入下列代码开始训练:
python train.py configs/tusimple.py --batch_size 8
三、部署
(1)修改model/model.py,对网络的输出层降维,由原来的[b,h,w,c]改为[h,w,c],可见model/model_onnx.py。
group_cls=torch.squeeze(group_cls,0)
(2)运行import_onnx.py的cpu_import_onnx函数是将权重文件.pth导出.onnx,cpu_operate_onnx函数是调用.onnx测试效果。
(3)C++中opencv的版本需要是4.7以上的,dnn模块才能正常读取onnx文件做推理。
(4)运行opencv_lane.cpp。