栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【最新yolov6】yoloV6调试记录(持续更新)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【最新yolov6】yoloV6调试记录(持续更新)

最近由美团发布了yoloV6,声称达到了如下的效果:

 其中YOLOv6-nano在COCO val2017数据集上达到了35.0 mAP, YOLOv6-s在同样的数据集上达到了43.1 mAP。

工程和说明见:GitHub - meituan/YOLOv6: YOLOv6: a single-stage object detection framework dedicated to industrial applications.https://github.com/meituan/YOLOv6

 目前由于工程是近期发布的,有一定的问题,而且GIthub中的说明也不是很详细,特此写一篇关于调试的文章。

-------------------------------------------------------------------------------------------------------

写在最前面:

经过测试该工程不适合笔记本(测试电脑为r9000p 2021)及普通台式机,适合运行在性能较好的电脑或者服务器上,本文为windows上的配置,供大家参考学习!

----------------------------------------------------------------------------------------------------------

以下开始windows上的配置:

从requirement.txt可以看出该工程依赖于以下:

 注意:请勿安装最新版本的torch(1.11.0)+torchvison(0.12)会出现问题!

我的成功运行的环境供大家参考:python 3.8.13 torchvision 0.11.1+cu113 torch 1.10.0+cu113 numpy 1.21.5 opencv-python 4.6.0.66 opencv-python-headless 4.5.5.64 addict 2.4.0 pyyaml 6.0 等等

此处省略安装torch配套的cuda和cudnn过程。

--------------------------------------------------------------------------------------------------------

说明:本调试完成与windows10+pycharm,但仍然强烈推荐在服务器(linux)上完成调试

首先第一步克隆工程

git clone https://github.com/meituan/YOLOv6
cd YOLOv6
pip install -r requirements.txt

 先加载一下预训练模型:(下载地址)

https://github.com/meituan/YOLOv6/releases/tag/0.1.0https://github.com/meituan/YOLOv6/releases/tag/0.1.0

 先将这三个文件下载下来,放入weights文件夹(需要自行创建)下。

若要在pycharm中运行则需要,在其终端下的command Prompt而非windows的powershell,否则会报错(使用虚拟环境的话会找不到例如torch等库)

 然后运行inference模型:

python tools/infer.py --weights yolov6s.pt 
                                
yolov6n.pt(此处可替换别的模型)

imagedir保持默认即可,该路径存在 ,可选项如下:

 运行完毕后到训练阶段:

准备工作:下载COCO数据集(可能需要科学上网),并在yaml文件中更改相应路径

COCO - Common Objects in Contexthttps://cocodataset.org/#home建议下载2017

 但仍然不全,发现缺少labels

下载链接:https://pan.baidu.com/s/12AIzhR-4wWdFrsjW7RSX0g?pwd=8e2t 
提取码:8e2t 

在项目文件中创建data文件夹,布局如下:

 images文件夹:

 labels文件夹:

 annotations文件夹:

按照此结构部署的COCO数据集coco.yaml应修改为:

# COCO 2017 dataset http://cocodataset.org
train: ./data/coco/images/train2017 # 118287 images
val: ./data/coco/images/val2017  # 5000 images
test: ./data/coco/images/test2017
anno_path: ./data/coco/annotations/instances_val2017.json
# number of classes
nc: 80

# class names
names: [ 'person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train', 'truck', 'boat', 'traffic light',
         'fire hydrant', 'stop sign', 'parking meter', 'bench', 'bird', 'cat', 'dog', 'horse', 'sheep', 'cow',
         'elephant', 'bear', 'zebra', 'giraffe', 'backpack', 'umbrella', 'handbag', 'tie', 'suitcase', 'frisbee',
         'skis', 'snowboard', 'sports ball', 'kite', 'baseball bat', 'baseball glove', 'skateboard', 'surfboard',
         'tennis racket', 'bottle', 'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl', 'banana', 'apple',
         'sandwich', 'orange', 'broccoli', 'carrot', 'hot dog', 'pizza', 'donut', 'cake', 'chair', 'couch',
         'potted plant', 'bed', 'dining table', 'toilet', 'tv', 'laptop', 'mouse', 'remote', 'keyboard', 'cell phone',
         'microwave', 'oven', 'toaster', 'sink', 'refrigerator', 'book', 'clock', 'vase', 'scissors', 'teddy bear',
         'hair drier', 'toothbrush' ]

 至此COCO数据集部署完毕,在windows下训练还需要修改一处(否则会因为正反斜杠混用,报路径错误):

在yolov6->data->datasets.py中第184行:

label_dir = osp.join(osp.dirname(osp.dirname(img_dir)), 'labels', osp.basename(img_dir))

改为:

label_dir = osp.join(osp.dirname(osp.dirname(img_dir)), 'labels', osp.basename(img_dir)).replace('\','/')

 接下来开始训练:

单个GPU:

python tools/train.py --batch 32 --conf configs/yolov6s.py --data data/coco.yaml --device 0
                                   

 configs/yolov6s.py处可以更换models中的其他模型。

多个GPU(推荐使用DDP)

python -m torch.distributed.launch --nproc_per_node 8 tools/train.py --batch 256 --conf configs/yolov6s.py --data data/coco.yaml --device 0,1,2,3,4,5,6,7

 评估:

重现该模型在COCO val2017的mAP

python tools/eval.py --data data/coco.yaml  --batch 32 --weights yolov6s.pt --task val
                                                                 

 装载:

ONNX

OpenVINO

性能测试:略,见github原地址。

训练自己的数据:

https://github.com/meituan/YOLOv6/blob/main/docs/Train_custom_data.mdhttps://github.com/meituan/YOLOv6/blob/main/docs/Train_custom_data.md

Benchmark:

-------------------------------------------------------------------------------------------------------------------

踩坑小记:

1.AttributeError: 'NoneType' object has no attribute '_free_weak_ref'

这是pytorch版本问题 我第一次已安装:torch1.11.0 torchvision 0.12.0不支持

解决办法:

第一步:卸载,打开conda环境,pip list查看安装的包 使用 pip uninstall torch torchvision 卸载
再进行:pip install torch==1.10.0+cu113 torchvision==0.11.1+cu113 -f https://download.pytorch.org/whl/cu113/torch_stable.html
(以上方法测试成功)
或pip install --upgrade --force-reinstall torch==1.8.0 torchvision==0.9.0 torchaudio==0.8.0(强制重新安装)

2.RuntimeError: DataLoader worker (pid(s) 2244, 652) exited unexpectedly
原因多线程的使用造成内存不足,将workers调整至不会出错的数目,如若仍然报错,让workers为0即不使用多线程。

解决方法更改训练指令(添加 --workers x(x为能接受的数目,默认为8)):

python tools/train.py --batch 32 --conf configs/yolov6s.py --data data/coco.yaml --device 0 --workers 0

 3.OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized.
这是因为你的环境中安装了多个libiomp5md.dll库,

解决办法:到你的环境搜索libiomp5md.dll删除多出来的库(仅保留一个)。

4.训练时使用GPU训练但出现 ------------CPU Mode for This Batch-------------
可以看到这里抛出了异常:OOM RuntimeError is raised due to the huge memory cost during label assignment. CPU mode is applied in this batch. If you want to avoid this issue,try to reduce the batch size or image size.
这是由于内存不够导致的,需要缩减Batch_size(但应当大于8)或者减小图片尺寸(若使用COCO数据集则不建议修改)使用torch.cuda.empty_cache()释放未占用缓存。

解决方法:缩小batch_size(如下改为16)

python tools/train.py --batch 16 --conf configs/yolov6s.py --data data/coco.yaml --device 0 

 5.RuntimeError: Unable to find a valid cuDNN algorithm to run convolution

 原因:显卡显存不够,调小batch_size或者降低workers即可。

 warning:UserWarning: torch.meshgrid: in an upcoming release, it will be requ
ired to pass the indexing argument. (Triggered internally at  ..atensrcATennativeTensorShape.cpp:2157.) return _VF.meshgrid(tensors, **kwargs)  # type: ignore[attr-defined]
是因为:下个版本 VF.meshgrid(tensors, **kwargs) 改为修改为return _VF.meshgrid(tensors, **kwargs, indexing = ‘ij’) 
解决方法:使用return _VF.meshgrid(tensors, **kwargs, indexing = ‘ij’) # type: ignore[attr-defined] 解除警告

此外由于对于性能要求比较高,从而会出现: “OSError: [WinError 1455]页面文件太小,无法完成操作”的问题,这是由于内存不足造成的

解决方法:增大虚拟内存或者更换更大的内存条。增大虚拟内存的方法这里就不在赘述了。

tips:因为该项目对于硬件要求较高,有时候会出现上述第四个的显卡“爆显存”的问题,使用下面的代码段(在cmd控制台中输入)来监控显卡状态并每秒更新。

nvidia-smi -l 
(是l不是1,每秒显示一次)

可以看到我的3060laptop显卡也只有6G的显存,所以很容易就爆显存了。 

供大家参考:

在我的r9000p 2021中GPU可跑动的train运行方式为:

python tools/train.py --batch 24 --conf configs/yolov6s.py --data data/coco.yaml --device 0  --workers 3

注:没有继续尝试了,batch_size 32会爆显存,worker 8(默认)会内存不足(已添加30G虚拟内存)。再微调batch和workers效果不大,每个epoch需要约50分钟,一共400个epoch,是不可接受的。还是在服务器上跑比较合适!

花两个小时跑两个epoch感受一下:

epoch 0:

 epoch 1:

打开tensorboard:(指定路径到train文件夹下,而非命名的name,如exp文件夹下)

tensorboard ==logdir=xxx/runs/train

TensorBoard:(仅两个epoch,仅供参考)

-------------更新  5 epochs----------------

loss

 mAP

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/993786.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号