ENVI新机器学习:ENVITask 使用说明

随着 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

 

posted @ 2022-12-29 14:08  ENVI-IDL技术殿堂  阅读(1331)  评论(0编辑  收藏  举报