MIT-BEVFusion系列八--onnx导出1 综述及相机网络导出

这篇具有很好参考价值的文章主要介绍了MIT-BEVFusion系列八--onnx导出1 综述及相机网络导出。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

综述

bevfusion的各个部分的实现有着鲜明的特点,并且相互独立,特别是考虑到后续部署的需要,这里将整个网络,分成多个部分,分别导出onnx,方便后续部署。

MIT-BEVFusion系列八--onnx导出1 综述及相机网络导出,bevfusion,onnx,量化,自动驾驶,bevfusion

export-camera.py

相机部分导出思路如下:
1)骨干网络的选择
  对于骨干网络来说,选择了Resnet50作为骨干网络。精度会掉一点,但是收益非常大,益于部署。

2)网络拆分
  bev_pool有着高性能计算的需求,是使用cuda核函数实现的。

  bev_pool的输入,依赖于bev_pool之前的网络的输出,bev_pool的输出,需要有个池化,使得360360大小的bev池化成180180。

  所以bev_pool把整个网络,从中间分隔。

目前思路如下

  1. bev_pool前的网络,导出onnx,最终用TRT推理。
  2. bev_pool部分使用cuda核函数实现。
  3. bev_pool后的网络,导出onnx,最终用TRT推理。

MIT-BEVFusion系列八--onnx导出1 综述及相机网络导出,bevfusion,onnx,量化,自动驾驶,bevfusion

加载模型

MIT-BEVFusion系列八--onnx导出1 综述及相机网络导出,bevfusion,onnx,量化,自动驾驶,bevfusion

这里选择经过 ptq 量化后的 bevfusion 模型。

  • Args

Namespace(ckpt='qat/ckpt/bevfusion_ptq.pth', fp16=False)

加载数据

MIT-BEVFusion系列八--onnx导出1 综述及相机网络导出,bevfusion,onnx,量化,自动驾驶,bevfusion

  • Data数据中有什么
    MIT-BEVFusion系列八--onnx导出1 综述及相机网络导出,bevfusion,onnx,量化,自动驾驶,bevfusion

MIT-BEVFusion系列八--onnx导出1 综述及相机网络导出,bevfusion,onnx,量化,自动驾驶,bevfusion

MIT-BEVFusion系列八--onnx导出1 综述及相机网络导出,bevfusion,onnx,量化,自动驾驶,bevfusion

加载后续生成计算图时需要的数据。其实就是提供了一个全是0的样本数据。

生成需要导出成 onnx 的模块

Backbone 模块

CUDA-BEVFusion选择使用子类化的方式,从model也就是整个模型中,摘出自己想要的相机部分,构建成camera_model
MIT-BEVFusion系列八--onnx导出1 综述及相机网络导出,bevfusion,onnx,量化,自动驾驶,bevfusion

下图是具体子类化实现方式,子类化要对mit-bevfusion的代码、网络十分熟悉,有着充分的理解。
MIT-BEVFusion系列八--onnx导出1 综述及相机网络导出,bevfusion,onnx,量化,自动驾驶,bevfusion

下图是mit-bevfusion的代码,会发现二者很像。子类化要忠实于原本的python算法,在这个基础上进行修改,实现自己想要的功能。
MIT-BEVFusion系列八--onnx导出1 综述及相机网络导出,bevfusion,onnx,量化,自动驾驶,bevfusion

下方也是原mit-bevfusion的代码,可以看到原本的输出只有1个,而SubclassCameraModule里的get_cam_feats有两个输出。这个
MIT-BEVFusion系列八--onnx导出1 综述及相机网络导出,bevfusion,onnx,量化,自动驾驶,bevfusion

这里创建了一个SubclassCameraModule类,用于在 BEVFusion 模型中提取部分模型用于导出 onnx。

  • init 函数就是通常的初始化函数。

  • forward 函数是基于 bevfusion 中的 extract_camera_features 函数的修改,对self.encoders["camera"][vtransforms]进行了较多修改。

    • 取消了 get_geometrybev_pool 的计算,并且省去了深度和图像特征的外积操作。之后生成的计算图包含了 Resnet50、GeneralizedLSSFPN、dtransform、depthnet 和两个切片操作。

    • 输出从原本的一个输出,

    • Resnet50
      MIT-BEVFusion系列八--onnx导出1 综述及相机网络导出,bevfusion,onnx,量化,自动驾驶,bevfusion

      MIT-BEVFusion系列八--onnx导出1 综述及相机网络导出,bevfusion,onnx,量化,自动驾驶,bevfusion

      MIT-BEVFusion系列八--onnx导出1 综述及相机网络导出,bevfusion,onnx,量化,自动驾驶,bevfusion

      MIT-BEVFusion系列八--onnx导出1 综述及相机网络导出,bevfusion,onnx,量化,自动驾驶,bevfusion

    • GeneralizedLSSFPN(Neck)、dtransform、depthnet
      MIT-BEVFusion系列八--onnx导出1 综述及相机网络导出,bevfusion,onnx,量化,自动驾驶,bevfusion

    • 切片
      MIT-BEVFusion系列八--onnx导出1 综述及相机网络导出,bevfusion,onnx,量化,自动驾驶,bevfusion

  • 从onnx中可以明显的看出,SubclassCameraModule类的输出修改为两个。

    • 取消外积,这样输入bev_pool的数据规模大大减少。从161183288*80拆成了两个如图形状的数据。
VTransform 模块

MIT-BEVFusion系列八--onnx导出1 综述及相机网络导出,bevfusion,onnx,量化,自动驾驶,bevfusion

BaseDepthTransform 中的下采样操作,将 bev pool 的输出作为输入,这里仅导出 downsampling 的计算图。

生成 onnx

使用 pytorch 原生的伪量化计算方法

MIT-BEVFusion系列八--onnx导出1 综述及相机网络导出,bevfusion,onnx,量化,自动驾驶,bevfusion

导出 camera.backbone.onnx

MIT-BEVFusion系列八--onnx导出1 综述及相机网络导出,bevfusion,onnx,量化,自动驾驶,bevfusion

根据 SubclassCameraModule.forward 中的流程生成计算图,再经过简化(126行)生成最终的 camera.backbone.onnx

导出 camera.vtransform.onnx

MIT-BEVFusion系列八--onnx导出1 综述及相机网络导出,bevfusion,onnx,量化,自动驾驶,bevfusion

根据 DepthLSSTransform.downsample 模块生成计算图,保存为 camera.vtransform.onnx文章来源地址https://www.toymoban.com/news/detail-831610.html

到了这里,关于MIT-BEVFusion系列八--onnx导出1 综述及相机网络导出的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • yolov8之导出onnx(二)

    前面(一)我们给出了导出的batch是固定的,接下来我们实现动态导出:   导出的主代码demo.py: 注意:half与dynamic必须二选一才行!     导出的onnx:

    2024年02月16日
    浏览(38)
  • 导出LLaMA等LLM模型为onnx

    通过onnx模型可以在支持onnx推理的推理引擎上进行推理,从而可以将LLM部署在更加广泛的平台上面。此外还可以具有避免pytorch依赖,获得更好的性能等优势。 这篇博客(大模型LLaMa及周边项目(二) - 知乎)进行了llama导出onnx的开创性的工作,但是依赖于侵入式修改transform

    2024年02月14日
    浏览(70)
  • Torch 模型 onnx 文件的导出和调用

    Open Neural Network Exchange (ONNX,开放神经网络交换) 格式,是一个用于表示深度学习模型的标准,可使模型在不同框架之间进行转移 Torch 所定义的模型为动态图,其前向传播是由类方法定义和实现的 但是 Python 代码的效率是比较底下的,试想把动态图转化为静态图,模型的推理速

    2024年02月02日
    浏览(34)
  • yolov5 pt 模型 导出 onnx

    在训练好的yolov5 pt 模型 可以 通过 export.py 进行导出 onnx 导出流程 在 export.py 设置模型和数据源的yaml 在官方的文档中 说明了可以导出的具体的类型。 在 --include 添加导出的类型, 不同的 类型的 环境要求不一样,建议虚拟环境,比如onnx 和 openvino 的numpy 版本要求不一只,一

    2024年02月11日
    浏览(39)
  • pytorch导出onnx时遇到不支持的算子怎么解决

    在使用pytorch模型训练完成之后,我们现在使用的比较多的一种方法是将pytorch模型转成onnx格式的模型中间文件,然后再根据使用的硬件来生成具体硬件使用的深度学习模型,比如TensorRT。 在从pytorch模型转为onnx时,我们可能会遇到部分算子无法转换的问题,本篇注意记录下解

    2024年02月02日
    浏览(32)
  • pytorch自定义算子并导出onnx计算图详细代码教程

    解决:     # enable_onnx_checker=False 更改为:     operator_export_type=torch.onnx.OperatorExportTypes.ONNX_ATEN_FALLBACK pytorch自定义算子并导出onnx计算图详细代码教程_operatorexporttypes_蛇皮小娃娃的博客-CSDN博客  

    2024年02月10日
    浏览(43)
  • Pytorch复习笔记--导出Onnx模型为动态输入和静态输入

    目录 1--动态输入和静态输入 2--Pytorch API 3--完整代码演示 4--模型可视化 5--测试动态导出的Onnx模型         当使用 Pytorch 将网络导出为 Onnx 模型格式时,可以导出为动态输入和静态输入两种方式。动态输入即模型输入数据的部分维度是动态的,可以由用户在使用模型时自主设

    2024年01月20日
    浏览(41)
  • 导出LLaMA ChatGlm2等LLM模型为onnx

    通过onnx模型可以在支持onnx推理的推理引擎上进行推理,从而可以将LLM部署在更加广泛的平台上面。此外还可以具有避免pytorch依赖,获得更好的性能等优势。 这篇博客(大模型LLaMa及周边项目(二) - 知乎)进行了llama导出onnx的开创性的工作,但是依赖于侵入式修改transform

    2024年02月13日
    浏览(40)
  • OpenMMlab导出mobilenet-v2的onnx模型并推理

    使用mmpretrain导出mobilenet-v2的onnx模型: 安装有mmdeploy的话可以通过如下方法导出: 通过onnxruntime进行推理: 使用mmdeploy推理: 或者 这里通过trtexec转换onnx文件,LZ的版本是TensorRT-8.2.1.8。 使用mmdeploy推理: 或者

    2024年02月05日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包