设置工程
首先,您将下载一个包含本教程所有数据的工程,并在 ArcGIS Pro 中将其打开。
- 下载 Boat_Detection 包。
随即将名为 Boat_Detection.ppkx 的文件下载到您的计算机。
注:
.ppkx 文件是一个 ArcGIS Pro 工程包,可能包含可以在 ArcGIS Pro 中打开的地图、数据和其他文件。 通过本指南了解有关管理 .ppkx 文件的详细信息。
- 在计算机上找到已下载的文件。
提示:
在大多数 web 浏览器中,此文件将下载到 Downloads 文件夹。
- 双击 Boat_Detection.ppkx 以在 ArcGIS Pro 中将其打开。 如果出现提示,请使用 ArcGIS 帐户登录。
随即出现一张以丹麦哥本哈根 Tuborg Havn 街区为中心的地图。 图像图层 Tuborg_Havn.tif 将显示在地形底图之上。
- 进行放大和平移以检查影像。
观察码头和运河中的众多船只。 此航空影像已经过正射校正以消除任何畸变。 其分辨率很高:每个像素代表地面上 20 x 20 厘米的正方形,并且可以清晰地显示船只和其他要素。 它采用 TIFF 格式,有红、绿、蓝三个色带,共同构成一幅自然的彩色图片。 其像素深度为 8 位。
手动识别此图像中的所有船只,甚至识别哥本哈根所有码头和运河中的所有船只,将非常耗时。 您将改为使用 Text SAM GeoAI 模型来自动检测这些船只。
下载 Text SAM 模型
要使用 Text SAM 模型,首先需要将其下载到您的计算机上。 Text SAM 在 ArcGIS Living Atlas of the World 上可用,它是 Esri 的权威 GIS 数据集合,其中包含不断增长的深度学习模型库。
- 在 web 浏览器中打开 ArcGIS Living Atlas。
- 在 ArcGIS Living Atlas 主页的搜索框中,键入 Text SAM。
- 在结果列表中,单击 Text SAM 以打开其项目页面。
- 在 Text SAM 项目页面上,阅读一些描述并浏览该页面。
Text SAM 是一个多用途模型,可以使用自由格式的文本提示来从影像中提取各种要素。 例如,文本提示可能为 airplane 以检测飞机;可能为 panel 以检测太阳能电池板;或者可能为 red car 以检测红色汽车。 输出为一个面图层,表示检测到的对象的大致轮廓。
该页面还包含有关预期输入的有用信息,预期输入应为 8 位三波段 RGB 影像。
该模型与本教程中使用的哥本哈根影像非常匹配。
提示:
有关 Text SAM 的详细信息,请参阅 Text SAM:使用文本提示提取 GIS 要素文章和 Text SAM:使用模型指南。
如果您希望在自己的影像上运行此工作流,请参阅本教程的最后一部分,了解有关将数据转换为预期输入格式的提示。
- 在页面顶部的概览下,单击下载。
模型文件随即下载到您的计算机中。
注:
该模型文件为 1.75 GB,下载可能需要几分钟时间。
- 在计算机上找到已下载的 TextSAM.dlpk 文件,然后将其移至便于查找的文件夹,例如 C:\GeoAI_models。
提示:
您也可以在 ArcGIS Pro 地理处理工具中直接使用 Text SAM,而无需先进行保存;但是,该工具每次运行时都会下载模型的新副本。 因此,将其存储在本地将非常有用。
使用 Text SAM 检测船只
现在,您将检测哥本哈根图像中存在的船只。 您将使用使用深度学习检测对象地理处理工具指向已下载 Text SAM 模型的副本作为参数之一。
注:
在 ArcGIS Pro 中使用深度学习工具需要在计算机上安装正确的深度学习库。 如果您未安装这些文件,请保存工程,关闭 ArcGIS Pro,然后按照在 ArcGIS Pro 中为深度学习做好准备中提供的步骤说明操作。 在这些说明中,您还可以了解如何检查您的计算机硬件和软件能否运行深度学习工作流,以及获取其他有用的提示。 完成后,您可以重新打开工程并继续本教程。
- 在功能区视图选项卡的窗口组中,单击地理处理。
- 在地理处理窗格的搜索框中,键入 Detect Objects Using Deep Learning。 在结果列表中,单击使用深度学习检测对象工具打开它。
- 在使用深度学习检测对象工具中,选择以下参数值:
- 对于输入栅格,选择 Tuborg_Havn.tif。
- 对于输出检测对象,键入 Detected_Boats。
- 对于模型定义,单击浏览按钮。
现在,您将检索 Text SAM 模型。
- 在模型定义窗口中,浏览至已保存 Text SAM 模型的位置,单击 TextSAM.dlpk,然后单击确定。
几分钟后,模型参数将自动加载。 您将选择与您希望检测的对象相对应的文本提示。
- 在参数下,对于 text_prompt,键入 boat。
提示:
可以向文本提示添加更多以逗号分隔的单词,例如 boat, yacht, canoe。 但是,在本例中,单词 boat 提示将会产生极好的效果。
- 找到 batch_size 参数。
无法一次性对整个图像执行深度学习对象检测。 该工具会改为将图像切割成名为“切片”的小块。 批量大小为 4 意味着该工具将一次处理四个图像切片。 在运行该工具时,您可能会收到内存不足的错误提示,因为您的电脑没有足够的内存来进行该级别的处理。 在这种情况下,请尝试将 batch_size 值从 4 降至 2,或者甚至降至 1。 如果您拥有一台功能强大的计算机,您也可以增大 batch_size 值以加快处理速度。 更改 batch_size 值将不会影响模型的质量,仅会影响模型检测过程的效率。
现在,您将保留默认值 4。
- 对于 nms_overlap 参数,输入 0.7。
有时,模型会不止一次检测到一个对象。 非极大值抑制 (NMS) 是一种可选过程,当检测到对象重复时,该过程会抑制部分检测到的对象。 保留检测到的置信度最高的对象,移除其他对象。 在下面的示例图像中,已检测到船只三次,并且使用 NMS,只会保留这三个面中的一个。
nms_overlap 参数决定了两个检测到的对象之间必须有多少重叠才会被视为彼此的重复对象并适用于 NMS。 该参数的可能值为介于 0 和 1 之间的值。 例如,0.7 表示重叠度应达到或超过 70%。
- 勾选非极大值抑制旁边的方框。
使用文本 SAM 模型,您可以在文本 SAM 对象检测过程中应用 NMS(即 nms_overlap 参数)或作为后处理步骤(即非极大值抑制复选框)。 通过反复试验,我们发现,对于此特定用例,选择 nms_overlap 参数的较高值(0.7)并应用具有默认设置的非极大值抑制后处理选项可以获得最佳结果。
注:
在非极大值抑制下,最大重叠率参数指定后处理 NMS 步骤的重叠。 就像 nms_overlap 一样,它可以从 0 变化到 1。 默认值 0 表示只要两个面的重叠大于 0,则会将其视为重复。
- 保留所有其他参数的默认值。
注:
有关不同参数的作用的详细信息,请参阅 Text SAM 指南。
- 单击环境选项卡。
此时,您可以按原样运行工具:工具将检测整个 Tuborg_Havn.tif 图像中的船只,此过程可能花费 30 分钟到 1 小时的时间,具体取决于计算机的规格。 为使本教程尽可能简洁,您将仅检测输入图像的一小部分中的船只。
- 在功能区地图选项卡的导航组中,单击书签并选择 Detection area。
地图随即放大至 Tuborg Havn 码头的较小区域。
- 在地理处理窗格环境选项卡中的处理范围下,单击当前显示范围按钮。
顶部、左侧、右侧和底部坐标会更新,以对应地图上显示的当前范围。
- 在处理器类型下面,选择 GPU。 对于 GPU ID,输入 0。
注:
对于本教程,假定您的计算机具有 NVIDIA GPU。 否则,请选择 CPU,但是要意识到这个过程运行的时间要长得多。 要了解有关 GPU 以及它们如何用于深度学习过程的更多信息,请参见 ArcGIS Pro 教程为深度学习做好准备中的检查 GPU 可用性一节。
- 接受所有默认值,然后单击运行。
您可以监控运行按钮下的进程进度,也可以单击查看详细信息以查看详细信息。
几分钟后,结果图层 Detected_Boats 将显示在内容窗格和地图上。 该图层为要素图层,其中每个面表示一艘船只。
提示:
如果出现内存不足错误,请尝试将 batch_size 值从 4 减小到 2 甚至 1,然后重新运行程序。
您使用 Text SAM 成功检测到了 Tuborg Havn 区域内的船只。
注:
由于 Text SAM 深度学习算法具有不确定性,因此每次运行该工具时,结果可能会略有不同。
此外,颜色是随机分配的,可能会有所不同。
- 在快速访问工具栏中,单击保存按钮以保存您的工程。
设置结果图层的样式
现在,您将检查 Detected_Boats 图层中的结果并对其进行优化。 首先,您需要更改图层的符号系统以便更好地查看检测到的对象。
- 在内容窗格中,单击 Detected_Boats 符号以显示符号系统窗格。
- 在符号系统窗格中,如有必要,单击属性选项卡。
- 在外观下,设置以下参数:
- 对于颜色,选择无颜色。
- 对于轮廓颜色,选择亮红色,例如火红色。
- 轮廓宽度选择 2 磅。
- 单击应用。
图层已更新至新的符号系统。
- 在地图上进行放大和平移以检查 Detected_Boats 图层。
您可以观察到模型已成功检测到船只,并显示了每艘船只的大致轮廓。 但是,也存在少数误报情况:模型错误地在没有船只的位置发现了船只,如下图所示。
优化结果
现在,您将学习如何优化结果并消除误报。
- 在内容窗格中,右键单击 Detected_Boats 图层并选择属性表。
在 Detected_Boats 属性表中,每行对应于一个检测到的船只要素。 目前存在 76 个要素。
注:
您获得的要素数量可能略有不同。
您将重点关注以下两个字段:
- Confidence - 此字段指示模型将每个要素识别为船只的置信度(以百分比表示)。
- Shape_Area - 此字段指示每个要素的面积(以平方米为单位)。
您将首先检查可能由于过小,而不可能为船只的要素。
- 双击 Shape_Area 字段名称以按该字段对属性表进行排序。
现在,将按面积从小到大的顺序列出要素。
- 双击第一个要素的行标题以在地图上对其进行放大和检查。
您可以在地图上看到,此要素的宽度仅为几个像素,而且其不是船只。
- 同样,查看列表中接下来的多个要素,以确定面积足够大,能够表示实际船只的区域。
面积 9 平方米似乎为阈值。 接下来,您将检查置信度最低的要素。
- 双击 Confidence 字段名称以按该字段对属性表进行排序。
现在,将按置信度从低到高的顺序列出要素。 列表中第一个要素的置信度约为 20%,该值非常低。
- 双击前几个要素以对其进行放大和检查。
- 继续检查更多要素,以确定其实际开始表示船只的置信度。
您会发现,大约 28% 的置信度似乎为阈值。 现在,您将创建 Detected_Boats 图层的副本,其中仅包含置信度足够高并且面积足够大,能够表示船只的要素。
提示:
您可以从 Detected_Boats 图层中手动删除不需要的要素,但是,如果您希望继续探索原始结果,则保持该图层完整并派生新图层将非常有用。
- 在功能区地图选项卡的选择组中,单击清除以取消选择所有要素。
- 在内容窗格中,右键单击 Detected_Boats,单击数据,然后选择导出要素。
- 在导出要素窗格中,对于输出要素类,键入 Detected_Boats_Cleaner。
- 展开过滤器,然后构建表达式 Where Confidence is greater than 28。
- 单击添加子句,然后构建第二个表达式 And Shape_Area is greater than 9。
- 单击确定。
新图层随即添加到地图。
- 在内容窗格中,单击 Detected_Boats 旁的框以关闭该图层。
- 关闭 Detected_Boats 属性表以增大地图的尺寸。
- 在地图选项卡上,单击书签,然后选择检测区域书签以返回到完整检测范围。
- 在地图上,查看 Detected_Boats_Cleaner 图层。
大多数误报现在均已消失。
注:
已知数据的最佳置信度阈值为 28%,如果您希望再次运行该工具,则可以将使用深度学习检测对象工具中的 box_threshold 模型参数由 0.2 更改为 0.28。 由此,将从结果中删除置信度介于 20% 和 28% 之间的误报。 (box_threshold 参数将决定在输出中接受的最小置信度值。)
但是,面积阈值没有等效值,因此该部分需要保留为后处理步骤。
- 在内容窗格中,右键单击 Detected_Boats_Cleaner 图层并选择属性表。
现在,该图层中剩余 66 艘船只。
如果您使用 Text SAM 检测哥本哈根每个街区的船只,则可以按街区在图表中汇总船只数量。 Detected_Boats 图层也可用于创建热点图,其中显示整个城市的船只集中度水平。 最后,可以定期针对新影像重复此分析,以识别模式以及随时间的变化。
- 按 Ctrl+S 以保存您的工程。
将 Text SAM 应用于您自己的影像
如果您希望将 Text SAM 应用于您自己的数据,请参阅以下技巧,这些技巧可帮助您取得成功。
- 准备影像 - Text SAM 模型需要三波段影像(红色、绿色和蓝色或 RGB)。 如果影像超过三个波段,则在应用 Text SAM 之前,应该提取相关波段。 该模型还期望影像具有 8 位像素深度。 如果影像具有不同的像素深度,例如 16 位,则应将其转换为 8 位。 有关如何实施这些更改的分步说明,请参阅通过迁移学习改进深度学习模型教程中的选择相关影像波段部分。
- 查找有关影像的信息 - 如果您不确定影像的属性(例如波段数、像素深度或像元大小),请在内容窗格中右键单击影像图层,然后选择属性。 在属性窗格中,单击源窗格,然后在栅格信息下找到波段数、像元大小 X、像元大小 Y 和像素深度。
- 原始工作流 - 当影像准备好进行对象检测过程时,请首先尝试使用 Text SAM 工作流,正如您在本教程中所学到的那样。 这是最简单的方法,您可以立即获得高质量的结果。
- 更改像元大小 - 如果您对初次结果不完全满意,则可以尝试改变使用深度学习检测对象环境参数中的像元大小值。 应选择像元大小(以米为单位)来最大限度地提高所选范围内感兴趣对象的可见性。 在检测较大对象时,应考虑使用较大的像元大小;而在检测较小对象时,则应选择较小的像元大小。 例如,云检测的像元大小设置为 10 米,而汽车检测的像元大小则设置为 0.3 米(30 厘米)。 虽然输入图像不会改变,但该工具将在处理过程中动态重新采样数据。 有关像元大小的详细信息,请参阅利用 Text SAM 进行多分辨率对象检测以及图像和栅格数据的像素大小。
- 使用掩膜 - 当检测特定感兴趣区域中的对象时,例如仅出现在水体覆盖区域的船只,在使用深度学习检测对象环境参数中设置掩膜将非常有用。 掩膜是一个面(或栅格)图层,用于描绘分析的感兴趣区域,例如,整个哥本哈根的水域边界,或者可能是特定码头(如果这些是您研究的唯一目标)。 当该工具运行时,将仅对掩膜范围内的位置进行处理,从而节省时间并避免掩膜范围外的误报。
- 使用特定于对象的预训练模型 - 除了使用 Text SAM 之外,在 ArcGIS 中使用 GeoAI 检测对象的另一种高效方法是使用预训练模型:可以使用 Esri 发布的数十种预训练模型之一,其中每个模型都侧重于单一对象类型,例如树木、建筑物或太阳能电池板。 有关详细信息,请参阅使用深度学习预训练模型检测物体教程。
- 土地覆被和其他类型的像素级别分类 - Text SAM 旨在检测相对紧凑并且不同于其背景的离散对象(例如被水体包围的船只)。 如果您希望提取土地利用和土地覆被 (LULC) 信息,或者执行其他类型的像素级别分类,则不应使用 Text SAM(或其他类似模型,例如 SAM)。 应改为考虑其他 ArcGIS Living Atlas 预训练模型,例如高分辨率土地覆被分类 - 美国或土地覆被分类 (Sentinel-2)。
在本教程中,您从 ArcGIS Living Atlas 网站下载了 Text SAM GeoAI 模型并使用该模型来检测图像中的船只。 然后,您使用了属性过滤器来移除误报要素。 最后,您学习了一些技巧,以将此工作流成功地应用于您自己的影像。
您可以在尝试 ArcGIS 中的深度学习系列中找到更多类似教程。