运行pth推理,输出结果正确。
pth->onnx,成功,同时运行onnx推理,输出结果也正确。
onnx->om,成功,但是运行om推理,其输入与onnx输入完全一致,但是输出结果错误。
我认为既然模型转换成功了,相同的输入,必然应该有相同的输出。
(1)onnx与om关键打印信息:
print("====== ONNX 模型实际输入参数1 ======")
print("input_data_nbyte:", input_data.nbytes) # 4915200
print("input_data_shape:", input_data.shape[:4]) # torch.Size([1, 3, 640, 640])即 [B, C, H, W]
print("input_data_dtype:", input_data.dtype) # torch.float32
print("input_data_numpy:", input_data.numpy())
print("====== ONNX 模型实际输入参数2 ======")
print("orig_size_nbytes:",orig_size.nbytes) # 16
print("orig_size_shape:",orig_size.shape[:4]) # torch.Size([1, 2])
print("orig_size_dtype:",orig_size.dtype) # torch.int64
print("orig_size_numpy:",orig_size.numpy()) # [[640 640]]
print("====================================")
print("====== OM 模型实际输入信息1 ======")
print("input_data_nbyte:", img_array.nbytes) # 4915200
print("input_data_shape:", img_array.shape) # (1, 3, 640, 640)
print("input_data_dtype:", img_array.dtype) # float32
print("input_data_numpy:",img_array)
print("====== OM 模型实际输入信息2 ======")
print("orig_size_nbytes:",size_tensor.nbytes) # 16
print("orig_size_shape:",size_tensor.shape) # (1, 2)
print("orig_size_dtype:",size_tensor.dtype) # int64
print("orig_size_numpy:",size_tensor) # [[640 640]]
(2)平台版本:
# cat /usr/local/Ascend/ascend-toolkit/latest/aarch64-linux/ascend_toolkit_install.info
package_name=Ascend-cann-toolkit
version=8.1.RC1
(3)atc转换过程:
export bs=1 && export chip_name=310B1
atc --framework=5 \
--model=../model/deimv2_dinov3_s_coco.onnx \
--output=../model/deimv2_dinov3_s_coco_bs${bs} \
--input_format=NCHW \
--input_shape="images:${bs},3,640,640;orig_target_sizes:${bs},2" \
--soc_version=Ascend${chip_name} \
--log=error >log_error.txt
(3)附件:
附件1:export_onnx.py 由pth导出onnx
附件2:torch_inf.py 由pytorch推理
附件3:onnx_inf.py 由onnx推理
附件4:om_infer_image.py 由om推理
附件5:onnx图形化输入:

pth->onnx,成功,同时运行onnx推理,输出结果也正确。
onnx->om,成功,但是运行om推理,其输入与onnx输入完全一致,但是输出结果错误。
我认为既然模型转换成功了,相同的输入,必然应该有相同的输出。
(1)onnx与om关键打印信息:
print("====== ONNX 模型实际输入参数1 ======")
print("input_data_nbyte:", input_data.nbytes) # 4915200
print("input_data_shape:", input_data.shape[:4]) # torch.Size([1, 3, 640, 640])即 [B, C, H, W]
print("input_data_dtype:", input_data.dtype) # torch.float32
print("input_data_numpy:", input_data.numpy())
print("====== ONNX 模型实际输入参数2 ======")
print("orig_size_nbytes:",orig_size.nbytes) # 16
print("orig_size_shape:",orig_size.shape[:4]) # torch.Size([1, 2])
print("orig_size_dtype:",orig_size.dtype) # torch.int64
print("orig_size_numpy:",orig_size.numpy()) # [[640 640]]
print("====================================")
print("====== OM 模型实际输入信息1 ======")
print("input_data_nbyte:", img_array.nbytes) # 4915200
print("input_data_shape:", img_array.shape) # (1, 3, 640, 640)
print("input_data_dtype:", img_array.dtype) # float32
print("input_data_numpy:",img_array)
print("====== OM 模型实际输入信息2 ======")
print("orig_size_nbytes:",size_tensor.nbytes) # 16
print("orig_size_shape:",size_tensor.shape) # (1, 2)
print("orig_size_dtype:",size_tensor.dtype) # int64
print("orig_size_numpy:",size_tensor) # [[640 640]]
(2)平台版本:
# cat /usr/local/Ascend/ascend-toolkit/latest/aarch64-linux/ascend_toolkit_install.info
package_name=Ascend-cann-toolkit
version=8.1.RC1
(3)atc转换过程:
export bs=1 && export chip_name=310B1
atc --framework=5 \
--model=../model/deimv2_dinov3_s_coco.onnx \
--output=../model/deimv2_dinov3_s_coco_bs${bs} \
--input_format=NCHW \
--input_shape="images:${bs},3,640,640;orig_target_sizes:${bs},2" \
--soc_version=Ascend${chip_name} \
--log=error >log_error.txt
(3)附件:
附件1:export_onnx.py 由pth导出onnx
附件2:torch_inf.py 由pytorch推理
附件3:onnx_inf.py 由onnx推理
附件4:om_infer_image.py 由om推理
附件5:onnx图形化输入: