1. 芯片型号:J32. 天工开物开发包 OpenExplorer 版本:horizon_xj3_open_explorer_v1.16.4-py38_202403193. 问题定位:模型转换后bin文件板端部署时,输入size问题4. 问题具体描述:模型转换后的两个文件已在附件提供,分别是bin文件和量化后的quantized_model的onnx文件原始onnx可视化如下图:quantized_model的onnx文件可视化如下图:模型转换的配置文件如下:我们在板端部署时,通过打印其输入的字节数,发现其输入size 存在问题(模型输入是1*3*1024*512,但打印的值8388608÷1024÷512÷4=4,为啥不是通道数3?),具体代码和结果如下所示:
你好,几个问题对齐一下哈:J3版本的工具链已经升级到了V1.16.6了,你用的还是V1.16.4。考虑一下版本升级哈,有的问题随版本迭代已经修复了的,在旧版本中查问题意义不大,研发也支持上也不会基于老的版本再修复。模型输出输出更具shape信息,量化模型相对于原始模型有的是有padding存在的。你看模型的输入输出是可以借助hb_onnx_info 以及hrt_model_exec model_info来查看一下。原始的浮点模型也请一并附加上来呢!
感谢您的指导和建议,我先回复您的三个问题:1. 后续我再对齐试试。2. hrt_model_exec model_info bin文件,输入结果如下图:其中valid shape是(1,512,1024,3,) aligned shape是(1,512,1024,4, )这是否有问题?是否会影响模型的推理结果?3.原始浮点模型的onnx,已经通过帖子更新上传期待您的回复和指导
下面这里有问题,你最初的疑问就是padding引起的。申请推理内存时按aligned shape申请,填充数据时按valid shape填充,多出来的一个channel,不适用就OK了,其中的数值无需关心。另外,我看你是图像类型的输入,input_type_rt建议配置成nv12吧,NV12的带宽需求比RGB少了一半呢,部署性能更高。
谢谢您的回复,那我明白了,打印出的那个数值是按照padding后的size申请的内存,但实际上只用valid shape的内存,多出来的不用管就可以了,推理结果是正常的,这样理解正确吗?另外,我们模型训练的时候是bgr,模型转换的时候直接指定输入类型是nv12,部署时推理是OK的?
对的!实际上只用valid shape的内存,多出来的不用管就可以了,推理结果是正常的,理解没问题。模型转换的时候直接指定输入类型是nv12,模型转换时会自动插入NV12->BGR的转换节点的,推理时输入NV12的数据就可以了,而且NV12一般就是板卡的PYM等IP的处理结果。
好的,谢谢。那我过会再转换时换成NV12的输入另外我想询问下,我看输出类型是tensor type:HB DNN TENSOR TYPE S64,这个字节就要占8位,那我如何在配置文件设置,可以让他的输出类型是tensor type:HB DNN TENSOR TYPE S8?(因为我看到示例模型的输出类型是tensor type:HB DNN TENSOR TYPE S8)
先这样用吧,目前这个没法,你已经在yaml中配置了remove_node_type: cast了,最后的cast 本来就就是int64 -> int32的,你移除了就变成了int64了,你这个模型有后处理部分,其实从HzDequantize之后的节点都可以移除的,但是那样的话你就要手动写后处理逻辑了,包括resize 和 argmax的C++代码,那样更麻烦,而且很容易出错