MindSpore模型推理
生活随笔
收集整理的這篇文章主要介紹了
MindSpore模型推理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
MindSpore模型推理
如果想在應用中使用自定義的MindSpore Lite模型,需要告知推理器模型所在的位置。推理器加載模型的方式有以下三種:
? 加載本地模型。
? 加載遠程模型。
? 混合加載本地和遠程模型。
加載模型
方式一:加載并初始化本地模型。
- 加載模型。
? Assets目錄
a. MLCustomLocalModel localModel = new MLCustomLocalModel.Factory(“yourmodelname”)
b. .setAssetPathFile(“assetpathname”)
c. .create();
? 自定義目錄
. MLCustomLocalModel localModel = new MLCustomLocalModel.Factory(“yourmodelname”)
a. .setLocalFullPathFile(“sdfullpathname”)
b. .create(); - 根據模型創建推理器。
- final MLModelExecutorSettings settings = new MLModelExecutorSettings.Factory(localModel).create();
- final MLModelExecutor modelExecutor = MLModelExecutor.getInstance(settings);
- // 調用模型推理,實現細節見下節模型推理;Bitmap待處理的圖片。
- executorImpl(modelExecutor, bitmap);
方式二:加載并初始化遠程模型。
加載遠程模型時需先判斷遠程模型是否已經下載完成: -
final MLCustomRemoteModel remoteModel =new MLCustomRemoteModel.Factory("yourmodelname") -
.create(); -
MLLocalModelManager.getInstance() -
.isModelExist(remoteModel) -
.addOnSuccessListener(new OnSuccessListener<Boolean>() { -
@Override -
public void onSuccess(Boolean isDownload) { -
if (isDownload) { -
final MLModelExecutorSettings settings = -
new MLModelExecutorSettings.Factory(remoteModel).create(); -
final MLModelExecutor modelExecutor = MLModelExecutor.getInstance(settings); -
executorImpl(modelExecutor, bitmap); -
} -
} -
}) -
.addOnFailureListener(new OnFailureListener() { -
@Override -
public void onFailure(Exception e) { -
// 異常處理。 -
} -
});
方式三:混合加載本地和遠程模型。推薦使用這種方式,此方法可以確保當遠程模型未下載時加載本地模型。
-
localModel = new MLCustomLocalModel.Factory("localModelName") -
.setAssetPathFile("assetpathname") -
.create(); -
remoteModel =new MLCustomRemoteModel.Factory("yourremotemodelname").create(); -
MLLocalModelManager.getInstance() -
// 判斷遠程模型是否存在。 -
.isModelExist(remoteModel) -
.addOnSuccessListener(new OnSuccessListener<Boolean>() { -
@Override -
public void onSuccess(Boolean isDownloaded) { -
MLModelExecutorSettings settings; -
// 如果遠程模型存在,優先加載本地已有的遠程模型,否則加載本地已有的本地模型。 -
if (isDownloaded) { -
settings = new MLModelExecutorSettings.Factory(remoteModel).create(); -
} else { -
settings = new MLModelExecutorSettings.Factory(localModel).create(); -
} -
final MLModelExecutor modelExecutor = MLModelExecutor.getInstance(settings); -
executorImpl(modelExecutor, bitmap); -
} -
}) -
.addOnFailureListener(new OnFailureListener() { -
@Override -
public void onFailure(Exception e) { -
// 異常處理。 -
} -
});
模型推理器進行推理
本章示例中的“executorImpl”方法為模型推理的詳細流程,聲明如下:
- void executorImpl(final MLModelExecutor modelExecutor, Bitmap bitmap)
以下示例會借助“executorImpl”方法詳細演示推理器調用的自定義模型推理的整個過程,此方法內主要包含如下關鍵處理流程: - 設置輸入輸出格式。
需要知道模型的輸入輸出格式。通過MLModelInputOutputSettings.Factory把輸入輸出格式設置到模型推理器。比如,一個圖片分類模型的輸入格式為一個float類型的1x224x224x3數組(表示只推理一張大小為224x224的三通道 (RGB)圖片),輸出格式為一個長度為1001的float型列表(每個值表示該圖片經模型推理后1001個類別中各類別的可能性)。對于此模型,請按照以下方式設置輸入輸出格式: - inOutSettings = new MLModelInputOutputSettings.Factory()
-
.setInputFormat(0, MLModelDataType.FLOAT32, new int[] {1, 224, 224, 3}) -
.setOutputFormat(0, MLModelDataType.FLOAT32, new int[] {1, 1001}) -
.create(); - 把圖片數據輸入到推理器。
注意
當前版本MindSpore生成的模型使用的數據格式與tflite類型的模型使用的數據格式相同,均為NHWC,caffe類型的模型使用的數據格式為NCHW。若需要將模型由caffe轉換到MindSpore,請設置為NHWC格式。如下NHWC示例:1224224*3表示一張(batch N),大小為224(height H)*224(width W),3通道(channels C)的圖片。 - private void executorImpl(final MLModelExecutor modelExecutor, Bitmap bitmap){
-
// 準備輸入數據。 -
final Bitmap inputBitmap = Bitmap.createScaledBitmap(srcBitmap, 224, 224, true); -
final float[][][][] input = new float[1][224][224][3]; -
for (int i = 0; i < 224; i++) { -
for (int j = 0; j < 224; j++) { -
int pixel = inputBitmap.getPixel(i, j); -
input[batchNum][j][i][0] = (Color.red(pixel) - 127) / 128.0f; -
input[batchNum][j][i][1] = (Color.green(pixel) - 127) / 128.0f; -
input[batchNum][j][i][2] = (Color.blue(pixel) - 127) / 128.0f; -
} -
} -
MLModelInputs inputs = null; -
try { -
inputs = new MLModelInputs.Factory().add(input).create(); -
// 若模型需要多路輸入,需要多次調用add()以便圖片數據能夠一次輸入到推理器。 -
} catch (MLException e) { -
// 處理輸入數據格式化異常。 -
} - // 執行推理。可以通過“addOnSuccessListener”來監聽推理成功,在“onSuccess”回調中處理推理成功。同時,可以通過“addOnFailureListener”來監聽推理失敗,在“onFailure”中處理推理失敗。
-
modelExecutor.exec(inputs, inOutSettings).addOnSuccessListener(new OnSuccessListener<MLModelOutputs>() { -
@Override -
public void onSuccess(MLModelOutputs mlModelOutputs) { -
float[][] output = mlModelOutputs.getOutput(0); -
// 這里推理的返回結果在output數組里,可以進一步處理。 -
} -
}).addOnFailureListener(new OnFailureListener() { -
@Override -
public void onFailure(Exception e) { -
// 推理異常。 -
} -
}); - }
總結
以上是生活随笔為你收集整理的MindSpore模型推理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MindSpore特性支持类
- 下一篇: MindSpore部署图像分割示例程序