航片转GIS数据自动化管线

近年来,计算机视觉领域的进步已显著改善了物体检测和分割任务。一种流行的方法是 YOLO(You Only Look Once)系列模型。YOLOv8 是 YOLO 架构的演进,兼具准确性和效率,是各种应用的绝佳选择,包括分割卫星航拍图像中的建筑物。

在这篇博文中,我们将引导你完成实施 YOLOv8 对卫星航拍图像进行图像分割的过程,使用 Roboflow 平台的标注数据训练模型,最后将结果转换为shapefle------这是一项提供基于位置信息的新任务。

NSDT工具推荐Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 - Three.js虚拟轴心开发包 - 3D模型在线减面 - STL模型在线切割

1、了解 YOLOv8 架构

YOLOv8 以其前辈为基础,专注于实现准确性和速度之间的平衡。该架构将图像划分为网格,并为每个单元分配检测和分类其边界内物体的责任。这种方法允许在一次传递中实时检测和分割物体。

对于图像分割,我们将调整 YOLOv8,将建筑物分割视为物体检测任务。网格中的每个单元将负责检测建筑物的存在,而生成的边界框将定义建筑物的大致位置。

2、使用 Roboflow 标注数据

要训练 YOLOv8 进行建筑物分割,我们需要标记数据。 Roboflow 提供了一个用户友好的平台来标注图像并生成所需的注释。 标注航空卫星图像涉及在建筑物周围绘制边界框。 此外,每个边界框都需要用建筑物的唯一类别 ID 标记。

  • 数据收集:收集包含各种建筑物的多样化航空卫星图像数据集。 此数据集应代表你打算在其中部署模型的真实场景。
  • 上传到 Roboflow:将你的数据集导入 Roboflow 平台。
  • 标注:使用 Roboflow 的标注工具在图像中的每个建筑物周围绘制边界框。 为边界框分配类别 ID,表明它们代表建筑物。
  • 导出标注:标注完成后,以 YOLO 格式导出标注。该格式包括每个图像的文本文件,其中每行对应一个边界框及其类别 ID。

3、训练 YOLOv8

有了标注数据后,就可以训练 YOLOv8 模型了。训练过程包括使用标注数据微调网络权重。

  • 数据预处理:将 YOLO 标注转换为适合训练的格式。将数据集组织成训练集和验证集。
  • 配置设置:根据您的问题配置 YOLOv8 架构。指定类数(建筑物为 1)和其他相关超参数。
  • 模型训练:使用 PyTorch 或 TensorFlow 等深度学习框架训练 YOLOv8 模型。实施必要的数据增强技术以提高模型的泛化能力。
  • 模型评估:监控模型在验证集上的表现。如有必要,调整超参数。

4、将结果转换为 Shape 文件

将 YOLOv8 分割结果转换为 Shape 文件引入了地理空间组件,使你可以将建筑物信息叠加在地图上并执行基于位置的分析。

  • 后处理:获得 YOLOv8 的分割结果后,提取检测到的建筑物的边界框坐标。
  • 地理参考:根据原始卫星图像的元数据为每个边界框分配地理空间坐标。
  • 创建 Shape 文件:使用 geopandas 等库,将地理参考边界框坐标转换为 Shape 文件。每个 Shape 文件将代表一栋建筑物的边界。
  • 可视化:在 GIS 软件中打开 Shape 文件,在地图上可视化分割的建筑物。此步骤使您能够验证分割结果的准确性并执行地理空间分析。

5、代码演练

整个过程都是使用 Google Colaboratory 完成的。

开始之前:

让我们确保我们可以访问 GPU。我们可以使用 nvidia-smi 命令来做到这一点。如果出现任何问题,请导航至 Edit -> Notebook settings -> Hardware accelerator,将其设置为 GPU,然后单击保存。

下面列出了 Yolov8 模型可以做的事情,

复制代码
yolo task=detect    mode=train    model=yolov8n.yaml      args...
          classify       predict        yolov8n-cls.yaml  args...
          segment        val            yolov8n-seg.yaml  args...
                         export         yolov8n.pt        format=onnx  args...

使用以下命令确保 GPU 已初始化:

复制代码
!nvidia-smi

输入图像数据如下:

获取权重的自定义训练,

复制代码
!yolo task=segment mode=train model=yolov8s-seg.pt data=data.yaml epochs=10 imgsz=640 save=true

结果存储在特定目录 runs/segment/train 中。并从该目录中获取预训练权重。

设置 data.yaml 文件,它看起来如下图所示:

验证自定义模型:

复制代码
!yolo task=segment mode=val model=runs/segment/train/weights/best.pt data=data.yaml

使用自定义模型进行推理:

复制代码
!yolo task=segment mode=predict model=runs/segment/train/weights/best.pt conf=0.25 source=test/images save=true

使用训练模型预测自定义输入:

复制代码
model = YOLO(f'runs/segment/train/weights/best.pt')
results = model.predict(source='Coimbatore_Pilot.JPG', conf=0.25)

根据输入图像中分割的建筑物生成 Shaping 文件:

复制代码
import geopandas as gpd
from shapely.geometry import Polygon

# Create an empty list to store the geometries and class labels
geometries = []
class_labels = []
classNames = ['building']

for r in results5:
    boxes = r.boxes
    for box in boxes:
        x1, y1, x2, y2 = box.xyxy[0]
        x1, y1, x2, y2 = int(x1), int(y1), int(x2), int(y2)
        polygon = Polygon([(x1, y1), (x1, y2), (x2, y2), (x2, y1)])
        geometries.append(polygon)

        # Assuming you have access to the class_label for each box (adjust accordingly)
        class_label = classNames[int(box.cls[0])]
        class_labels.append(class_label)

# Create a GeoDataFrame from the list of geometries and class labels
gdf = gpd.GeoDataFrame({'geometry': geometries, 'class_label': class_labels})

# You can now save the GeoDataFrame to a shapefile
output_shapefile = 'Drone_Builiding_Shape_Files/sample5/output_shapefile_boxes5.shp'
gdf.to_file(output_shapefile, driver='ESRI Shapefile')

可视化shapefile:

复制代码
import matplotlib.pyplot as plt
import geopandas as gpd

# Read the shapefile using geopandas
shapefile_path = '/content/drive/MyDrive/Projects/Building_Detection.v1i.yolov8/Drone_Builiding_Shape_Files//sample5/output_shapefile_boxes5.shp'
gdf = gpd.read_file(shapefile_path)


# Plot the shapefile using matplotlib
gdf.plot()
plt.show()

6、结束语

实施 YOLOv8 来分割航空卫星图像中的建筑物,使用 Roboflow 的标注数据对其进行训练,并将结果转换为形状文件,这是一个将计算机视觉与地理空间分析联系起来的综合过程。这种集成可以实现准确的建筑物分割,并在基于位置的研究中利用分割信息。随着技术的不断发展,这种跨学科方法将在解决复杂的现实问题方面变得越来越有价值。


原文链接:航片转GIS数据自动化 - BimAnt

相关推荐
NAGNIP10 小时前
一文搞懂深度学习中的通用逼近定理!
人工智能·算法·面试
冬奇Lab11 小时前
一天一个开源项目(第36篇):EverMemOS - 跨 LLM 与平台的长时记忆 OS,让 Agent 会记忆更会推理
人工智能·开源·资讯
冬奇Lab11 小时前
OpenClaw 源码深度解析(一):Gateway——为什么需要一个"中枢"
人工智能·开源·源码阅读
AngelPP15 小时前
OpenClaw 架构深度解析:如何把 AI 助手搬到你的个人设备上
人工智能
宅小年15 小时前
Claude Code 换成了Kimi K2.5后,我再也回不去了
人工智能·ai编程·claude
九狼15 小时前
Flutter URL Scheme 跨平台跳转
人工智能·flutter·github
ZFSS15 小时前
Kimi Chat Completion API 申请及使用
前端·人工智能
天翼云开发者社区16 小时前
春节复工福利就位!天翼云息壤2500万Tokens免费送,全品类大模型一键畅玩!
人工智能·算力服务·息壤
知识浅谈16 小时前
教你如何用 Gemini 将课本图片一键转为精美 PPT
人工智能
Ray Liang17 小时前
被低估的量化版模型,小身材也能干大事
人工智能·ai·ai助手·mindx