本案例为基于二元分类的建筑分类,即使用机器学习功能,自动提取某区域影像数据中的建筑物矢量面。应用案例主要介绍在没有模型的情况下,配置好相关的Python环境之后,如何进行数据准备、模型训练,根据模型对影像进行二元分类。
1.准备样本数据
对待进行二元分类的源影像数据中的部分区域数据,进行标签绘制,作为样本数据生成训练数据。主要操作步骤及参数说明如下:
- 打开影像文件 :以文件型数据源的方式打开 resourcesml\exampledata\training\binaryclstrain_data\raw 中的 image.tif 数据,将该影像数据在地图窗口中打开。
- 准备样本影像数据 :新建文件型数据源:Sample.udbx,裁剪两块房屋颜色丰富的影像,保存在Label数据源中,结果数据命名为 Sampleimage1和SampleImage2,裁剪完后;将两个影像数据导出为 TIFF 数据;并将 SampleImage1.tiff 和 SampleImage2.tiff 拖拽到当前工作空间以文件型数据源方式打开,并分别添加到地图窗口。
- 准备样本标签数据 :新建 SampleLabel1 he SampleLabel2 面数据集,分别添加到SampleImage1和SampleImage2影像数据地图窗口;将 SampleLabel1 和 SampleImage2 图层设置为可编辑状态,通过 对象操作 -> 对象绘制 -> 面 -> 多边形 ,对影像数据中的房屋进行矢量化,矢量化结果如下图:
2.生成训练数据
基于第一步的标签数据和影像数据,分别对两份数据生成训练数据,并存放在同一路径。主要步骤及参数如下:
第一份训练数据
- 功能入口:工具箱 -> 机器学习 -> 影像分析 -> 训练数据生成。
- 源数据:影像数据设置为 SampleImage1,标签数据设置为 SampleLabel。
- 图像大小:行数、列数均为 512;
- 训练数据用途:选择 二元分类 ;
- 输出路径:设置模型的输出路径为E:\AI\Data\TrainingData;
- 数据名称:设置为:buildingtrainingdata。
- 执行成功后,即可得到影像数据和标签数据按指定大小划分的图像,以及数据的配置文件 buildingtrainingdata.sda,如下图:
第二份训练数据
- 再次打开工具箱中的 训练数据生成 工具。
- 源数据:影像数据设置为 SampleImage2,标签数据设置为 SampleLabe2。
- 图像大小:行数、列数均为 512,与第一份训练数据大小相同;
- 训练数据用途:选择 二元分类 ;
- 输出路径:模型输出路径与第一份训练数据相同,设置为:“E:\AI\Data\TrainingData”;
- 数据名称:与第一份训练数据相同,设置为:buildingtrainingdata。
- 执行成功后,第二份训练数据会追加保存至同一个路径,结果如下图:
3.模型训练
使用第二步生成的训练数据进行模型训练,主要步骤及参数说明如下:
- 训练数据路径:选择上一步骤生成的训练数据结果的保存路径:E:\AI\Data\Training\buildingtrainingdata;
- 训练配置文件:选择训练数据结果中的配置文件:resourcesml\trainerconfig\binaryclstrain_config.sdt;
- 训练模型用途:二元分类;
- 训练次数:10;
- 训练日志路径:E:\AI\Data\TrainingModel\log;
- 模型储存路径:E:\AI\Data\TrainingModel\Model;
- 模型名:building_model。
- 其他参数使用默认参数,执行时间约 10-70 分钟(GPU 执行时间),执行成功后,得到building_model模型文件。
4.模型应用:提取影像中的建筑物
使用模型训练得到的模型及二元分类工具,对源影像数据进行大面积的房屋面提取,自动提取影像中的建筑物信息,主要步骤及参数说明如下:
- 源数据:将源数据设置为 image。
- 模型文件:选择模型训练生成的结果模型,即“E:\AI\Data\TrainingModel\Model\Buildingmodel\Buildingmodel.sdm”文件。
- 切片重叠值:设置为 60。
- 其它参数默认,点击执行即可对影像进行二元分类,提取影像中的房屋信息,得到下图(右)所示的栅格数据。(GPU时间约15分钟)