深度学习零基础学习之路——第五章 从标注到切片:ArcGIS Pro自动化构建遥感数据集
1. 遥感数据集构建的核心挑战
做遥感影像分析的朋友都知道,数据准备是最耗时耗力的环节。传统手工标注方式需要逐张图片画框、描边,标注1000张1米分辨率影像就可能耗费两周时间。更头疼的是标注完成后,还要写Python脚本进行切片、格式转换、数据集划分,整个过程就像在玩"打地鼠"——解决一个问题的同时总会有新问题冒出来。
去年我在做一个农田识别项目时,就遇到过这样的困境:团队标注了3000多块农田边界,但在切片环节发现标注坐标偏移,最终不得不返工。这种重复劳动不仅消磨团队士气,更严重拖慢项目进度。直到发现ArcGIS Pro的 导出训练数据进行深度学习 工具,才真正实现了从标注到数据集的 端到端自动化 。
2. ArcGIS Pro标注实战指南
2.1 标注前的关键准备
在ArcMap中打开遥感影像后,第一件事就是创建标注图层。这里有个容易踩坑的点: 坐标系必须与原图严格一致 。我曾遇到过因为坐标系设置错误,导致后续切片全部错位的情况。具体操作步骤:
- 右键点击影像所在文件夹 → 新建Shapefile
- 要素类型选择"面"(做实例分割时使用)
- 坐标系选择与原图相同的投影系统(可在图层属性中查看)
# 通过ArcPy查看影像坐标系示例
import arcpy
raster = "C:/data/imagery.tif"
spatial_ref = arcpy.Describe(raster).spatialReference
print(f"坐标系名称: {spatial_ref.name}")
print(f"投影类型: {spatial_ref.projectionName}")
2.2 高效标注技巧
标注过程中推荐使用这些 提升效率的组合键 :
- Ctrl+Z :撤销上一步绘制
- Shift+双击 :快速闭合多边形
- 空格键 :平移视图而不中断绘制
对于规则形状的物体(如农田、建筑),可以先用矩形工具快速标注,再通过"编辑顶点"功能微调。实测下来,这种方法比直接手绘效率提升40%以上。
3. 自动化数据集生成详解
3.1 工具参数配置艺术
在"地理处理"面板中找到"导出训练数据进行深度学习"工具,核心参数配置如下:
| 参数项 | 推荐值 | 作用说明 |
|---|---|---|
| 切片大小 | 512 | 适合大多数GPU显存 |
| 步长 | 256 | 50%重叠避免边缘漏检 |
| 元数据格式 | PASCAL_VOC | 兼容主流框架 |
| 旋转角度 | [0,90,180,270] | 数据增强 |
特别提醒: buffer_radius 参数在标注点数据时非常有用。比如标注树木中心点,设置10像素缓冲半径会自动生成圆形标注区域。
3.2 输出结构解析
工具运行后会生成如下目录结构:
output_folder/
├── images/ # 切片后的影像
│ ├── tile_0.tif
│ └── tile_1.tif
├── labels/ # 对应标注文件
│ ├── tile_0.xml
│ └── tile_1.xml
└── statistics.json # 数据集统计信息
PASCAL VOC格式的XML文件包含完整的空间坐标和类别信息,可以直接用于MMDetection、YOLO等框架训练。如果需要TFRecord格式,可以用以下脚本转换:
# 将PASCAL VOC转换为TFRecord示例
import tensorflow as tf
from object_detection.utils import dataset_util
def create_tf_example(xml_path):
# 解析XML文件
with open(xml_path, 'r') as f:
xml_data = f.read()
# 构建TFRecord特征字典
tf_example = tf.train.Example(features=tf.train.Features(feature={
'image/encoded': dataset_util.bytes_feature(encoded_jpg),
'image/object/bbox/xmin': dataset_util.float_list_feature(xmins),
# 添加其他特征字段...
}))
return tf_example
4. 高级技巧与避坑指南
4.1 处理大尺寸影像
当处理GB级遥感影像时,建议:
- 开启"单独处理所有栅格项目"选项
- 使用"掩膜面要素"参数限定处理区域
- 设置"最小面重叠比"过滤小目标
最近处理一个30GB的航拍项目时,通过这些优化将处理时间从18小时缩短到6小时。
4.2 样本均衡策略
遇到类别不均衡时(如农田占比70%,道路仅5%):
- 在标注阶段使用"分类值字段"区分重要类别
- 后期处理时对少数类切片设置更高采样权重
- 或使用工具自带的"输出无要素切片"生成负样本
5. 完整工作流演示
以农作物分类为例的典型流程:
- 标注阶段:对玉米、小麦、水稻分别创建不同颜色的面要素
- 导出设置:切片大小1024,步长512,PASCAL VOC格式
- 后处理:用Python筛选包含特定作物的切片
# 筛选包含特定类别的切片示例
import xml.etree.ElementTree as ET
def filter_class(xml_folder, target_class):
valid_files = []
for xml_file in Path(xml_folder).glob('*.xml'):
tree = ET.parse(xml_file)
if any(obj.find('name').text == target_class
for obj in tree.findall('object')):
valid_files.append(xml_file.stem)
return valid_files
corn_files = filter_class('labels', 'corn')
这套方法已经成功应用于多个实际项目,包括森林火灾监测、城市违建检测等。相比传统方法,数据集制作时间平均缩短60%,标注一致性提升明显。特别是在处理高分辨率无人机影像时,自动化切片功能避免了手动操作可能导致的遗漏或重复。
更多推荐




所有评论(0)