征程 6 相比征程 5 对算子支持扩展的具体案例讲解

引言

征程 6 相比于征程 5,在整体架构上得到了升级,相对应的,算法工具链的算子支持也得到了扩充,无论是算子支持的数量,还是 BPU 约束条件,征程 6 都有明显的加强,这就使得过去在征程 5 上无法部署的算法得以在征程 6 上成功部署。本文就以双目深度估计中比较经典的 CGI 算法为例,进行征程 5 和征程 6 算法工具链的编译部署对比。

CGI 导出 onnx

CGI 是一种经典的双目深度估计算法,官方 github 地址为:https://github.com/gangweiX/CGI-Stereo
在这里插入图片描述

CGI 提出了上下文与几何融合(CGF)模块,它能使上下文特征与几何特征有效互动,从而大大提高准确性。该算法还提出了一种新的 cost volume,命名为注意力特征量(AFV),用于编码匹配信息和内容信息。这种精确、实时的立体匹配网络 CGI-Stereo 在 KITTI 基准测试中的表现在当时优于所有其它已发布的实时方法,并显示出比其它实时方法更好的泛化能力。是一种非常经典的双目深度网络。

在将项目 clone 到本地后,我们可以编下如下脚本将网络导出为 onnx。

import torch
import onnx
import argparse
from models import 
__models__parser = argparse.ArgumentParser(description='Accurate and Real-Time Stereo Matching via Context and Geometry Interaction (CGI-Stereo)')
parser.add_argument('--model', default='CGI_Stereo', help='select a model structure', choices=
__models__
.keys())
parser.add_argument('--maxdisp', type=int, default=192, help='maximum disparity')
args = parser.parse_args()
model = 
__models__[args.model](args.maxdisp)
input1 = torch.randn(1, 3, 352, 640)
input2 = torch.randn(1, 3, 352, 640)
input_names = ["input1", "input2"]
output_names = ["output1"]
torch.onnx.export(model,(input1, input2),"cgi.onnx",opset_version=11,input_names=input_names,output_names=output_names,
)

这段代码的主要作用是将 CGI 算法导出为 ONNX 格式。具体解释如下:

  1. 导入库:首先,导入了 PyTorch、ONNX、argparse 和一个自定义模块models中的modelstorch用于模型操作,onnx用于模型导出,argparse用于解析命令行参数,models是一个包含模型定义的字典。
  2. 命令行参数解析:通过argparse.ArgumentParser,定义了两个命令行参数:
    1. --model:选择模型的名称,默认是CGI_Stereo
    2. --maxdisp:定义最大视差,默认值是 192,用于设置立体匹配中的最大视差范围。
  3. 模型初始化:根据用户输入的modelmaxdisp参数,从models字典中取出对应的模型构造函数,并用maxdisp参数初始化模型。
  4. 生成输入数据:创建两个随机的 Tensor,分别代表左右图像输入,形状为(1, 3, 352, 640),即批次大小为 1,3 个颜色通道,图像尺寸为 352x640。input_namesoutput_names分别定义了输入和输出张量的名称。
  5. 导出为 ONNX 格式:使用torch.onnx.export将 PyTorch 模型导出为 ONNX 格式。输入是刚刚创建的随机图像数据,输出的 ONNX 文件名是cgi.onnx,并指定了 opset 为 11。input_namesoutput_names确保了输入和输出张量在 ONNX 模型中有明确的名称。

打开导出的 onnx 文件,模型的输入输出信息如下所示。

在这里插入图片描述

征程 5 编译

接下来,我们尝试使用征程 5 工具链编译该模型,使用指令如下。

hb_mapper makertbin --fast-perf --model cgi.onnx --model-type onnx --march bayes

转换过程中,便会生成编译器提示的报错信息。
在这里插入图片描述
在这里插入图片描述

具体来说,就是 Gather 类型的算子,在征程 5 平台上不支持输出的维度超过 4,而这个模型不满足要求,因此无法在征程 5 平台正常编译出来,PTQ 链路的生成物就到 quantized_model.onnx 位置了。

因此,如果想在征程 5 部署这个算法,就意味着需要大改模型。

征程 6 编译

接下来,我们看一下这个 onnx 模型在征程 6 工具链上的表现,编译指令如下。

hb_compile --fast-perf --model cgi.onnx --march nash-m

在这里插入图片描述
在这里插入图片描述

通过编译日志可以看出,这个模型已经编译成功,且两个输入分支自动转换成了 2 组 y/uv 的 uint8 输入。查看 model_output 文件夹,也是要啥有啥,文件齐全~
在这里插入图片描述

通过 hrt_model_exec 进行板端性能评测,该模型的 BPU 部分推理耗时为 17ms 左右,说明也是可以成功在板端进行推理的,之后就可以继续进行针对这个模型的性能优化和精度优化工作了~

总结

相比于征程 5,征程 6 支持更多算子的高精度配置,如 int16,fp16 等,支持更多的算子运行在 BPU,也对 BPU 约束放宽了条件,大部分算子约束条件减弱甚至没有约束。因此,一些在征程 5 计算平台上难以部署的模型,在征程 6 上往往能有比较好的表现。本文以 CGI 为例进行了说明,更多的算法模型大家可以自行探索~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/15641.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯C语言组:博弈问题

概述 在编程的世界里,博弈问题就像是一场智力的“斗地主”,双方(或者多方)使出浑身解数,只为赢得最后的胜利。而蓝桥杯C语言比赛中的博弈问题,更是让无数参赛者又爱又恨的存在。它们就像是隐藏在代码森林中…

BS架构(笔记整理)

楔子.基本概念 1.在网络架构中: 服务器通常是集中式计算资源,负责处理和存储数据;客户机是请求这些服务的终端设备,可能是个人电脑或移动设备;浏览器则是客户机上用来与服务器交互的工具,负责展示网页内容…

【动态规划篇】:动态规划解决路径难题--思路,技巧与实例

✨感谢您阅读本篇文章,文章内容是个人学习笔记的整理,如果哪里有误的话还请您指正噢✨ ✨ 个人主页:余辉zmh–CSDN博客 ✨ 文章所属专栏:动态规划篇–CSDN博客 文章目录 一.动态规划中的路径问题1.核心思路2.注意事项 二.例题讲解…

【Linux】深入理解linux权限

🌟🌟作者主页:ephemerals__ 🌟🌟所属专栏:Linux 目录 前言 一、权限是什么 二、用户和身份角色 三、文件属性 1. 文件属性表示 2. 文件类型 3. 文件的权限属性 四、修改文件的权限属性和角色 1. …

嵌入式linux系统中VIM编辑工具用法与GCC参数详解

大家好,今天主要给大家分享一下,如何使用linux系统中的VIM编辑工具和GCC的参数详解。 第一:安装VIM 命令:sudo apt get install vim 第二:工作模式 普通模式:打开一个文件时的默认模式,按ESC返回普通模式 插入模式:i/o/a进入插入模式,不同在于在光标前后插入 可视…

【前端开发】HTML+CSS+JavaScript前端三剑客的基础知识体系了解

前言 🌟🌟本期讲解关于HTMLCSSJavaScript的基础知识,小编带领大家简单过一遍~~~ 🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客 🔥 你的点赞就是小编不断更新的最大动力 …

蓝桥杯---数青蛙(leetcode第1419题)

文章目录 1.题目重述2.例子分析3.思路分析4.思路总结5.代码解释 1.题目重述 这个题目算是模拟这个专题里面的一类比较难的题目了,他主要是使用crock这个单词作为一个整体,让我们确定:给你一个字符串,至少需要多少个青蛙进行完成鸣…

WidowX-250s 机械臂学习记录

官网教程:Python Demos — Interbotix X-Series Arms Documentation 系统:Ubuntu20.04,ROS1 相关的硬件编译配置跳过 Python Demos 这些演示展示了使用 Interbotix Python Arm 模块的各种方法(点击链接查看完整的代码文档&…

【CubeMX-HAL库】STM32F407—无刷电机学习笔记

目录 简介: 学习资料: 跳转目录: 一、工程创建 二、板载LED 三、用户按键 四、蜂鸣器 1.完整IO控制代码 五、TFT彩屏驱动 六、ADC多通道 1.通道确认 2.CubeMX配置 ①开启对应的ADC通道 ②选择规则组通道 ③开启DMA ④开启ADC…

集成右键的好用软件,支持多线程操作!

今天给大家分享一个超级实用的小工具,真的能帮上大忙呢!这个软件是吾爱大神无知灰灰精心制作的,简直就是图片转换界的“小能手”。 它能一键把webp格式的图片转换成png格式,而且速度超快,完全不输那些付费的软件&#…

CSDN 博客之星 2024:肖哥弹架构的社区耕耘总结

#博客之星2024年度总评选—主题文章创作# CSDN 博客之星 2024:肖哥弹架构的社区耕耘总结 肖哥弹架构 是一位专注于技术分享和社区建设的博客作者。今年,我荣幸地再次入选CSDN博客之星TOP300,这不仅是对我过去努力的认可,更是对未…

【分布式理论7】分布式调用之:服务间的(RPC)远程调用

文章目录 一、RPC 调用过程二、RPC 动态代理:屏蔽远程通讯细节1. 动态代理示例2. 如何将动态代理应用于 RPC 三、RPC序列化与协议编码1. RPC 序列化2. RPC 协议编码2.1. 协议编码的作用2.2. RPC 协议消息组成 四、RPC 网络传输1. 网络传输流程2. 关键优化点 一、RPC…

综合评价 | 基于随机变异系数-TOPSIS组合法的综合评价模型(Matlab)

基于随机变异系数-TOPSIS组合法的综合评价模型 代码获取私信回复:综合评价 | 基于随机变异系数-TOPSIS组合法的综合评价模型(Matlab) 一、引言 1.1、研究背景与意义 在现代社会,随着信息量的不断增加和数据复杂性的提升&#…

采用分步式无线控制架构实现水池液位自动化管理

以下是基于巨控GRM241Q-4D4I4QHE模块的完整技术方案,采用分步式无线控制架构实现水池液位自动化管理: 一、系统架构设计 硬件部署 山顶单元 GRM241Q模块(带4G功能) 液位计(4-20mA) 功能:实时采…

Vue设计模式到底多少种?

Vue设计模式到底多少种? 很多同学问,Vue到底有多少种设计模式??各个模式到底是什么意思??又各自适合什么场景?? 这里我给大家直接说下,Vue的设计模式没有一个固定的数值…

[LeetCode] day19 454. 四数相加 II

题目链接 题目描述 给你四个整数数组 nums1、nums2、nums3 和 nums4 &#xff0c;数组长度都是 n &#xff0c;请你计算有多少个元组 (i, j, k, l) 能满足&#xff1a; 0 < i, j, k, l < n nums1[i] nums2[j] nums3[k] nums4[l] 0 示例 1&#xff1a; 输入&…

查看二进制程序内的 .interp 段

synopsis 可以使用 readelf &#xff0c;objdump&#xff0c;hexdump等工具查看 二进制程序内的.interp段信息。 1. 使用readelf查看.interp段 readelf 是一个查看ELF&#xff08;Executable and Linkable Format&#xff09;文件信息的工具&#xff0c;特别适合查看ELF头和…

【时时三省】(C语言基础)基础习题1

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 1.什么是程序&#xff1f;什么是程序设计 程序是为实现特定目标或解决特定问题&#xff0c;用计算机能理解和执行的语言编写的一系列指令的集合。 程序设计是问题分析&#xff0c;设计算法…

食品饮料生产瓶颈?富唯智能协作机器人来 “破壁”

在食品和饮料行业的发展进程中&#xff0c;诸多生产瓶颈如重复性劳动负担、复杂环境作业难题、季节性产能波动等&#xff0c;长期制约着企业的高效运营与进一步发展。如今&#xff0c;富唯智能协作机器人的出现&#xff0c;为这些难题提供了完美的解决方案&#xff0c;正逐步改…

[创业之路-289]:《产品开发管理-方法.流程.工具 》-15- 需求管理 - 第1步:原始需求收集

概述&#xff1a; 需求收集是需求管理的第一步&#xff0c;也是产品开发、项目管理或软件设计中的关键步骤。原始需求收集主要是指从各种来源获取关于产品或服务的初步需求和期望。 以下是对需求管理中的原始需求收集的详细分析&#xff1a; 1、原始需求收集的目的 原始需求…