当前位置:   article > 正文

目标检测 YOLOv5 - YOLOv5:v6版本多机多卡训练出现的错误及解决方案_yolov5n6和yolov5n

yolov5n6和yolov5n

目标检测 YOLOv5 - YOLOv5:v6版本多机多卡训练出现的错误及解决方案

flyfish

2021年4月份发布的 YOLOv5:v5版本,2021年10月份发布的 YOLOv5:v6版本
发布了更小的Nano模型YOLOv5n和YOLOv5n6

一. 改进的方面

  1. 整合了 Roboflow,使用Roboflow来组织、标注、准备、版本化和托管用于训练YOLOv5模型的数据集,Roboflow上有很多公开的数据集。

  2. Nano模型保持了 yolov5s 模型的深度depth multiple =0.33,宽度width multiple 则是从0.5降到了0.25,从而减少了75%参数,从7.5M缩小到了1.9M,这样非常适合移动端或者是 CPU 的环境。

  3. 支持 tensorflow 和 keras模型的导出

  4. 同时支持 OpenCV DNN 和 ONNX Runtime推理

  5. 导出的 onnx 同时支持 opencv dnn 和 onnx runtime

  6. 模型结构
    (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])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

原因是PyTorch版本,YOLOv5的推荐的Python>=3.6.0,PyTorch>=1.7。
PyTorch>=1.7的函数

torch.distributed.barrier(group=<object object>, async_op=False)
  • 1

看看新的PyTorch 1.9的函数

torch.distributed.barrier(group=None, async_op=False, device_ids=None)
  • 1

再看看PyTorch 1.8的函数

torch.distributed.barrier(group=None, async_op=False, device_ids=None)
  • 1

通过比较发现2021年10月份发布的 YOLOv5:v6版本,使用的PyTorch并不是1.7版本,最简单的方法就是升级下自己PyTorch版本,至少1.8。
也可以按照 YOLOv5的一贯做法,加一个check_requirements()主要是检测 torch>=1.8.0。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/167766?site
推荐阅读
相关标签
  

闽ICP备14008679号