文章目录
- 前言
- 一、环境搭建
- 二、测试
- 三、训练
- 四、模型评估
- 五、可能遇到的报错
- 5.1 测试视频报错 IndexError: boolean index did not match indexed array along dimension 0; dimension is 1536 but corresponding boolean dimension is 1440
- 5.2 训练报错 TypeError: can't pickle generator objects,EOFError: Ran out of input
- 5.3 调小batch_size后仍然RuntimeError: CUDA out of memory.
- 5.4 AttributeError: 'list' object has no attribute 'seek'. You can only torch.load from a file that is seekable. Please pre-load the data into a buffer like io.BytesIO and try to load from it
- 总结
前言
本文将详细介绍YOLOP 训练+测试+模型评估的过程和个人遇到的所有报错。一、环境搭建
必要环境:Windows10+python3.7+CUDA10.1+CUDNN7.6.5
-
创建yolop虚拟环境
conda create -n yolo_p python=3.7
-
下载pytorch (pytorch版本>=1.7)
conda install pytorch==1.7.0 torchvision==0.8.0 torchaudio==0.7.0 cudatoolkit=10.1 -c pytorch
-
下载YOLOP源码
地址:https://github.com/hustvl/YOLOP -
安装所需要的依赖包
pip install -r requirements.txt
二、测试
- 运行
python tools/demo.py --source ./inference/videos/1.mp4
测试图片:–source 图片路径 (或存放图片的文件夹路径)
测试视频:–source 视频路径 (或存放视频的文件夹路径)
相机实时:–source 0
默认用cpu测试效果,如果想改成gpu,修改demo.py 198行如下。
效果如下:
三、训练
3.1 下载数据集
-
下载检测任务图片:
https://bdd-data.berkeley.edu/portal.html#download -
下载检测任务标签:
https://drive.google.com/file/d/1Ge-R8NTxG1eqd4zbryFo-1Uonuh0Nxyl/view -
下载可行驶区域分割任务标签:
https://drive.google.com/file/d/1xy_DhUZRHR8yrZG3OwTQAHhYTnXn7URv/view -
下载车道线分割任务标签:
https://drive.google.com/file/d/1lDNTPIQj_YLNZVkksKM25CvCHuquJ8AP/view数据集结构
这里为了方便我自己划分了部分数据集进行训练
下载地址:
链接:https://pan.baidu.com/s/1XixhZtU3nNfxKLvV3RZqGQ
提取码:ed8n
3.2 在./lib/config/default.py中修改相关参数
-
修改第九行
_C.WORKERS = 0
-
修改96行,121行
_C.TRAIN.BATCH_SIZE_PER_GPU
为合适大小(博主电脑比较菜这里填的1)
-
根据注释修改53-56行路径
-
运行
python tools/train.py
开始训练
四、模型评估
- 运行
python tools/test.py --weights weights/End-to-end.pth
五、可能遇到的报错
5.1 测试视频报错 IndexError: boolean index did not match indexed array along dimension 0; dimension is 1536 but corresponding boolean dimension is 1440
解决方案:
-
在tools/demo.py 128行前加入如下代码
img_det=cv2.resize(img_det,(da_seg_mask.shape[1],da_seg_mask.shape[0]) ,interpolation=cv2.INTER_AREA)
-
删除./lib/utils/plot.py 第60行的resize
-
在demo.py 148行下加入如下代码,运行demo.py查看效果
cv2.namedWindow("test", cv2.WINDOW_NORMAL) cv2.resizeWindow("test", int(img_det.shape[1] * 0.5), int(img_det.shape[0] * 0.5)) cv2.imshow("test", img_det) cv2.waitKey(30)
效果:
5.2 训练报错 TypeError: can’t pickle generator objects,EOFError: Ran out of input
解决方案:
- 修改./lib/config/default.py第九行_C.WORKERS = 0
5.3 调小batch_size后仍然RuntimeError: CUDA out of memory.
解决方案:
- 修改./lib/config/default.py第19行_C.CUDNN.BENCHMARK = False
5.4 AttributeError: ‘list’ object has no attribute ‘seek’. You can only torch.load from a file that is seekable. Please pre-load the data into a buffer like io.BytesIO and try to load from it
解决方案
- 暴力删除test.py39行的nargs=‘+’
总结
困,想睡觉
有什么问题,欢迎评论区交流!
学习交流群:995760755