商城系統(tǒng) 注冊(cè)

小程序通用 AI 推理接口InferenceSession wx.createInferenceSession

2023-03-16|HiShop
導(dǎo)讀:InferenceSession wx.createInferenceSession(Object object) 基礎(chǔ)庫(kù) 2.30.0 開始支持,低版本需做兼容處理。 小程序插件:支持,需要小程序基礎(chǔ)庫(kù)版本不低于 2.30.0 功能描述 創(chuàng)建 AI 推理 Session。使用前...

  InferenceSession wx.createInferenceSession(Object object)

  基礎(chǔ)庫(kù) 2.30.0 開始支持,低版本需做兼容處理。

  小程序插件:支持,需要小程序基礎(chǔ)庫(kù)版本不低于 2.30.0

  功能描述

  創(chuàng)建 AI 推理 Session。使用前可參考AI指南文檔

  參數(shù)

  Object object

  屬性類型默認(rèn)值必填說(shuō)明

  modelstring是模型文件路徑,目前只執(zhí)行后綴為.onnx格式(支持代碼包路徑,和本地文件系統(tǒng)路徑)

  precesionLevelnumber4否推理精度,有效值為 0 - 4。一般來(lái)說(shuō),使用的precesionLevel等級(jí)越低,推理速度越快,但可能會(huì)損失精度。推薦開發(fā)者在開發(fā)時(shí),在效果滿足需求時(shí)優(yōu)先使用更低精度以提高推理速度,節(jié)約能耗。

  合法值說(shuō)明

  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()

電話咨詢 預(yù)約演示 0元開店