yolov5部署问题

yolov5源码地址https://github.com/ultralytics/yolov5
在yolov5开发部署中遇到了一点坑,在这里分享一下,希望能帮助到大家
首先官方给出了onnx的部署文件,如何部署jit能,我们从源码中就可以看出,yolov5的权重是包含模型在内的,但是比葫芦画瓢还是可以可以的。
(1)onnx部署


import argparse

import onnx
from yolov5_ultralytics.models.common import *
from utils import google_utils

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--weights', type=str, default='D:/py/FaceRecognition/weights/last.pt', help='weights path')
    parser.add_argument('--img-size', nargs='+', type=int, default=[640, 640], help='image size')
    parser.add_argument('--batch-size', type=int, default=1, help='batch size')
    opt = parser.parse_args()
    # print(opt)

    # Parameters
    f = opt.weights.replace('.pt', '.onnx')  # onnx filename
    img = torch.zeros((opt.batch_size, 3, *opt.img_size))  # image size, (1, 3, 320, 192) iDetection

    # Load pytorch model
    google_utils.attempt_download(opt.weights)
    model = torch.load(opt.weights, map_location=torch.device('cpu'))['model'].float()
    model.eval()
    model.fuse()

    # Export to onnx
    model.model[-1].export = True  # set Detect() layer export=True
    _ = model(img)  # dry run
    torch.onnx.export(model, img, f, verbose=False, opset_version=11, input_names=['images'],
                      output_names=['output'])  # output_names=['classes', 'boxes']

    # Check onnx model
    model = onnx.load(f)  # load onnx model
    onnx.checker.check_model(model)  # check onnx model
    print(onnx.helper.printable_graph(model.graph))  # print a human readable representation of the graph
    print('Export complete. ONNX model saved to %s\nView with https://github.com/lutzroeder/netron' % f)

(2)jit部署


import argparse

from torch import jit
import torch

from yolov5_ultralytics.models.common import *
from utils import google_utils

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--weights', type=str, default='weights/last.pt', help='weights path')
    parser.add_argument('--img-size', nargs='+', type=int, default=[640, 640], help='image size')
    parser.add_argument('--batch-size', type=int, default=1, help='batch size')
    opt = parser.parse_args()
    print(opt)

    # Parameters
    f = opt.weights.replace('.pt', '.jit')  # jit filename
    img = torch.zeros((opt.batch_size, 3, *opt.img_size))  # image size, (1, 3, 320, 192) iDetection

    # Load pytorch model
    google_utils.attempt_download(opt.weights)
    model = torch.load(opt.weights, map_location=torch.device('cpu'))['model'].float()
    model.eval()
    # model.fuse()

    model(img) #此处如果不加可能会报错,内部机制,具体问题不明

    # Export to jit
    # model.model[-1].export = True  # set Detect() layer export=True
    script_model = torch.jit.trace(model, img)
    script_model.save(f)
    # _ = model(img)  # dry run

踩坑记录
部署onnx没什么问题,可是在生成jit部署的时候会报错
yolov5部署问题_第1张图片
查看了输出类型,没啥问题呀,当碰到这种情况时,不妨试一下环境有没有问题,兼容性有没有问题,查了一下yolov5的环境要求,都是满足的,而且跑其他项目都是正常的,可问题就是出在了环境上,不试不知道,有些时候不能一味相信官方的要求,不同人的电脑、运行环境版本等都各有差异。
不多说了,直接上我的解决方案:

关于yolov5部署jit的问题(已解决):
提高pytorch版本>=1.5.0
提高torchversion版本>=0.6.0
提高scipy版本>=1.5.0
注意版本对应问题
我的版本信息如下:
cuda10.2、python3.7.6
选择pytorch版本:cu102/torch-1.5.1-cp37-cp37m-win_amd64.whl
选择torchversion版本:cu102/torchvision-0.6.1-cp37-cp37m-win_amd64.whl
选择scipy版本:scipy-1.5.1-cp37-cp37m-win_amd64.whl

yolov5部署pytorch环境建议在1.5版本以上,同时torchversion这些版本也要一一对应,其他版本的兼容性我没测试过,我原本pytorch1.4会报上述错误,我把版本升到1.5.1后成功解决.

你可能感兴趣的:(yolov5部署,深度学习,pytorch,python)