工具/软件:
尊敬的 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