【学习记录】利用lanedet实现自定义大小数据集的训练与测试

车道线检测网络主要分为以下几种类型:

1、基于分割的检测方法
2、基于锚框的检测方法
3、基于参数的检测方法

‎LaneDet是一个基于PyTorch的开源车道检测工具箱,旨在汇集各种最先进的车道检测模型。
landet源码:

开通博客并撰写相关的文章旨在记录自己在学习过程中遇到的错误以及解决的方法,以便回顾以及当再次遇到相同错误时及时解决。我也是懵懵懂懂,在探索过程中的一名菜鸡,希望各位大佬多多指点。

准备过程

按照源码的readme进行前期的环境配置以及安装相关的库,除此之外还要按照作者的要求利用setup.py安装相关的支持。
这里注意:如果没有安装setup.py就会报以下错误
ImportError: cannot import name ‘nms_impl’ from partially initialized module ‘lanedet.ops’ (most likely due to a circular import)

  • 问题1
    安装setup.py的过程中,首先需要尝试安装不同的pytorch版本来测试是否匹配所需的配置,安装成功后还需要测试当前的torch以及cuda是否可用。可以通过以下方式来进行验证:
    检查pytorch是否安装成功、查看torch和cuda的版本
    我安装的版本:
    pip install torch1.9.0+cu111 torchvision0.10.0+cu111 torchaudio==0.9.0 -f https://download.pytorch.org/whl/torch_stable.html

  • 问题2
    可能会由于cuda、pytorch等版本不匹配的问题,这也会导致setup.py安装不成功。例如:
    nvcc fatal : Unsupported gpu architecture ‘compute_86‘
    出现这种情况的原因一般是硬件能够支持的算力能达到8.6,但是当前的cuda版本支持不了这么高的算力。在报错的内容里,我发现安装过程中访问cuda的路径是10.1版本的,但是我通过nvidia-smi查看到的cuda版本是11.6版本的,而且我安装的pytorch版本对应的是11版本的。当我打开cuda路径,我发现cuda有两个版本,一个是10.1一个是11.6。将cuda版本改为11.6即可。
    这里查阅的资料如下:
    ubuntu下安装多版本cuda及版本切换教程

  • 问题3
    安装setup.py时,还会出现以下错误:
    subprocess.CalledProcessError: Command ‘[‘ninja’, ‘-v’]’ returned non-zero exit status 1.
    可以通过以下方式解决:
    将setup.py118行的代码进行修改为:
    cmdclass={‘build_ext’: BuildExtension.with_options(use_ninja=False)},

  • 问题4
    error: #error – unsupported GNU version! gcc versions later than 8 are not supported!
    解决方法:
    Ubuntu下gcc、g++版本的切换

  • 问题5
    在输入训练命令之后,报错:
    _pickle.UnpicklingError: invalid load key, <
    通过查询找到以下说法
    如何修复Pytorch中的’_pickle.UnpicklingError: invalid load key,'<‘’错误
    于是我查看了build文件夹中发现多了两个文件夹分别叫做lib.linux-x86_64-cpython-38和temp.linux-x86_64-cpython-38将这两个文件夹移除后,再进行训练即可开始训练

自定义大小数据集的训练过程

源码中支持两个公开的车道线数据集:CULane、Tusimple。那么如果想要用自己的数据集来进行训练,而自己的数据集并不是标准的CULane或者Tusimple大小就会需要修改一些参数来进行训练。

需要修改的参数有以下内容:(以condalane为例)
1、configs/condlane/resnet101_culane.py
-sample_y = range(590, 270, -8)
+sample_y = range(ori_img_h, 540, -8)
-ori_img_h = 590
-ori_img_w = 1640
+ori_img_w=1920(改为自己数据集的宽度)
+ori_img_h=1080(改为自己数据集的高度)
-batch_size = 8
+batch_size = 1
-crop_bbox = [0, 270, 1640, 590]
+crop_bbox = [0, 540, ori_img_w, ori_img_h]
2、landet/utils/culane_metric.py
-img_shape=(590,1640,3)
+img_shape=(1080,1920,3)

注意:在这里batch_size需要改为1,不然就会报错
RuntimeError: The size of tensor a (2) must match the size of tensor b (8) at non-singleton dimension 0 通过查阅相关资料,这种错误是因为在于计算时是在每个batch中进行的,而总的图片数量并不能被所设置的batch_size整除,造成最后一个batch的图片数量与batch_size不相等。

训练结果

训练结果存储在work_dirs文件夹中,打开训练生成的文件夹中的ckpt,里面存有训练过程中每个epoch生成的模型,其中best.pth时最好的模型,用该模型进行测试,当在终端输入测试命令时如果想要测试结果可视化需要在命令后面输入–view,测试结果存放在work_dirs文件夹中,其中可视化结果存放在visualization文件夹中,测试结果的相关指标存在log.txt文件中。
【学习记录】利用lanedet实现自定义大小数据集的训练与测试_第1张图片

算法对比

通过近几天的学习,将laneatt算法和condlane算法的结果进行一个总结,结果如下:

算法 Precision Recall F1
laneatt_mobilenetv2 :0.6678 0.4926 0.5670
laneatt_resnet18 0.7307 0.5352 0.6179
condalane_resnet101 0.89305 0.7037 0.7872
condalane_resnet50 0.8401 0.6186 0.7125
目前只是测试了以上两种算法,可以看出condalane_resnei101网络的性能相对较好一些。

计划

以上两种网络,通过对其测试的可视化结果的观察,发现有的图片检测不到延伸到视线尽头的线,下一步计划利用其他网络来进行测试。

你可能感兴趣的:(学习,深度学习,计算机视觉)