小程序通用 AI 推理接口InferenceSession wx.createInferenceSession
InferenceSession wx.createInferenceSession(Object object)
基礎(chǔ)庫 2.30.0 開始支持,低版本需做兼容處理。
小程序插件:支持,需要小程序基礎(chǔ)庫版本不低于 2.30.0
功能描述
創(chuàng)建 AI 推理 Session。使用前可參考AI指南文檔
參數(shù)
Object object
屬性類型默認(rèn)值必填說明
modelstring是模型文件路徑,目前只執(zhí)行后綴為.onnx格式(支持代碼包路徑,和本地文件系統(tǒng)路徑)
precesionLevelnumber4否推理精度,有效值為 0 - 4。一般來說,使用的precesionLevel等級(jí)越低,推理速度越快,但可能會(huì)損失精度。推薦開發(fā)者在開發(fā)時(shí),在效果滿足需求時(shí)優(yōu)先使用更低精度以提高推理速度,節(jié)約能耗。
合法值說明
0使用fp16 存儲(chǔ)浮點(diǎn),fp16計(jì)算,Winograd 算法也采取fp16 計(jì)算,開啟近似math計(jì)算
1使用fp16 存儲(chǔ)浮點(diǎn),fp16計(jì)算,禁用 Winograd 算法,開啟近似math計(jì)算
2使用fp16 存儲(chǔ)浮點(diǎn),fp32計(jì)算,開啟 Winograd,開啟近似math計(jì)算
3使用fp32 存儲(chǔ)浮點(diǎn),fp32計(jì)算,開啟 Winograd,開啟近似math計(jì)算
4使用fp32 存儲(chǔ)浮點(diǎn),fp32計(jì)算,開啟 Winograd,關(guān)閉近似math計(jì)算
allowQuantizebooleanfalse否是否生成量化模型推理
allowNPUbooleanfalse否是否使用NPU推理,僅對(duì)IOS有效
typicalShapeObject否輸入典型分辨率
返回值
InferenceSession
示例代碼
// 創(chuàng)建會(huì)話,加載模型
const session = wx.createInferenceSession({
model: `${wx.env.USER_DATA_PATH}/MNIST.onnx`,
precisionLevel: 4,
typicalShape:{input1:[1, 3, 224, 224], input2:[1, 1, 224, 224]}, //除非使用動(dòng)態(tài)軸,一般不用顯式指定
allowNPU: false,
allowQuantize: false
})
// 監(jiān)聽error事件
session.onError(err => {
console.error(err)
})
// 監(jiān)聽模型加載完成事件
session.onLoad(() => {
// 運(yùn)行推理
// 其中input1, input2, output0 必須與使用的onnx模型中實(shí)際的輸入輸出名字完全一致,不可隨意填寫。
// 模型輸入輸出信息可以通過Netron 打開onnx模型看到
session.run({
input1: {
type: 'float32',
data: new Float32Array(3 * 224 * 224).buffer,
shape: [1, 3, 224, 224] // NCHW 順序
},
// 多個(gè)input的添加方法,假設(shè)第二個(gè)input需要數(shù)據(jù)類型為uint8
input2: {
type: 'uint8',
data: new Uint8Array(224 * 224).buffer,
shape: [1, 1, 224, 224]
},
}).then(res => {
console.log(res.output0)
})
})
// 銷毀Session
// session完成創(chuàng)建后可以多次調(diào)用run進(jìn)行推理,直到調(diào)用`session.destroy()`釋放相關(guān)內(nèi)存。
// 銷毀會(huì)話
session.destroy()