赞
踩
目标检测 YOLOv5 - YOLOv5:v6版本多机多卡训练出现的错误及解决方案
flyfish
2021年4月份发布的 YOLOv5:v5版本,2021年10月份发布的 YOLOv5:v6版本
发布了更小的Nano模型YOLOv5n和YOLOv5n6
整合了 Roboflow,使用Roboflow来组织、标注、准备、版本化和托管用于训练YOLOv5模型的数据集,Roboflow上有很多公开的数据集。
Nano模型保持了 yolov5s 模型的深度depth multiple =0.33,宽度width multiple 则是从0.5降到了0.25,从而减少了75%参数,从7.5M缩小到了1.9M,这样非常适合移动端或者是 CPU 的环境。
支持 tensorflow 和 keras模型的导出
同时支持 OpenCV DNN 和 ONNX Runtime推理
导出的 onnx 同时支持 opencv dnn 和 onnx runtime
模型结构
(1)用 Conv(k=6, s=2, p=2) 代替 Focus() ,主要是为了方便模型导出
(2)使用新的 SPPF() 代替 SPP() 层,以减少操作
(3)减少 P3 backbone层 C3() 重复从 9 到 6 以提高速度
(4)将 SPPF 放在backbone后面
(5)更新超参数,增加了mixup 和 copy-paste
TypeError: barrier() got an unexpected keyword argument ‘device_ids’
代码出错的地方utils/torch_utils.py
def torch_distributed_zero_first(local_rank: int):
"""
Decorator to make all processes in distributed training wait for each local_master to do something.
"""
if local_rank not in [-1, 0]:
dist.barrier(device_ids=[local_rank])
yield
if local_rank == 0:
dist.barrier(device_ids=[0])
原因是PyTorch版本,YOLOv5的推荐的Python>=3.6.0,PyTorch>=1.7。
PyTorch>=1.7的函数
torch.distributed.barrier(group=<object object>, async_op=False)
看看新的PyTorch 1.9的函数
torch.distributed.barrier(group=None, async_op=False, device_ids=None)
再看看PyTorch 1.8的函数
torch.distributed.barrier(group=None, async_op=False, device_ids=None)
通过比较发现2021年10月份发布的 YOLOv5:v6版本,使用的PyTorch并不是1.7版本,最简单的方法就是升级下自己PyTorch版本,至少1.8。
也可以按照 YOLOv5的一贯做法,加一个check_requirements()主要是检测 torch>=1.8.0。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。