yolov5导出openvino模型

        首先编辑一下export.py文件中的一些参数,opset的值设为10

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=[96,160], 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')
    # opset 的预设值为13,需要将其修改为10
    parser.add_argument('--opset', type=int, default=10, 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

        之后将yolo的pt模型转换为onnx模型,如果此时直接将onnx转换为openvino的bin和xml使用demo进行推理的话,会报too many values to unpack的错误,主要是因为下图中的三个卷积造成的:

         使用netron打开onnx模型,找到这三个卷积的name

 在openvino环境中的控制台终端输入如下指令:

mo --input_model best.onnx -s 255 --reverse_input_channels --output Conv_245,Conv_294,Conv_196 --input_shape [1,3,96,160]

        最后的input_shape看你是否需要改变输入的大小,我这里时改成了160*96的输入

        导出成功的话,会显示上面的信息,之后用demo中的yolov5_demo_OV2021.3.py进行推理就不会报too many values to unpack的错误。

猜你喜欢

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