随机森林是一种有监督的机器学习算法。监督学习是机器学习的一个子类。这种类型的学习依赖于分类标签,以生成一个函数(模型)来识别图像中的不同类别。有两种类型的分类问题,二元分类和多类分类。随机森林由于其准确性,简单性和灵活性,现已成为最广泛使用的分类算法之一。
随机森林是基于Bagging的决策树方法,其核心是bagging算法,原理如下:
给定一个大小为n的训练集D,Bagging算法从中均匀地、有放回地(使用自助抽样法)选出m个大小为n‘的子集Di作为新的训练集。在这m个训练集上使用分类、回归等算法,则可得到m个模型,再通过取平均值、取多数票等方法,即可得到Bagging结果。也即:
给定训练集X=x1,...,xn和目标Y=y1,...,yn,bagging方法重复(B次)从训练集中有放回地采样,然后在这些样本上训练树模型。在训练结束之后,对未知样本x的预测可以通过对x上所有单个回归树的预测求平均来实现:
或在分类任务中选择多数投票的类别。
此外,x'上所有单个回归树的预测的标准差可以作为预测的不确定性的估计:
样本或者树的数量B是一个自由参数。通常使用几百到几千棵树,这取决于训练集的大小和性质。使用交叉验证,或者通过观察out-of-bag误差(那些不包含x的抽样集合在样本x的平均预测误差),可以找到最优的B值。当一些树训练到一定程度之后,训练集和测试集的误差开始趋于平稳。
随机森林就是bagging的决策树方法,有一点改进就是随机森林在学习过程中的每次候选分裂,选择特征的随机子集。这个过程也被称为“特征bagging”。
随机森林分类工具包含在新机器学习工具包内,新机器学习工具可以运行在没有高性能GPU配置的设备上。具体运行环境如下:
支撑软件
ENVI5.6.3+ENVIDeepLearning2.0
操作系统
Windows10and11(Intel/AMD64-bit)
Linux(Intel/AMD64-bit,3.10.0及更高版本,glibc2.17及更高版本)
硬件
具有AVX的CPU。
注:一般情况下,2011年之后的CPU都包含该指令集。推荐使用IntelCPU,但不是必需的,它们拥有优化的英特尔机器学习库,可为某些机器学习算法提供性能提升。
对于单张栅格图像的随机森林分类可以通过ROI工具绘制样本并使用随机森林分类工具进行图像分类。
启动ENVI,打开ENVI自带的示例数据,如下图所示。数据位于:C:\ProgramFiles\Harris\ENVI56\data\qb_boulder_msi。ROI样本数据可下载获取(qb_boulder_msi_ROI_points.xml)。
提取码:envi
绘制好样本之后即可使用随机森林分类工具执行分类。在Toolbox工具箱,选择MachineLearning>Classification>Supercised>RandomForeastClassification随机森林分类工具。此工具对单个栅格影像执行随机森林监督分类。
在随机森林分类对话框中:
单击OK执行随机森林分类,得到分类结果,如下图所示:
随机森林分类工具可以对单幅影像快速执行随机森林分类,如果想要通过多幅影像和对应ROI训练随机森林模型并用于其它相似影像的分类,可以使用ENVIModeler构建自定义可重复使用的工作流。接下来将介绍通过ENVIModeler构建自定义工作流,用于数据预处理和使用多个栅格进行机器学习模型训练。
本教程中使用的图像:classification下的两张用于分类的图像,以及training下的两张用于训练的图像。每个训练图像都是分类图像的小区域子集。图像是四波段(红/绿/蓝/近红外),空间分辨率为1米的航拍影像。ENVI机器学习对于图像格式没有限制,对于本教程您将使用TIFF和ENVI两种格式。
注意:如果有多张影像,那么影像类型应该保持一致,如果其中一张为地表反射率,那么其余影像应该也为地表反射率数据。
文件
描述
NAIP_DallasTX_Oct11_2020_Subset.tif
用于训练的图像(4,046x3,973像素)
NAIP_DallasTX_Oct11_2020_Subset.xml
用于训练的ROI标签(人造地物、树木、地面、水面)
NAIP_SanAntonioSE_2020_Subset.dat
用于训练的图像(5,023x4,803像素)
NAIP_SanAntonioSE_2020_Subset.xml
NAIP_DallasTX_Oct11_2020.tif
用于分类的图像(10,590x12,400像素)
NAIP_SanAntonioSE_2020.dat
用于分类的图像(10,000x12,300像素)
机器学习的主要流程为训练栅格生成(影像和已有样本)、训练机器学习模型和模型分类。栅格归一化将输入的多张图像进行最大最小值归一化到0~1之间。
ENVIModeler是一个强大的可视化工具,用于使用ENVITask创建自定义工作流。ENVIModeler使用可视化方式构建流程块,类似于编写任务API代码。
这两个文件节点由栅格图像和ROI标签组成。之后它们会生成一个训练栅格用于训练机器学习模型。为了保持井然有序,可以根据需要单击画布中的节点并将其拖动到合适的位置。
要为监督分类器创建训练数据,必须使用栅格和关联的ROI提取标记像素。使用ENVIMachineLearningMLTrainingDatafromROIs任务来创建训练数据。此任务将从栅格中提取所有标记像素,这些像素由.xml文件中指定的ROI标识。生成的训练数据是包含单行光谱的新栅格。训练栅格的维度是(行=1,列=提取的标记像素个数,波段=输入栅格波段+1)。附加波段将为每个像素提供一个数值,该数值表示每个像素的类标签值。
对于本教程,我们有类标签Manmade、Trees、Ground、Water。这些标签解析为类值(1,2,3,4)。Ground类的像素将在附加波段中分配一个值3,对于每个标记的像素依此类推。
从ROI节点连接到MLTrainingDatafromROIs节点时,请务必正确配对Raster和ROI节点:
输入栅格
输入ROI
完成这些步骤后,你的节点画布应类似于下图:
NormalizationStatistics归一化统计节点从聚合器节点的输出栅格中收集最小和最大数据值。这在训练期间很重要,因为数据将使用最小值和最大值在0和1之间缩放。
要使用MLTrainingDatafromROIs节点生成的输出数据进行训练,首先需要使用聚合器节点聚合两个训练数据,之后将其连接到训练任务节点。对于本教程,我们将使用TrainRasterForest训练随机森林节点,但也可以选择任何其它的监督分类任务。
您的画布应该类似于下图。
InputParameters输入参数节点是一个基本节点,可以被许多节点重用。输入参数节点将连接到画布上的多个节点。通过连接输入参数节点,可以构建一组在运行任务时能够进行参数输入的工作流。
对第二个MLTrainingDatafromROIs节点重复此步骤。现在应该在InputParameters下有一个[BackgroundLabels]选项,单击InputParameters[BackgroundLabels],然后单击OK。
所有四个参数都通过彩色线连接到添加新的输入。这些参数都是用于训练模型时的输入参数。
您的模型现在应该类似于下图,所有连接都已完成。注意输入参数节点和训练随机森林节点的连接在下图中被其它连线遮挡。
完成ENVI模型后,保存您的工作流程并运行它。
在BackgroundLabels字段中,选择作为背景的类别。可以输入在标记过程中创建的任意几个类别(人造地物、树木、地面、水面)。例如,如果您只想识别树木,您可以添加标签(人造地物、地面、水面)。这将产生一个带有标签Background和Trees的二元分类器。
训练完成,节点恢复到默认颜色,训练进度对话框关闭。
生成训练好的监督分类模型后,您可以运行分类过程。最小化或关闭ENVIModeler;对于本节,您将使用ENVIToolbox工具箱中的MachineLearningClassification机器学习分类工具。
在图层管理器中,单击Machine_Learning_Classification_output*raster并将其拖动到栅格NAIP_DallasTX_Oct11_2020.tif上方。分类栅格显示在原始图像上。
在ENVI工具栏中,前后移动Transparency透明度滑块以探索与原始图像相比的分类结果。注意到该模型在识别正确的类方面做得很好,但它并不完美。整个图像的阴影被归类为人造材料。尝试消除这种情况的一种方法是创建阴影类,或绘制阴影类并将其归为背景类。
另一个缺陷是足球场部分被分类为水体。这可以通过添加更多的足球场处样本并重新训练模型来缓解。
在GoTo字段中输入像素坐标(7784p,7148p),然后按Enter键跳转到体育场。
在本教程中,您学习了如何构建自定义机器学习工作流,以使用标记数据训练随机森林分类器。了解到可以使用多个栅格和多个标签来训练模型并生成良好的结果。
总之,机器学习技术为学习数据中的复杂光谱模式提供了一个强大的解决方案,这意味着它可以从复杂的背景中提取特征,而不管它们的形状、颜色、大小和其他属性。
本教程介绍了两种方法进行随机森林分类。一种方法通过绘制样本ROI之后使用随机森林工具(RandomForeastClassification)直接得到分类结果。另一种方法通过ENVIModeler自定义可重用的随机森林模型训练工作流,之后使用通用的机器学习分类工具(MachineLearningClassification)得到分类结果。第一种方法简便快捷,方便直接获得分类结果;第二种方法可以获得可重用的机器学习模型。其它监督分类方法整体操作流程与本教程方法一致,区别是选择的分类器有所不同。另外使用MachineLearningLabelingTool机器学习标注工具也可以完成从样本选择到模型训练的整个过程。并且支持实时保存绘制的样本,提供项目管理等功能。