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.

[参考译文] EDGE-AI-STUDIO:AI 模型用于28P55、但输出不正确

Guru**** 2463330 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1489529/edge-ai-studio-the-ai-model-is-used-for-28p55-but-the-output-is-incorrect

部件号:EDGE-AI-STUDIO

工具/软件:

import torch
import torch.nn as nn
import torch.optim as optim
import onnx
import onnxruntime as ort

torch.manual_seed(42)  
X = torch.linspace(0, 10, 100).reshape(-1, 1) 
y = 2 * X + torch.randn(X.size()) * 0.5  

class LinearRegression(nn.Module):
    def __init__(self):
        super(LinearRegression, self).__init__()
        self.linear = nn.Linear(1, 1)  

    def forward(self, x):
        return self.linear(x)

model = LinearRegression()
criterion = nn.MSELoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)

epochs = 1000
for epoch in range(epochs):
    outputs = model(X)
    loss = criterion(outputs, y)
    
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()
   
    if (epoch+1) % 100 == 0:
        print(f'Epoch [{epoch+1}/{epochs}], Loss: {loss.item():.4f}')

model.eval()

dummy_input = torch.tensor([[3.0]])  

torch.onnx.export(
    model,               
    dummy_input,         
    "linear_model.onnx",
    export_params=True,  
    opset_version=11,    
    input_names=['input'], 
    output_names=['output'],  
    dynamic_axes={       
        'input': {0: 'batch_size'},
        'output': {0: 'batch_size'}
    }
)

我使用 PyTorch 训练了一个线性回归模型(y=2x)、并导出了 onnx 模型。  使用 TVM 工具时、该参数应用于28P55、但在该模型中输入2个时、CCS 的输出与 PyTorch 的结果不一致。  我想问原因是什么?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    28P55是否对 CNN 层有某些要求?如何将简单的 CNN 网络应用到 DSP?  预防措施是什么?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好 Levin

    为延误道歉。

    要确保 NPU 正确实现、请参阅 DPSDK 5.04中发布的应用代码。  

    您是否在代码中同时使用了 mod.a 和 tvmgen_default.h 文件。 这两个文件都是基于 TVM 的编译器的输出。  

    谢谢你

    Amir Hussain

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Amir  

    感谢您的答复。
    我现在想自己修改 CNN 网络模型,但似乎28P55不支持修改后的 CNN 模型,输出结果不正确。
    您能告诉我问题出在哪里吗?

    此致

    Levin

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您的应用程序代码可能需要根据输入/输出类型和形状进行更改。  请查看生成的头文件"tvmgen_default.h"以了解正确的输入和输出类型。

    原始应用程序代码可能使用了 int_8输入和输出。  但修改后的模型可能使用了浮点输入和输出。

    这里也有解释: https://software-dl.ti.com/mctools/nnc/mcu/users_guide/infering.html

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好 Levin

    F28P55可以支持修改后的 CNN 模型。 请访问 tvmgen_default.h 以了解正确的输入/输出类型和形状。

    谢谢你

    Amir Hussain