隨著智能語音技術的普及,語音識別(ASR)、語音合成(TTS)、聲紋識別等應用場景對模型推理效率提出了極高要求,本文介紹將Paraformer語音模型從預訓練模型導出為ONNX格式,并使用ONNX Runtime進行推理的過程。
1、加載Paraformer模型
使用PyTorch的torch.load()函數加載已訓練好的Paraformer模型權重文件。
2、定義輸入張量
根據模型輸入的要求,創建一個符合模型輸入維度的虛擬張量(dummy tensor)。這個張量將用于在模型導出過程中模擬實際輸入數據。
3、導出模型
使用PyTorch的onnx.export()函數將模型導出為ONNX格式。該函數需要傳入模型對象、輸入張量、輸出文件路徑等參數。在導出過程中可根據需要設置優化選項(如opset_version),以提高模型在ONNX Runtime中的推理性能。
4、驗證ONNX模型
使用ONNX的驗證工具(如onnx.checker.check_model())檢查導出的ONNX模型是否有效。
5、加載ONNX模型
根據模型輸入的要求,創建一個符合模型輸入維度的虛擬張量(dummy tensor)。這個張量將用于在模型導出過程中模擬實際輸入數據。使用ONNX Runtime的onnxruntime.InferenceSession()函數加載導出的ONNX模型文件。
6、準備輸入數據
使用PyTorch的onnx.export()函數將模型導出為ONNX格式。該函數需要傳入模型對象、輸入張量、輸出文件路徑等參數。在導出過程中可根據需要設置優化選項(如opset_version),以提高模型在ONNX Runtime中的推理性能。將測試數據轉換為與模型輸入兼容的格式。使用InferenceSession對象的run()方法進行推理。該方法需要傳入輸入數據的容器和輸出張量的名稱。推理結果將以NumPy數組的形式返回。
7、處理推理結果
根據需要對推理結果進行后處理,包括解碼、轉換格式。
模型優化過程包含量化、剪枝,配置選項。量化是一種減少模型大小和提高推理速度的有效方法。在ONNX模型中,蒙帕巡檢機器人使用Post-Training Quantization (PTQ)技術,進行高效率的模型優化。
圖1機器人進行語音模型加速后的時間對比
PTQ:使用ONNX Runtime提供的量化工具,在導出ONNX模型后對模型權重進行量化,使用quantize_dynami方法改變其數據類型;剪枝是一種通過移除模型中不重要的部分來減小模型大小和提高推理速度的技術。
對于ONNX模型,使用onnx_simplifier庫下的optimize方法來實現剪枝:首先遍歷計算圖中的所有節點,找到不需要剪枝的節點(例如輸入節點、輸出節點、常量節點等),對其他節點進行剪枝;
配置選項可根據特定的硬件和場景進行調整以提高性能,包括設置線程數和啟用內存優化等。通過調整這些配置選項,可以確保ONNX?Runtime能充分利用硬件資源達到最佳性能。
日常巡檢過程中,蒙帕巡檢機器人通過將Paraformer模型導出為ONNX格式,并使用ONNX Runtime進行高效推理,從而賦能設備巡檢、人機互動等應用場景,有效提高巡檢運維的智能化與準確率。