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

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

DR_KAN2024-12-19
238
3

引言

征程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。

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

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

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

 

征程5编译

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

 

转换过程中,便会生成编译器提示的报错信息。

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

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

征程6编译

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

 

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

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

 

总结

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

 

 

感知
社区征文征程6技术深度解析
评论2
0/1000
  • su
    Lv.1

    效果咋样呀

    2025-09-02
    0
    0
  • 默认84448
    Lv.1

    请问能提供征程6支持的算子合集吗?

    2025-11-17
    0
    1
    • DR_KAN回复默认84448:

      可以看用户手册哈

      2025-11-18
      0