日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

MindSpore模型推理

發布時間:2023/11/28 生活经验 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MindSpore模型推理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

MindSpore模型推理
如果想在應用中使用自定義的MindSpore Lite模型,需要告知推理器模型所在的位置。推理器加載模型的方式有以下三種:
? 加載本地模型。
? 加載遠程模型。
? 混合加載本地和遠程模型。
加載模型
方式一:加載并初始化本地模型。

  1. 加載模型。
    ? Assets目錄
    a. MLCustomLocalModel localModel = new MLCustomLocalModel.Factory(“yourmodelname”)
    b. .setAssetPathFile(“assetpathname”)
    c. .create();
    ? 自定義目錄
    . MLCustomLocalModel localModel = new MLCustomLocalModel.Factory(“yourmodelname”)
    a. .setLocalFullPathFile(“sdfullpathname”)
    b. .create();
  2. 根據模型創建推理器。
  3. final MLModelExecutorSettings settings = new MLModelExecutorSettings.Factory(localModel).create();
  4. final MLModelExecutor modelExecutor = MLModelExecutor.getInstance(settings);
  5. // 調用模型推理,實現細節見下節模型推理;Bitmap待處理的圖片。
  6. executorImpl(modelExecutor, bitmap);
    方式二:加載并初始化遠程模型。
    加載遠程模型時需先判斷遠程模型是否已經下載完成:
  7.  final MLCustomRemoteModel remoteModel =new MLCustomRemoteModel.Factory("yourmodelname")
    
  8.      .create();
    
  9.  MLLocalModelManager.getInstance()
    
  10.      .isModelExist(remoteModel)
    
  11.      .addOnSuccessListener(new OnSuccessListener<Boolean>() {
    
  12.          @Override
    
  13.          public void onSuccess(Boolean isDownload) {
    
  14.              if (isDownload) {
    
  15.                  final MLModelExecutorSettings settings =
    
  16.                         new MLModelExecutorSettings.Factory(remoteModel).create();
    
  17.                 final MLModelExecutor modelExecutor = MLModelExecutor.getInstance(settings);
    
  18.                 executorImpl(modelExecutor, bitmap);
    
  19.             }
    
  20.         }
    
  21.     })
    
  22.     .addOnFailureListener(new OnFailureListener() {
    
  23.         @Override
    
  24.         public void onFailure(Exception e) {
    
  25.             // 異常處理。
    
  26.         }
    
  27.     });
    

方式三:混合加載本地和遠程模型。推薦使用這種方式,此方法可以確保當遠程模型未下載時加載本地模型。

  1.  localModel = new MLCustomLocalModel.Factory("localModelName")
    
  2.      .setAssetPathFile("assetpathname")
    
  3.      .create();
    
  4.  remoteModel =new MLCustomRemoteModel.Factory("yourremotemodelname").create();
    
  5.  MLLocalModelManager.getInstance()
    
  6.      // 判斷遠程模型是否存在。
    
  7.      .isModelExist(remoteModel)
    
  8.      .addOnSuccessListener(new OnSuccessListener<Boolean>() {
    
  9.          @Override
    
  10.         public void onSuccess(Boolean isDownloaded) {
    
  11.             MLModelExecutorSettings settings;
    
  12.             // 如果遠程模型存在,優先加載本地已有的遠程模型,否則加載本地已有的本地模型。
    
  13.             if (isDownloaded) {
    
  14.                 settings = new MLModelExecutorSettings.Factory(remoteModel).create();
    
  15.             } else {
    
  16.                 settings = new MLModelExecutorSettings.Factory(localModel).create();
    
  17.             }
    
  18.             final MLModelExecutor modelExecutor = MLModelExecutor.getInstance(settings);
    
  19.             executorImpl(modelExecutor, bitmap);
    
  20.         }
    
  21.     })
    
  22.     .addOnFailureListener(new OnFailureListener() {
    
  23.         @Override
    
  24.         public void onFailure(Exception e) {
    
  25.             // 異常處理。
    
  26.         }
    
  27.     });
    

模型推理器進行推理
本章示例中的“executorImpl”方法為模型推理的詳細流程,聲明如下:

  1. void executorImpl(final MLModelExecutor modelExecutor, Bitmap bitmap)
    以下示例會借助“executorImpl”方法詳細演示推理器調用的自定義模型推理的整個過程,此方法內主要包含如下關鍵處理流程:
  2. 設置輸入輸出格式。
    需要知道模型的輸入輸出格式。通過MLModelInputOutputSettings.Factory把輸入輸出格式設置到模型推理器。比如,一個圖片分類模型的輸入格式為一個float類型的1x224x224x3數組(表示只推理一張大小為224x224的三通道 (RGB)圖片),輸出格式為一個長度為1001的float型列表(每個值表示該圖片經模型推理后1001個類別中各類別的可能性)。對于此模型,請按照以下方式設置輸入輸出格式:
  3. inOutSettings = new MLModelInputOutputSettings.Factory()
  4.  .setInputFormat(0, MLModelDataType.FLOAT32, new int[] {1, 224, 224, 3})
    
  5.  .setOutputFormat(0, MLModelDataType.FLOAT32, new int[] {1, 1001})
    
  6.  .create();
    
  7. 把圖片數據輸入到推理器。
    注意
    當前版本MindSpore生成的模型使用的數據格式與tflite類型的模型使用的數據格式相同,均為NHWC,caffe類型的模型使用的數據格式為NCHW。若需要將模型由caffe轉換到MindSpore,請設置為NHWC格式。如下NHWC示例:1224224*3表示一張(batch N),大小為224(height H)*224(width W),3通道(channels C)的圖片。
  8. private void executorImpl(final MLModelExecutor modelExecutor, Bitmap bitmap){
  9.  // 準備輸入數據。
    
  10.  final Bitmap inputBitmap = Bitmap.createScaledBitmap(srcBitmap, 224, 224, true);
    
  11.  final float[][][][] input = new float[1][224][224][3];
    
  12.  for (int i = 0; i < 224; i++) {
    
  13.      for (int j = 0; j < 224; j++) {
    
  14.          int pixel = inputBitmap.getPixel(i, j);
    
  15.          input[batchNum][j][i][0] = (Color.red(pixel) - 127) / 128.0f;
    
  16.          input[batchNum][j][i][1] = (Color.green(pixel) - 127) / 128.0f;
    
  17.         input[batchNum][j][i][2] = (Color.blue(pixel) - 127) / 128.0f;
    
  18.     }
    
  19. }
    
  20. MLModelInputs inputs = null;
    
  21. try {
    
  22.     inputs = new MLModelInputs.Factory().add(input).create();
    
  23.     // 若模型需要多路輸入,需要多次調用add()以便圖片數據能夠一次輸入到推理器。
    
  24. } catch (MLException e) {
    
  25.     // 處理輸入數據格式化異常。
    
  26. }
    
  27. // 執行推理。可以通過“addOnSuccessListener”來監聽推理成功,在“onSuccess”回調中處理推理成功。同時,可以通過“addOnFailureListener”來監聽推理失敗,在“onFailure”中處理推理失敗。
  28. modelExecutor.exec(inputs, inOutSettings).addOnSuccessListener(new OnSuccessListener<MLModelOutputs>() {
    
  29.     @Override
    
  30.     public void onSuccess(MLModelOutputs mlModelOutputs) {
    
  31.         float[][] output = mlModelOutputs.getOutput(0);
    
  32.             // 這里推理的返回結果在output數組里,可以進一步處理。
    
  33.             }
    
  34.     }).addOnFailureListener(new OnFailureListener() {
    
  35.     @Override
    
  36.     public void onFailure(Exception e) {
    
  37.         // 推理異常。
    
  38.     }
    
  39. });
    
  40. }

總結

以上是生活随笔為你收集整理的MindSpore模型推理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。