yolov5使用官方提供的export.py导出模型报错问题

1、TorchScript: export failure: save(): incompatible function arguments. The following argument types are supported:

(self: torch._C.ScriptModule, filename: str, _extra_files: Dict[str, str] = {}) -> None
解决办法:

        在export_torchscript()函数中添加:f = str(f)即可

def export_torchscript(model, im, file, optimize, prefix=colorstr('TorchScript:')):
    # YOLOv5 TorchScript model export
    try:
        print(f'\n{prefix} starting export with torch {torch.__version__}...')
        f = file.with_suffix('.torchscript.pt')
        #添加这句
        f = str(f)

        ts = torch.jit.trace(model, im, strict=False)
        (optimize_for_mobile(ts) if optimize else ts).save(f)

        print(f'{prefix} export success, saved as {f} ({file_size(f):.1f} MB)')
    except Exception as e:
        print(f'{prefix} export failure: {e}')

2、ONNX: export failure: Unsupported ONNX opset version: 13

解决办法:

        在export.py的parse_opt()函数中找到--opset的项,将原先的default=13改为12即可

def parse_opt():
    parser = argparse.ArgumentParser()
    parser.add_argument('--data', type=str, default=ROOT / 'data/coco128.yaml', help='dataset.yaml path')
    parser.add_argument('--weights', type=str, default=ROOT / 'yolov5s.pt', help='weights path')
    parser.add_argument('--imgsz', '--img', '--img-size', nargs='+', type=int, default=[640, 640], help='image (h, w)')
    parser.add_argument('--batch-size', type=int, default=1, help='batch size')
    parser.add_argument('--device', default='cpu', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')
    parser.add_argument('--half', action='store_true', help='FP16 half-precision export')
    parser.add_argument('--inplace', action='store_true', help='set YOLOv5 Detect() inplace=True')
    parser.add_argument('--train', action='store_true', help='model.train() mode')
    parser.add_argument('--optimize', action='store_true', help='TorchScript: optimize for mobile')
    parser.add_argument('--int8', action='store_true', help='CoreML/TF INT8 quantization')
    parser.add_argument('--dynamic', action='store_true', help='ONNX/TF: dynamic axes')
    parser.add_argument('--simplify', action='store_true', help='ONNX: simplify model')
    # 将default的13改为12
    parser.add_argument('--opset', type=int, default=12, help='ONNX: opset version')
    parser.add_argument('--topk-per-class', type=int, default=100, help='TF.js NMS: topk per class to keep')
    parser.add_argument('--topk-all', type=int, default=100, help='TF.js NMS: topk for all classes to keep')
    parser.add_argument('--iou-thres', type=float, default=0.45, help='TF.js NMS: IoU threshold')
    parser.add_argument('--conf-thres', type=float, default=0.25, help='TF.js NMS: confidence threshold')
    parser.add_argument('--include', nargs='+',
                        default=['torchscript', 'onnx'],
                        help='available formats are (torchscript, onnx, coreml, saved_model, pb, tflite, tfjs)')
    opt = parser.parse_args()
    print_args(FILE.stem, opt)
    return opt

——————————————

训练模型报错问题:

3、BrokenPipeError: [Errno 32] Broken pipe

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "train.py", line 623, in <module>
  File "E:\Users\10922\anaconda3\envs\yolov5\lib\multiprocessing\spawn.py", line 105, in spawn_main
        exitcode = _main(fd)
  File "E:\Users\10922\anaconda3\envs\yolov5\lib\multiprocessing\spawn.py", line 114, in _main
main(opt)    prepare(preparation_data)

  File "E:\Users\10922\anaconda3\envs\yolov5\lib\multiprocessing\spawn.py", line 225, in prepare
  File "train.py", line 519, in main
    _fixup_main_from_path(data['init_main_from_path'])
      File "E:\Users\10922\anaconda3\envs\yolov5\lib\multiprocessing\spawn.py", line 277, in _fixup_main_from_path
train(opt.hyp, opt, device, callbacks)    run_name="__mp_main__")

  File "E:\Users\10922\anaconda3\envs\yolov5\lib\runpy.py", line 263, in run_path
  File "train.py", line 213, in train
    pkg_name=pkg_name, script_name=fname)
      File "E:\Users\10922\anaconda3\envs\yolov5\lib\runpy.py", line 96, in _run_module_code
prefix=colorstr('train: '))    mod_name, mod_spec, pkg_name, script_name)

  File "E:\Users\10922\anaconda3\envs\yolov5\lib\runpy.py", line 85, in _run_code
  File "g:\Tensorflow\yolov5\utils\datasets.py", line 120, in create_dataloader
    exec(code, run_globals)
      File "g:\Tensorflow\yolov5\train.py", line 20, in <module>
collate_fn=LoadImagesAndLabels.collate_fn4 if quad else LoadImagesAndLabels.collate_fn)    import torch

  File "E:\Users\10922\anaconda3\envs\yolov5\lib\site-packages\torch\__init__.py", line 117, in <module>
  File "g:\Tensorflow\yolov5\utils\datasets.py", line 133, in __init__
    raise err
    OSError: [WinError 1114] 动态链接库(DLL)初始化例程失败。 Error loading "E:\Users\10922\anaconda3\envs\yolov5\lib\site-packages\torch\lib\caffe2_detectron_ops_gpu.dll" or one of its dependencies.
self.iterator = super().__iter__()
  File "E:\Users\10922\anaconda3\envs\yolov5\lib\site-packages\torch\utils\data\dataloader.py", line 352, in __iter__
    return self._get_iterator()
  File "E:\Users\10922\anaconda3\envs\yolov5\lib\site-packages\torch\utils\data\dataloader.py", line 294, in _get_iterator
    return _MultiProcessingDataLoaderIter(self)
  File "E:\Users\10922\anaconda3\envs\yolov5\lib\site-packages\torch\utils\data\dataloader.py", line 801, in __init__
    w.start()
  File "E:\Users\10922\anaconda3\envs\yolov5\lib\multiprocessing\process.py", line 112, in start
    self._popen = self._Popen(self)
  File "E:\Users\10922\anaconda3\envs\yolov5\lib\multiprocessing\context.py", line 223, in _Popen
    return _default_context.get_context().Process._Popen(process_obj)
  File "E:\Users\10922\anaconda3\envs\yolov5\lib\multiprocessing\context.py", line 322, in _Popen
    return Popen(process_obj)
  File "E:\Users\10922\anaconda3\envs\yolov5\lib\multiprocessing\popen_spawn_win32.py", line 89, in __init__
    reduction.dump(process_obj, to_child)
  File "E:\Users\10922\anaconda3\envs\yolov5\lib\multiprocessing\reduction.py", line 60, in dump
    ForkingPickler(file, protocol).dump(obj)
BrokenPipeError: [Errno 32] Broken pipe

解决办法:

        修改调用torch.utils.data.DataLoader()函数时的 num_workers 参数

def parse_opt(known=False):
    parser = argparse.ArgumentParser()
    parser.add_argument('--weights', type=str, default=ROOT / 'yolov5s.pt', help='initial weights path')
    parser.add_argument('--cfg', type=str, default='', help='model.yaml path')
    parser.add_argument('--data', type=str, default=ROOT / 'data/coco128.yaml', help='dataset.yaml path')
    parser.add_argument('--hyp', type=str, default=ROOT / 'data/hyps/hyp.scratch.yaml', help='hyperparameters path')
    parser.add_argument('--epochs', type=int, default=300)
    parser.add_argument('--batch-size', type=int, default=16, help='total batch size for all GPUs')
    parser.add_argument('--imgsz', '--img', '--img-size', type=int, default=640, help='train, val image size (pixels)')
    parser.add_argument('--rect', action='store_true', help='rectangular training')
    parser.add_argument('--resume', nargs='?', const=True, default=False, help='resume most recent training')
    parser.add_argument('--nosave', action='store_true', help='only save final checkpoint')
    parser.add_argument('--noval', action='store_true', help='only validate final epoch')
    parser.add_argument('--noautoanchor', action='store_true', help='disable autoanchor check')
    parser.add_argument('--evolve', type=int, nargs='?', const=300, help='evolve hyperparameters for x generations')
    parser.add_argument('--bucket', type=str, default='', help='gsutil bucket')
    parser.add_argument('--cache', type=str, nargs='?', const='ram', help='--cache images in "ram" (default) or "disk"')
    parser.add_argument('--image-weights', action='store_true', help='use weighted image selection for training')
    parser.add_argument('--device', default='', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')
    parser.add_argument('--multi-scale', action='store_true', help='vary img-size +/- 50%%')
    parser.add_argument('--single-cls', action='store_true', help='train multi-class data as single-class')
    parser.add_argument('--adam', action='store_true', help='use torch.optim.Adam() optimizer')
    parser.add_argument('--sync-bn', action='store_true', help='use SyncBatchNorm, only available in DDP mode')
    # 将default参数改为0
    parser.add_argument('--workers', type=int, default=0, help='maximum number of dataloader workers')
    parser.add_argument('--project', default=ROOT / 'runs/train', help='save to project/name')
    parser.add_argument('--name', default='exp', help='save to project/name')
    parser.add_argument('--exist-ok', action='store_true', help='existing project/name ok, do not increment')
    parser.add_argument('--quad', action='store_true', help='quad dataloader')
    parser.add_argument('--linear-lr', action='store_true', help='linear LR')
    parser.add_argument('--label-smoothing', type=float, default=0.0, help='Label smoothing epsilon')
    parser.add_argument('--patience', type=int, default=100, help='EarlyStopping patience (epochs without improvement)')
    parser.add_argument('--freeze', type=int, default=0, help='Number of layers to freeze. backbone=10, all=24')
    parser.add_argument('--save-period', type=int, default=-1, help='Save checkpoint every x epochs (disabled if < 1)')
    parser.add_argument('--local_rank', type=int, default=-1, help='DDP parameter, do not modify')

将train.py中的--workers的预设值改为0即可

猜你喜欢

转载自blog.csdn.net/athrunsunny/article/details/120876698