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