alibaba / MNN

MNN is a blazing fast, lightweight deep learning framework, battle-tested by business-critical use cases in Alibaba
http://www.mnn.zone/
8.45k stars 1.64k forks source link

onnx和mnn推理结果不一致,使用onnxruntime推理onnx结果是正常的,但使用mnn就不正常了 #2825

Open lewis-v opened 2 months ago

lewis-v commented 2 months ago

平台(如果交叉编译请再附上交叉编译目标平台):

mac

Github版本:

Github Version:

mnn_2.8.1_macos_x64_arm82_cpu_opencl_metal.zip

问题

onnx和mnn推理结果不一致,直接使用onnxruntime推理onnx是可以输出正常pcm,但是mnn输出就不正常

模型

https://newcoreresource.oss-cn-shenzhen.aliyuncs.com/model/TEST/mnn_model.zip

推理大致代码

const std::string model_file = "t2s_all.mnn";
const std::vector<std::string> input_names{"x", "t", "language", "bert_0", "bert_1", "bert_2", "sid"};
const std::vector<std::string> output_names{"o"};
MNN::Express::Module::Config mdconfig;
_all_models.reset(MNN::Express::Module::load(input_names, output_names, model_file.c_str(), &mdconfig));

// hello world
std::vector<int> phone = {0, 38, 0, 12, 0, 59, 0, 69, 0, 97, 0, 32, 0, 59, 0, 23, 0};
std::vector<int> tone = {0, 8, 0, 9, 0, 8, 0, 10, 0, 8, 0, 10, 0, 8, 0, 8, 0};
std::vector<int> language_ids = {0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0};

std::vector<MNN::Express::VARP> inputs(7);
inputs[0] = MNN::Express::_Input({1, static_cast<int>(phone.size())}, MNN::Express::NCHW,
                                 halide_type_of<int>());
inputs[1] = MNN::Express::_Input({1, static_cast<int>(tone.size())}, MNN::Express::NCHW,
                                 halide_type_of<int>());
inputs[2] = MNN::Express::_Input({1, static_cast<int>(language_ids.size())}, MNN::Express::NCHW,
                                 halide_type_of<int>());
inputs[3] = MNN::Express::_Input({static_cast<int>(phone.size()), 1024}, MNN::Express::NCHW,
                                 halide_type_of<float>());
inputs[4] = MNN::Express::_Input({static_cast<int>(phone.size()), 1024}, MNN::Express::NCHW,
                                 halide_type_of<float>());
inputs[5] = MNN::Express::_Input({static_cast<int>(phone.size()), 1024}, MNN::Express::NCHW,
                                 halide_type_of<float>());
inputs[6] = MNN::Express::_Input({1}, MNN::Express::NCHW,
                                 halide_type_of<int>());
//        "x", "t", "language", "bert_0", "bert_1", "bert_2", "sid"

memcpy(inputs[0]->writeMap<int>(), phone.data(), phone.size() * sizeof(int));
memcpy(inputs[1]->writeMap<int>(), tone.data(), tone.size() * sizeof(int));
memcpy(inputs[2]->writeMap<int>(), language_ids.data(), language_ids.size() * sizeof(int));
std::vector<int> sid = {0};
memcpy(inputs[6]->writeMap<int>(), sid.data(), sid.size() * sizeof(int));
std::vector<float> bert_0(phone.size() * 1024, 0.0f);
std::vector<float> bert_1(phone.size() * 1024, 0.0f);
std::vector<float> bert_2(phone.size() * 1024, 0.0f);
memcpy(inputs[3]->writeMap<float>(), bert_0.data(), bert_0.size() * sizeof(float));
memcpy(inputs[4]->writeMap<float>(), bert_1.data(), bert_1.size() * sizeof(float));
memcpy(inputs[5]->writeMap<float>(), bert_2.data(), bert_2.size() * sizeof(float));

std::vector<MNN::Express::VARP> outputs = _all_models->onForward(inputs);
auto audio_ptr = outputs[0]->readMap<float>();
auto audio_shape = outputs[0]->getInfo()->dim;
int elementCount = 1;
for (auto dim: audio_shape) {
    elementCount *= dim;
}
std::vector<float> output_data(audio_ptr, audio_ptr + elementCount);

// 44100的pcm
auto save_result = save_audio_pcm(output_data,
                                          "test_out14.pcm"
                                           );
lewis-v commented 2 months ago

testMNNFromOnnx.py的结果

Dir exist onnx/test.onnx inputVar.name:t shapes:[1, 17] tensor(int64) inputVar.name:language shapes:[1, 17] tensor(int64) inputVar.name:x shapes:[1, 17] tensor(int64) inputVar.name:sid shapes:[1] tensor(int64) inputVar.name:bert_0 shapes:[17, 1024] tensor(float) inputVar.name:bert_1 shapes:[17, 1024] tensor(float) inputVar.name:bert_2 shapes:[17, 1024] tensor(float) ['o'] inputs: x onnx/ t onnx/ language onnx/ sid onnx/ bert_0 onnx/ bert_1 onnx/ bert_2 onnx/ outputs: onnx/o.txt (1, 1, 29696) onnx/ hw.cpufamily: 1598941843 , size = 4 The device support i8sdot:0, support fp16:0, support i8mm: 0 Start to Convert Other Model Format To MNN Model..., target version: 2.8 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:46: ONNX Model ir version: 8 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:47: ONNX Model opset version: 16 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /enc_p/encoder/attn_layers.0/Pad_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /enc_p/encoder/attn_layers.0/Pad_5_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /enc_p/encoder/attn_layers.0/Pad_1_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /enc_p/encoder/attn_layers.0/Pad_2_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /enc_p/encoder/attn_layers.0/Pad_3_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /enc_p/encoder/attn_layers.0/Pad_4_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /enc_p/encoder/ffn_layers.0/Pad_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /enc_p/encoder/ffn_layers.0/Pad_1_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /enc_p/encoder/attn_layers.1/Pad_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /enc_p/encoder/attn_layers.1/Pad_5_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /enc_p/encoder/attn_layers.1/Pad_1_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /enc_p/encoder/attn_layers.1/Pad_2_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /enc_p/encoder/attn_layers.1/Pad_3_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /enc_p/encoder/attn_layers.1/Pad_4_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /enc_p/encoder/ffn_layers.1/Pad_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /enc_p/encoder/ffn_layers.1/Pad_1_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /enc_p/encoder/attn_layers.2/Pad_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /enc_p/encoder/attn_layers.2/Pad_5_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /enc_p/encoder/attn_layers.2/Pad_1_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /enc_p/encoder/attn_layers.2/Pad_2_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /enc_p/encoder/attn_layers.2/Pad_3_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /enc_p/encoder/attn_layers.2/Pad_4_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /enc_p/encoder/ffn_layers.2/Pad_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /enc_p/encoder/ffn_layers.2/Pad_1_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /enc_p/encoder/attn_layers.3/Pad_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /enc_p/encoder/attn_layers.3/Pad_5_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /enc_p/encoder/attn_layers.3/Pad_1_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /enc_p/encoder/attn_layers.3/Pad_2_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /enc_p/encoder/attn_layers.3/Pad_3_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /enc_p/encoder/attn_layers.3/Pad_4_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /enc_p/encoder/ffn_layers.3/Pad_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /enc_p/encoder/ffn_layers.3/Pad_1_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /enc_p/encoder/attn_layers.4/Pad_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /enc_p/encoder/attn_layers.4/Pad_5_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /enc_p/encoder/attn_layers.4/Pad_1_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /enc_p/encoder/attn_layers.4/Pad_2_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /enc_p/encoder/attn_layers.4/Pad_3_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /enc_p/encoder/attn_layers.4/Pad_4_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /enc_p/encoder/ffn_layers.4/Pad_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /enc_p/encoder/ffn_layers.4/Pad_1_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /enc_p/encoder/attn_layers.5/Pad_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /enc_p/encoder/attn_layers.5/Pad_5_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /enc_p/encoder/attn_layers.5/Pad_1_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /enc_p/encoder/attn_layers.5/Pad_2_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /enc_p/encoder/attn_layers.5/Pad_3_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /enc_p/encoder/attn_layers.5/Pad_4_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /enc_p/encoder/ffn_layers.5/Pad_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /enc_p/encoder/ffn_layers.5/Pad_1_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /sdp/flows.7/Pad_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /sdp/flows.5/Pad_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /sdp/flows.3/Pad_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /Clip_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /Pad_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.6/enc/attn_layers.0/Pad_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.6/enc/attn_layers.0/Pad_5_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.6/enc/attn_layers.0/Pad_1_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.6/enc/attn_layers.0/Pad_2_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.6/enc/attn_layers.0/Pad_3_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.6/enc/attn_layers.0/Pad_4_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.6/enc/ffn_layers.0/Pad_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.6/enc/ffn_layers.0/Pad_1_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.6/enc/attn_layers.1/Pad_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.6/enc/attn_layers.1/Pad_5_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.6/enc/attn_layers.1/Pad_1_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.6/enc/attn_layers.1/Pad_2_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.6/enc/attn_layers.1/Pad_3_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.6/enc/attn_layers.1/Pad_4_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.6/enc/ffn_layers.1/Pad_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.6/enc/ffn_layers.1/Pad_1_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.6/enc/attn_layers.2/Pad_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.6/enc/attn_layers.2/Pad_5_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.6/enc/attn_layers.2/Pad_1_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.6/enc/attn_layers.2/Pad_2_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.6/enc/attn_layers.2/Pad_3_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.6/enc/attn_layers.2/Pad_4_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.6/enc/ffn_layers.2/Pad_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.6/enc/ffn_layers.2/Pad_1_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.6/enc/attn_layers.3/Pad_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.6/enc/attn_layers.3/Pad_5_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.6/enc/attn_layers.3/Pad_1_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.6/enc/attn_layers.3/Pad_2_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.6/enc/attn_layers.3/Pad_3_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.6/enc/attn_layers.3/Pad_4_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.6/enc/ffn_layers.3/Pad_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.6/enc/ffn_layers.3/Pad_1_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.4/enc/attn_layers.0/Pad_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.4/enc/attn_layers.0/Pad_5_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.4/enc/attn_layers.0/Pad_1_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.4/enc/attn_layers.0/Pad_2_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.4/enc/attn_layers.0/Pad_3_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.4/enc/attn_layers.0/Pad_4_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.4/enc/ffn_layers.0/Pad_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.4/enc/ffn_layers.0/Pad_1_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.4/enc/attn_layers.1/Pad_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.4/enc/attn_layers.1/Pad_5_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.4/enc/attn_layers.1/Pad_1_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.4/enc/attn_layers.1/Pad_2_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.4/enc/attn_layers.1/Pad_3_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.4/enc/attn_layers.1/Pad_4_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.4/enc/ffn_layers.1/Pad_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.4/enc/ffn_layers.1/Pad_1_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.4/enc/attn_layers.2/Pad_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.4/enc/attn_layers.2/Pad_5_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.4/enc/attn_layers.2/Pad_1_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.4/enc/attn_layers.2/Pad_2_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.4/enc/attn_layers.2/Pad_3_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.4/enc/attn_layers.2/Pad_4_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.4/enc/ffn_layers.2/Pad_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.4/enc/ffn_layers.2/Pad_1_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.4/enc/attn_layers.3/Pad_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.4/enc/attn_layers.3/Pad_5_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.4/enc/attn_layers.3/Pad_1_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.4/enc/attn_layers.3/Pad_2_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.4/enc/attn_layers.3/Pad_3_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.4/enc/attn_layers.3/Pad_4_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.4/enc/ffn_layers.3/Pad_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.4/enc/ffn_layers.3/Pad_1_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.2/enc/attn_layers.0/Pad_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.2/enc/attn_layers.0/Pad_5_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.2/enc/attn_layers.0/Pad_1_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.2/enc/attn_layers.0/Pad_2_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.2/enc/attn_layers.0/Pad_3_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.2/enc/attn_layers.0/Pad_4_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.2/enc/ffn_layers.0/Pad_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.2/enc/ffn_layers.0/Pad_1_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.2/enc/attn_layers.1/Pad_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.2/enc/attn_layers.1/Pad_5_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.2/enc/attn_layers.1/Pad_1_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.2/enc/attn_layers.1/Pad_2_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.2/enc/attn_layers.1/Pad_3_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.2/enc/attn_layers.1/Pad_4_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.2/enc/ffn_layers.1/Pad_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.2/enc/ffn_layers.1/Pad_1_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.2/enc/attn_layers.2/Pad_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.2/enc/attn_layers.2/Pad_5_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.2/enc/attn_layers.2/Pad_1_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.2/enc/attn_layers.2/Pad_2_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.2/enc/attn_layers.2/Pad_3_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.2/enc/attn_layers.2/Pad_4_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.2/enc/ffn_layers.2/Pad_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.2/enc/ffn_layers.2/Pad_1_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.2/enc/attn_layers.3/Pad_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.2/enc/attn_layers.3/Pad_5_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.2/enc/attn_layers.3/Pad_1_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.2/enc/attn_layers.3/Pad_2_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.2/enc/attn_layers.3/Pad_3_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.2/enc/attn_layers.3/Pad_4_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.2/enc/ffn_layers.3/Pad_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.2/enc/ffn_layers.3/Pad_1_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.0/enc/attn_layers.0/Pad_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.0/enc/attn_layers.0/Pad_5_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.0/enc/attn_layers.0/Pad_1_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.0/enc/attn_layers.0/Pad_2_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.0/enc/attn_layers.0/Pad_3_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.0/enc/attn_layers.0/Pad_4_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.0/enc/ffn_layers.0/Pad_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.0/enc/ffn_layers.0/Pad_1_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.0/enc/attn_layers.1/Pad_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.0/enc/attn_layers.1/Pad_5_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.0/enc/attn_layers.1/Pad_1_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.0/enc/attn_layers.1/Pad_2_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.0/enc/attn_layers.1/Pad_3_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.0/enc/attn_layers.1/Pad_4_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.0/enc/ffn_layers.1/Pad_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.0/enc/ffn_layers.1/Pad_1_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.0/enc/attn_layers.2/Pad_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.0/enc/attn_layers.2/Pad_5_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.0/enc/attn_layers.2/Pad_1_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.0/enc/attn_layers.2/Pad_2_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.0/enc/attn_layers.2/Pad_3_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.0/enc/attn_layers.2/Pad_4_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.0/enc/ffn_layers.2/Pad_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.0/enc/ffn_layers.2/Pad_1_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.0/enc/attn_layers.3/Pad_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.0/enc/attn_layers.3/Pad_5_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.0/enc/attn_layers.3/Pad_1_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.0/enc/attn_layers.3/Pad_2_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.0/enc/attn_layers.3/Pad_3_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.0/enc/attn_layers.3/Pad_4_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.0/enc/ffn_layers.3/Pad_output_0 has empty input, the index is 2 [12:26:43] /Users/lewisywliu/Desktop/code/MNN/tools/converter/source/onnx/onnxConverter.cpp:142: Check it out ==> /flow/flows.0/enc/ffn_layers.3/Pad_1_output_0 has empty input, the index is 2 Start to Optimize the MNN Net... inputTensors : [ x, t, language, bert_0, bert_1, bert_2, sid, ] outputTensors: [ o, ] The model has subgraphs, please use MNN::Express::Module to run it Converted Success! Check convert result by onnx, thredhold is 0.01

修改的测试代码

141         for inputVar in ort_session.get_inputs():
142             inp = {}
143             inp['name'] = inputVar.name
144             shapes = inputVar.shape
145             # for i in range(0, len(shapes)):
146             #     if type(shapes[i]) == str:
147             #         shapes[i] = 1
148             if inputVar.name in ["t", "language", "x"]:
149                 shapes = [1, 17]
150                 if inputVar.name == "x":
151                     inputs[inputVar.name] = torch.LongTensor([0, 38, 0, 12, 0, 59, 0, 69, 0, 97, 0, 32, 0, 59, 0, 23, 0]).unsqueeze(0).numpy()
152                 elif inputVar.name == "t":
153                     inputs[inputVar.name] =torch.LongTensor([ 0, 8, 0, 9, 0, 8, 0, 10, 0, 8, 0, 10, 0, 8, 0, 8, 0]).unsqueeze(0).numpy()
154                 else:
155                     inputs[inputVar.name] =torch.LongTensor([ 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0]).unsqueeze(0).numpy()
156             elif inputVar.name in ["sid"]:
157                 shapes = [1]
158                 inputs[inputVar.name] = torch.LongTensor([0]).numpy()
159             else:
160                 shapes = [17, 1024]
161                 inputs[inputVar.name] = torch.zeros( (17,1024) ).float().numpy()
162             print(f"inputVar.name:{inputVar.name} shapes:{shapes} ")
163             inp['shape'] = shapes
164             print(inputVar.type)
165             # if inputVar.type.find("int64") >= 0:
166             #     inputs[inputVar.name] = np.random.uniform(0, 12, shapes).astype(np.int64)
167             # elif inputVar.type.find("int32") >=0:
168             #     inputs[inputVar.name] = np.random.uniform(0, 12, shapes).astype(np.int32)
169             # elif inputVar.type.find('bool') >=0:
170             #     inputs[inputVar.name] = np.random.uniform(0, 1, shapes).astype(np.bool_)
171             # else:
172             #     # Float
173             #     inputs[inputVar.name] = np.random.uniform(0.1, 1.2, shapes).astype(np.float32)
174             jsonDict['inputs'].append(inp)
jxt1234 commented 2 months ago

问题已经复现,定位中

jxt1234 commented 2 months ago

模型中有 random 算子,结果是不能对齐的

lewis-v commented 2 months ago

模型中有随机算子,结果是不能对齐的

这个有什么修改建议?

lewis-v commented 2 months ago

模型中有 random 算子,结果是不能对齐的

onnx模型推理出来的pcm是一段hello world语音,但mnn推理出来的并不能正常发音

jxt1234 commented 2 months ago

save_audio_pcm 的代码是? 或者完整可跑的工程可以发一下?

lewis-v commented 2 months ago
    bool save_audio_pcm(const std::vector<float> &audio, const std::string &filePath) {
        std::ofstream file(filePath, std::ios::binary);
        if (!file.is_open()) {
            // 文件打开失败
            return false;
        }

        for (float sample: audio) {
            if (sample > 1 || sample < -1) {
                std::cout << "sample " << sample << std::endl;
            }
            file.write(reinterpret_cast<const char *>(&sample), sizeof(sample));
        }

        file.close();
        return true;
    }

这个是save_audio_pcm的代码只是普通的写入,可以通过python将他转成wav

import numpy as np
import soundfile as sf
pcm_data = np.fromfile('xxx.pcm', dtype=np.float32)
sf.write('../out/output14.wav', pcm_data, 44100)
lewis-v commented 2 months ago

save_audio_pcm 的代码是? 或者完整可跑的工程可以发一下?

这里是否有后继的进展或还需要提供什么吗?

jxt1234 commented 2 months ago

对应的 onnxruntime 推理的代码是?

jxt1234 commented 2 months ago

要不你更新 mnn 再测试下吧,用你的测试代码生成的 o.txt (onnxruntime运行结果) ,转成 wav 。和 mnn 运行出来的结果貌似差不多

lewis-v commented 2 months ago

code.zip

这个是推理的代码,USE_MNN标记控制使用onnx还是mnn,调用入口方法

auto mmm = sl_t2s::t2s_model_test();
mmm.init("onnx or mnn path");
mmm.exe_onnx("output pcm path");

最终输出结果pcm可使用python转成wav来播放

import numpy as np
import soundfile as sf
pcm_data = np.fromfile('xxx.pcm', dtype=np.float32)
sf.write('../out/xxx.wav', pcm_data, 44100)

out.zip 这个是我这边输出的pcm和wav,onnx输出的是正常的hello world

目前简单测试,mnn会比onnx快1.5倍,所以还是希望可以用上mnn。

lewis-v commented 2 months ago

我使用2.8.4的tag,推理的结果就是正常的,使用2.8.1的不行。

jxt1234 commented 2 months ago

那就更新到 2.8.4 以后吧,可能是之前的bug修正了