隨著 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