| |
|
|
| |
| |
|
|
| from typing import Dict |
|
|
| import numpy as np |
| import onnx |
|
|
|
|
| def load_cmvn(): |
| neg_mean = None |
| inv_stddev = None |
|
|
| with open("am.mvn") as f: |
| for line in f: |
| if not line.startswith("<LearnRateCoef>"): |
| continue |
| t = line.split()[3:-1] |
|
|
| if neg_mean is None: |
| neg_mean = ",".join(t) |
| else: |
| inv_stddev = ",".join(t) |
|
|
| return neg_mean, inv_stddev |
|
|
|
|
| def load_lfr_params(): |
| with open("config.yaml", encoding="utf-8") as f: |
| for line in f: |
| if "lfr_m" in line: |
| lfr_m = int(line.split()[-1]) |
| elif "lfr_n" in line: |
| lfr_n = int(line.split()[-1]) |
| break |
| lfr_window_size = lfr_m |
| lfr_window_shift = lfr_n |
| return lfr_window_size, lfr_window_shift |
|
|
|
|
| def get_vocab_size(): |
| with open("tokens.txt", encoding="utf-8") as f: |
| return len(f.readlines()) |
|
|
|
|
| def add_meta_data(filename: str, meta_data: Dict[str, str]): |
| """Add meta data to an ONNX model. It is changed in-place. |
| |
| Args: |
| filename: |
| Filename of the ONNX model to be changed. |
| meta_data: |
| Key-value pairs. |
| """ |
| model = onnx.load(filename) |
| for key, value in meta_data.items(): |
| meta = model.metadata_props.add() |
| meta.key = key |
| meta.value = value |
|
|
| onnx.save(model, filename) |
| print(f"Updated {filename}") |
|
|
|
|
| def main(): |
| lfr_window_size, lfr_window_shift = load_lfr_params() |
| neg_mean, inv_stddev = load_cmvn() |
| vocab_size = get_vocab_size() |
|
|
| meta_data = { |
| "lfr_window_size": str(lfr_window_size), |
| "lfr_window_shift": str(lfr_window_shift), |
| "neg_mean": neg_mean, |
| "inv_stddev": inv_stddev, |
| "model_type": "paraformer", |
| "version": "1", |
| "model_author": "damo", |
| "vocab_size": str(vocab_size), |
| "comment": "speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch", |
| } |
| add_meta_data("model.onnx", meta_data) |
|
|
|
|
| if __name__ == "__main__": |
| main() |
|
|