首页 > 其他分享 >torch导出onnx示例-yolo

torch导出onnx示例-yolo

时间:2024-02-19 21:02:25浏览次数:27  
标签:示例 onnx yolo boxes shape np new model

onnx导出示例

目录

yolov5

yolov5是一种目标检测算法,通过使用深度学习算法,可以通过输入图像,输出图像中存在的目标的种类和位置等信息。yolov5 onnx则是在此基础上,通过使用onnx技术,将yolov5模型导出为onnx格式,方便在不同的平台上使用,同时提高了算法的效率和准确度。

导出源码

def export_onnx(model, im, file, opset, dynamic, simplify, prefix=colorstr('ONNX:')):
    # YOLOv5 ONNX export
    check_requirements('onnx')
    import onnx

    LOGGER.info(f'\n{prefix} starting export with onnx {onnx.__version__}...')
    f = file.with_suffix('.onnx')

    output_names = ['output0', 'output1'] if isinstance(model, SegmentationModel) else ['output0']
    if dynamic:
        dynamic = {'images': {0: 'batch', 2: 'height', 3: 'width'}}  # shape(1,3,640,640)
        if isinstance(model, SegmentationModel):
            dynamic['output0'] = {0: 'batch', 1: 'anchors'}  # shape(1,25200,85)
            dynamic['output1'] = {0: 'batch', 2: 'mask_height', 3: 'mask_width'}  # shape(1,32,160,160)
        elif isinstance(model, DetectionModel):
            dynamic['output0'] = {0: 'batch', 1: 'anchors'}  # shape(1,25200,85)

    torch.onnx.export(
        model.cpu() if dynamic else model,  # --dynamic only compatible with cpu
        im.cpu() if dynamic else im,
        f,
        verbose=False,
        opset_version=opset,
        do_constant_folding=True,
        input_names=['images'],
        output_names=output_names,
        dynamic_axes=dynamic or None)

    # Checks
    model_onnx = onnx.load(f)  # load onnx model
    onnx.checker.check_model(model_onnx)  # check onnx model

    # Metadata
    d = {'stride': int(max(model.stride)), 'names': model.names}
    for k, v in d.items():
        meta = model_onnx.metadata_props.add()
        meta.key, meta.value = k, str(v)
    onnx.save(model_onnx, f)

    # Simplify
    if simplify:
        try:
            cuda = torch.cuda.is_available()
            check_requirements(('onnxruntime-gpu' if cuda else 'onnxruntime', 'onnx-simplifier>=0.4.1'))
            import onnxsim

            LOGGER.info(f'{prefix} simplifying with onnx-simplifier {onnxsim.__version__}...')
            model_onnx, check = onnxsim.simplify(model_onnx)
            assert check, 'assert check failed'
            onnx.save(model_onnx, f)
        except Exception as e:
            LOGGER.info(f'{prefix} simplifier failure: {e}')
    return f, model_onnx

导出参数

(mmcv) root@gpu:/data/yolov5-7.0# python export.py --weights yolov5s.pt --img-size 640 --batch-size 1 --dynamic  --include  onnx
export: data=data/coco128.yaml, weights=['yolov5s.pt'], imgsz=[640], batch_size=1, device=cpu, half=False, inplace=False, keras=False, optimize=False, int8=False, dynamic=True, simplify=False, opset=12, verbose=False, workspace=4, nms=False, agnostic_nms=False, topk_per_class=100, topk_all=100, iou_thres=0.45, conf_thres=0.25, include=['onnx']
YOLOv5 

标签:示例,onnx,yolo,boxes,shape,np,new,model
From: https://www.cnblogs.com/tian777/p/18021936

相关文章

  • 线性插值计算百分位数的C++示例
    代码如下#include<iostream>#include<vector>#include<algorithm>doublepercentile_linear_interpolation(conststd::vector<double>&data,doublepercentile){//确保百分位数在合理范围内if(percentile<0.0||percentile>1......
  • 机器视觉-使用C#进行Yolov8推理
    Windows窗体应用可以使用一些现成的C#类库实现yolov8的predict功能,本文使用https://github.com/dme-compunet/YoloV8项目的nuget包.集成方法非常简单,但发现这种方式预测准确度下降了很多,看来还是使用PythonAPI预测更好一些.GPU版环境准备选定Onnxruntime版本,htt......
  • 通过解析库探究函数式抽象代价 ( ini 解析示例补充)
    上一篇用HexColor作为示例,可能过于简单这里再补充一个ini解析的示例由于实在写不动用其他库解析ini了,春节都要过完了,累了,写不动了,所以随意找了一份解析ini的库,仅供参考,对比不准确,毕竟完整库包含了更多功能先看看结果BenchmarkDotNetv0.13.12,Windows11(10.0.2......
  • 机器视觉-使用YoloV8的Python API
    参考文档:https://docs.ultralytics.com/modes/predict/#working-with-resultshttps://zhuanlan.zhihu.com/p/655162922https://thinkinfi.com/motorcycle-helmet-detection-using-deep-learning/示例说明关于yoloruntimesettings.yaml对训练过程的干扰yolosettings.y......
  • javascript import export 简单示例
    概述import是ES6引入的新特性,它允许你以声明式的方式导入其他模块中的内容。require是Node.js中的特性,它允许你使用一个函数来加载和导入其他模块。使用方法utils.jsexportconstadd=(a,b)=>a+b;exportconstsubtract=(a,b)=>a-b; index.jsimport*asutilsfrom......
  • 基于yolov2深度学习网络的人员跌倒检测识别matlab仿真
    1.算法运行效果图预览 2.算法运行软件版本matlab2022a 3.算法理论概述      跌倒是一种常见的健康风险,特别是在老年人和患有某些疾病的人群中。及时检测跌倒并采取相应措施对于降低伤害风险至关重要。近年来,深度学习在图像处理和计算机视觉领域取得了显著进展......
  • 深度学习的始祖框架,grandfather级别的框架 —— Theano —— 示例代码学习(5)
    代码1:(求雅可比矩阵,jacobian矩阵求解)importtheanofromtheanoimporttensor#Creatingavectorx=tensor.dvector('x')#Creating'y'expressiony=(2*x**3)#ComputingderivativeOutput,updates=theano.scan(lambdai,y,x:tensor.g......
  • 深度学习的始祖框架,grandfather级别的框架 —— Theano —— 示例代码学习(4)
    实战(DenseLayer):下面用本篇的内容,写一个全连接层,实现前向传播、反向传播和参数更新。并用它实现一个3输入1输出的单层感知机,拟合函数y=x0+x1+x2。代码:importtheanoimporttheano.tensorasTTimportnumpyasnpimportpylabclassDataset():def__init__(......
  • 深度学习的始祖框架,grandfather级别的框架 —— Theano —— 示例代码学习(3)
    实战:写一个卷积层ConvolutionLayer二维卷积的前向操作:代码:importtheano.tensorasTTimporttheanoimportnumpyasnp#fromtheano.tensor.shared_randomstreamsimportRandomStreamsIdentity=lambdax:xReLU=lambdax:TT.maximum(x,0.0)Sigmoid=lambda......
  • 深度学习的始祖框架,grandfather级别的框架 —— Theano —— 示例代码学习(2)
    代码1:(ifelse判断结构)importtheanofromtheanoimporttensorfromtheano.ifelseimportifelsex=tensor.fscalar('x')y=tensor.fscalar('y')z=ifelse(x>0,2*y,3*y)#x>0的返回值是int8类型f=theano.function([x,y],z,allow_input_down......