随着 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
标签:Task,机器,DataPrepTask,TrainTask,ENVITask,ENVI,model From: https://www.cnblogs.com/enviidl/p/17012397.html