ENVI新機器學習:ENVITask 使用說明

地理遥感生态网平台發表於2024-06-27

隨著 ENVI 5.6.3 和 ENVI Deep Learning 2.0 的釋出,帶來了 ENVI Machine Learning(機器學習)功能,該功能不需要額外的許可,只需要 ENVI 主模組許可,並安裝 ENVI 深度學習 2.0 版本應用程式,便可使用新機器學習的工具。

可以訪問如下系列文章進行了解:

https://www.cnblogs.com/enviidl/category/2258432.html

1 ENVITask 介紹

目前,ENVI 機器學習提供瞭如下 ENVITask:

功能

ENVITask

柵格標準化統計

NormalizationStatistics Task

準備訓練資料

MLTrainingDataFromROIs Task

MLTrainingDataFromSpectralLibrary Task

訓練模型

TrainBirch Task

TrainExtraTrees Task

TrainIsolationForest Task

TrainKNeighbors Task

TrainLinearSVM Task

TrainLocalOutlierFactor Task

TrainMiniBatchKMeans Task

TrainNaiveBayes Task

TrainRandomForest Task

TrainRBFSVM Task

機器學習分類

MachineLearningClassification Task

而我們呼叫 ENVITask 實現機器學習分類的步驟與上表順序一致,通常需要 4 個 ENVITask 構建流程,分別用於柵格標準化統計、準備訓練資料、模型訓練、機器學習分類

2 呼叫示例

隨機森林為例進行介紹,其他演算法類似。可檢視幫助獲取更多示例程式碼。

以下是一個完整的機器學習流程。

PRO example_RandomForest
  COMPILE_OPT idl2
  e = ENVI()

  ;開啟柵格和樣本
  RasterFile = FILEPATH('qb_boulder_msi',subdir=['data'], $
    root_dir=e.Root_Dir)
  Raster = e.OpenRaster(RasterFile)
  ROIFile = FILEPATH('qb_boulder_roi.xml',subdir=['data'],$
    root_dir=e.Root_Dir)
  ROI = e.OpenROI(ROIFile)

  ;柵格標準化統計
  StatsTask = ENVITask('NormalizationStatistics')
  StatsTask.INPUT_RASTERS = Raster
  StatsTask.Execute

  ;準備訓練資料
  DataPrepTask = ENVITask('MLTrainingDataFromROIs')
  DataPrepTask.INPUT_RASTER = Raster
  DataPrepTask.INPUT_ROI = ROI
  ;如果設定了 BACKGROUND_LABELS,這些類別將被作為背景類處理
  ;DataPrepTask.BACKGROUND_LABELS = ['Disturbed Earth', 'Water']
  DataPrepTask.NORMALIZE_MIN_MAX = StatsTask.Normalization
  DataPrepTask.Execute

  ;訓練模型
  TrainTask = ENVITask('TrainRandomForest')
  TrainTask.INPUT_RASTER = DataPrepTask.OUTPUT_RASTER
  TrainTask.NUM_ESTIMATORS = 100
  ;如果希望儲存訓練後模型到本地檔案,可設定此引數
  TrainTask.OUTPUT_MODEL_URI = 'C:\temp\trained_rf_model.json'
  TrainTask.Execute

  ;機器學習分類
  ClassifyTask = ENVITask('MachineLearningClassification')
  ClassifyTask.INPUT_RASTER = Raster
  ClassifyTask.INPUT_MODEL = TrainTask.OUTPUT_MODEL
  ClassifyTask.Execute

  ;將結果新增到 Data Manager,並載入顯示輸入影像和分類結果
  DataColl = e.Data
  DataColl.Add, ClassifyTask.OUTPUT_RASTER
  View = e.GetView()
  Layer = View.CreateLayer(Raster)
  Layer = View.CreateLayer(ClassifyTask.OUTPUT_RASTER)
END

此外,還有一個程式 ENVIMachineLearningModel,可以開啟已訓練模型檔案、獲取模型資訊、用於分類其他影像。

ENVI> model_file = 'C:\temp\trained_rf_model.json'
ENVI> ;開啟模型
ENVI> model = ENVIMachineLearningModel(model_file)
ENVI> ;獲取model名稱
ENVI> model.NAME
Random Forest Supervised Classifier
ENVI> ;獲取model型別
ENVI> model.MODEL_TYPE
RandomForest
ENVI> ;獲取model類別資訊
ENVI> model.LABELS
Background
Disturbed Earth
Bright Roof
Water
ENVI> model.COLORS
                     0                     0                     0
                   240                   240                     0
                   255                     0                     0
                    29                    29                   255
ENVI> model.NCLASSES
                     4
ENVI> ;關閉模型
ENVI> model.Close

相關文章