From 28a19dbc4e85d3b8a4ec2ef7483bba64d422b43f Mon Sep 17 00:00:00 2001
From: aky15 <ankeyu.aky@11.17.44.249>
Date: 星期三, 12 四月 2023 18:03:06 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/main' into dev_aky
---
funasr/runtime/onnxruntime/src/paraformer_onnx.cpp | 89 ++++++++++++++++++++++++++++++++++++--------
1 files changed, 72 insertions(+), 17 deletions(-)
diff --git a/funasr/runtime/onnxruntime/src/paraformer_onnx.cpp b/funasr/runtime/onnxruntime/src/paraformer_onnx.cpp
index 46b5211..678cdf6 100644
--- a/funasr/runtime/onnxruntime/src/paraformer_onnx.cpp
+++ b/funasr/runtime/onnxruntime/src/paraformer_onnx.cpp
@@ -3,14 +3,28 @@
using namespace std;
using namespace paraformer;
-ModelImp::ModelImp(const char* path,int nNumThread)
+ModelImp::ModelImp(const char* path,int nNumThread, bool quantize)
{
- string model_path = pathAppend(path, "model.onnx");
- string vocab_path = pathAppend(path, "vocab.txt");
+ string model_path;
+ string cmvn_path;
+ string config_path;
- fe = new FeatureExtract(3);
+ if(quantize)
+ {
+ model_path = pathAppend(path, "model_quant.onnx");
+ }else{
+ model_path = pathAppend(path, "model.onnx");
+ }
+ cmvn_path = pathAppend(path, "am.mvn");
+ config_path = pathAppend(path, "config.yaml");
- sessionOptions.SetInterOpNumThreads(nNumThread);
+ fft_input = (float *)fftwf_malloc(sizeof(float) * fft_size);
+ fft_out = (fftwf_complex *)fftwf_malloc(sizeof(fftwf_complex) * fft_size);
+ memset(fft_input, 0, sizeof(float) * fft_size);
+ plan = fftwf_plan_dft_r2c_1d(fft_size, fft_input, fft_out, FFTW_ESTIMATE);
+
+ //sessionOptions.SetInterOpNumThreads(1);
+ sessionOptions.SetIntraOpNumThreads(nNumThread);
sessionOptions.SetGraphOptimizationLevel(GraphOptimizationLevel::ORT_ENABLE_EXTENDED);
#ifdef _WIN32
@@ -35,13 +49,12 @@
m_szInputNames.push_back(item.c_str());
for (auto& item : m_strOutputNames)
m_szOutputNames.push_back(item.c_str());
- vocab = new Vocab(vocab_path.c_str());
+ vocab = new Vocab(config_path.c_str());
+ load_cmvn(cmvn_path.c_str());
}
ModelImp::~ModelImp()
{
- if(fe)
- delete fe;
if (m_session)
{
delete m_session;
@@ -49,11 +62,15 @@
}
if(vocab)
delete vocab;
+ fftwf_free(fft_input);
+ fftwf_free(fft_out);
+ fftwf_destroy_plan(plan);
+ fftwf_cleanup();
}
void ModelImp::reset()
{
- fe->reset();
+ printf("Not Imp!!!!!!\n");
}
void ModelImp::apply_lfr(Tensor<float>*& din)
@@ -80,16 +97,49 @@
din = tmp;
}
+void ModelImp::load_cmvn(const char *filename)
+{
+ ifstream cmvn_stream(filename);
+ string line;
+
+ while (getline(cmvn_stream, line)) {
+ istringstream iss(line);
+ vector<string> line_item{istream_iterator<string>{iss}, istream_iterator<string>{}};
+ if (line_item[0] == "<AddShift>") {
+ getline(cmvn_stream, line);
+ istringstream means_lines_stream(line);
+ vector<string> means_lines{istream_iterator<string>{means_lines_stream}, istream_iterator<string>{}};
+ if (means_lines[0] == "<LearnRateCoef>") {
+ for (int j = 3; j < means_lines.size() - 1; j++) {
+ means_list.push_back(stof(means_lines[j]));
+ }
+ continue;
+ }
+ }
+ else if (line_item[0] == "<Rescale>") {
+ getline(cmvn_stream, line);
+ istringstream vars_lines_stream(line);
+ vector<string> vars_lines{istream_iterator<string>{vars_lines_stream}, istream_iterator<string>{}};
+ if (vars_lines[0] == "<LearnRateCoef>") {
+ for (int j = 3; j < vars_lines.size() - 1; j++) {
+ vars_list.push_back(stof(vars_lines[j])*scale);
+ }
+ continue;
+ }
+ }
+ }
+}
+
void ModelImp::apply_cmvn(Tensor<float>* din)
{
const float* var;
const float* mean;
- float scale = 22.6274169979695;
+ var = vars_list.data();
+ mean= means_list.data();
+
int m = din->size[2];
int n = din->size[3];
- var = (const float*)paraformer_cmvn_var_hex;
- mean = (const float*)paraformer_cmvn_mean_hex;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
int idx = i * n + j;
@@ -114,9 +164,10 @@
string ModelImp::forward(float* din, int len, int flag)
{
-
Tensor<float>* in;
- fe->insert(din, len, flag);
+ FeatureExtract* fe = new FeatureExtract(3);
+ fe->reset();
+ fe->insert(plan, din, len, flag);
fe->fetch(in);
apply_lfr(in);
apply_cmvn(in);
@@ -147,7 +198,6 @@
auto outputTensor = m_session->Run(run_option, m_szInputNames.data(), input_onnx.data(), m_szInputNames.size(), m_szOutputNames.data(), m_szOutputNames.size());
std::vector<int64_t> outputShape = outputTensor[0].GetTensorTypeAndShapeInfo().GetShape();
-
int64_t outputCount = std::accumulate(outputShape.begin(), outputShape.end(), 1, std::multiplies<int64_t>());
float* floatData = outputTensor[0].GetTensorMutableData<float>();
auto encoder_out_lens = outputTensor[1].GetTensorMutableData<int64_t>();
@@ -158,9 +208,14 @@
result = "";
}
-
- if(in)
+ if(in){
delete in;
+ in = nullptr;
+ }
+ if(fe){
+ delete fe;
+ fe = nullptr;
+ }
return result;
}
--
Gitblit v1.9.1