工具/软件:
尊敬的 TI 专家:
附件是 要测试的模型。
在 SDK-j721s2-09_01_00_06中进行模型转换后、转换后的 bin 模型文件用于验证、结果完全错误。 modified_model 是修改后的模型文件。
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:
尊敬的 TI 专家:
附件是 要测试的模型。
在 SDK-j721s2-09_01_00_06中进行模型转换后、转换后的 bin 模型文件用于验证、结果完全错误。 modified_model 是修改后的模型文件。
尊敬的 Wang:
这是否与之前的 E2E、Jira 或电子邮件申请相关? 如果是、您能否分享一些有关的信息。
此致、
Christina
尊敬的 Christina:
让我为客户填写列表:
卷积 | 详细信息 |
---|---|
频率 | J721S2 (示例) |
SDK 版本 | 9.1. |
TIDL 固件版本 | 9.1. |
TIDL 工具版本 | 9.1. |
问题类别 |
精度问题 |
AI 模型示例 | 在客户原始帖子中 |
编译方法 | |
编译日志 | |
编译工件 | |
推理方法 | |
推理日志 |
|
推理伪影 |
报告的主要问题是精度损失。
我已经在 edgeai tidl 工具10.1.2上尝试了这个模型、并得到了 onnx 的结果:
/cfs-file/__key/communityserver-discussions-components-files/791/modify_5F00_pc_5F00_onnx.npy
和 PC 上8位量化的结果:
/cfs-file/__key/communityserver-discussions-components-files/791/modify_5F00_pc_5F00_8bit.npy
通过比较两个 NPY 文件、直接精度损失很小。
Pending on Customer (待处理)通过后处理验证结果。
此致
Adam
你(们)好
正如我们在本地讨论的、您使用 edgeai tidl 工具10.1.2找到了我的 PC 结果 没错 。
以及 PC 上8位量化的结果:
但使用 RTOS 工具9.1时的结果很差。
我们将尝试 edgeai tidl 工具9.1、看看它是否正常工作、您也可以试用。 我们明天将更新。
此致、
Adam
e2e.ti.com/.../onnxrt_5F00_ep_5F00_no_5F00_post.py
请检查我使用的脚本。 我将输入和后处理修改为在输入文件中读取。
下面是我 添加到模型配置的更改:
"hsh_modify": create_model_config( source=AttrDict( model_url="dummy", infer_shape=True, ), preprocess=AttrDict( resize=256, crop=224, data_layout="NCHW", resize_with_pad=False, reverse_channels=False, ), session=AttrDict( session_name="onnxrt", model_path=os.path.join(models_base_path, "hsh_model_modified.onnx"), input_mean=[123.675, 116.28, 103.53], input_scale=[0.017125, 0.017507, 0.017429], input_optimization=True, ), task_type="classification", extra_info=AttrDict(num_images=numImages, num_classes=1000), ),
此致、
Adam
您好、
还可以上传配置文件以便于重现:
"hsh_modify": create_model_config( source=AttrDict( model_url="dummy", infer_shape=True, ), preprocess=AttrDict( resize=256, crop=224, data_layout="NCHW", resize_with_pad=False, reverse_channels=False, ), session=AttrDict( session_name="onnxrt", model_path=os.path.join(models_base_path, "hsh_model_modified.onnx"), input_mean=[123.675, 116.28, 103.53], input_scale=[0.017125, 0.017507, 0.017429], input_optimization=True, ), task_type="classification", extra_info=AttrDict(num_images=numImages, num_classes=1000), ),
修改了 onnxrt_ep.py 的脚本:
def infer_image(sess, image_files, config): ''' Invoke the runtime session :param sess: Runtime session :param image_files: List of input image filename :param config: Configuration dictionary :return: Input Images :return: Output tensors :return: Total Processing time :return: Subgraphs Processing time :return: Height of input tensor :return: Width of input tensor ''' # Get input details from the session input_details = sess.get_inputs() input_name = input_details[0].name floating_model = input_details[0].type == "tensor(float)" height = input_details[0].shape[2] width = input_details[0].shape[3] channel = input_details[0].shape[1] batch = input_details[0].shape[0] imgs = [] shape = [batch, channel, height, width] input_shape = input_details[0].shape input_data = np.random.random(input_shape).astype(np.float32) * (1 - 0) print(len(input_details)) if len(input_details)>1: print(len(input_details)) input_name2 = input_details[1].name if input_details[1].type == "tensor(float)": input_data2 = np.random.random(input_details[1].shape).astype(np.float32) * (1 - 0) else: input_data2 = np.random.randint(0, 2000, size=input_details[1].shape).astype(np.int32) # Prepare the input data # input_data = np.zeros(shape) # for i in range(batch): # imgs.append( # Image.open(image_files[i]) # .convert("RGB") # .resize((width, height), PIL.Image.LANCZOS) # ) # temp_input_data = np.expand_dims(imgs[i], axis=0) # temp_input_data = np.transpose(temp_input_data, (0, 3, 1, 2)) # input_data[i] = temp_input_data[0] # if floating_model: # input_data = np.float32(input_data) # for mean, scale, ch in zip( # config["session"]["input_mean"], # config["session"]["input_scale"], # range(input_data.shape[1]), # ): # input_data[:, ch, :, :] = (input_data[:, ch, :, :] - mean) * scale # else: # input_data = np.uint8(input_data) # config["session"]["input_mean"] = [0, 0, 0] # config["session"]["input_scale"] = [1, 1, 1] data = np.fromfile("0.bin", dtype=np.uint16).astype(np.float32) raw_vis = data.reshape(1056, 1920) / 4096 print(raw_vis) input_data[0,0,:,:] = raw_vis # Invoke the session start_time = time.time() if len(input_details)>1: print(len(input_details)) output = list(sess.run(None, {input_name: input_data, input_name2: input_data2})) else: output = list(sess.run(None, {input_name: input_data})) stop_time = time.time() infer_time = stop_time - start_time copy_time, sub_graphs_proc_time, totaltime = get_benchmark_output(sess) proc_time = totaltime - copy_time return imgs, output, proc_time, sub_graphs_proc_time, height, width
请使用 /cfs-file/__key/communityserver-discussions-components-files/791/modified_5F00_model.zip
输入文件0.bin 位于 /cfs-file/__key/communityserver-discussions-components-files/791/1425.model.zip 中
此致、
Adam
尊敬的 Wang:
是的、我问的是 hsh_model_modified.onnx、我认为它基于 hsh_model.onnx、以及如何用于创建/训练的任何信息(假设是 Pytorch)。 您是否也在8位的 Onnxruntime 上进行了测试?
感谢您确认 onnxruntime 推理产生了正确的输出。 我想知道 TIDL PC 仿真(在器件上运行之前)是否也为您提供了正确的输出? 根据我的测试、PC 还会由于层信息而显示一些不匹配。
此致、
Christina