航片转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.boxesfor 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/48753.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

抖音短视频seo矩阵系统源码开发技术分享(二)--SaaS开源

目录 市场背景分析 一、抖音短视频seo矩阵系统开发部署流程 二、 源码开发功能构思 三、 抖音短视频seo源码开发部署注意事项 四、 部分开发代码展示 市场背景分析 抖音短视频seo矩阵系统是通过不同平台不同账号之间建立联系,通过将同一品牌下不同平台不同账号…

currentTarget和target

*.wxml *.js 点击按钮 发现 currentTarget 获取的是事件绑定者的参数 target 获取的是事件触发者的参数

ZYNQ 入门笔记(零):概述

文章目录 引言产品线Zynq™ 7000 SoCZynq UltraScale™ MPSoCZynq UltraScale RFSoCVersal™ Adaptive SoC 开发环境 引言 Xilinx FPGA 产品线从经济型的 Spartan、Artix 系列到高性能的 Kintex、Virtex、Versal 系列,可以说涵盖了 FPGA 的绝大部分应用场景&#x…

【iOS】内存对齐

内存对齐 OC基本数据类型所占字节数对比 注1:BOOL在32位机器被定义为char、在64位机器被定义为bool boolean_t在32位机器被定义为unsigned int、在64位机器被定义为int NSInteger在32位机器被定义为int、在64位机器被定义为long NSUInteger在32位机器被定义为unsig…

公司技术栈用到了RocketMQ,我对此块知识进行了回顾(初始RocketMQ)

前言 作为24届的校招生,不知道大伙儿们是否都已经到了工作岗位上。为了以后更方便的接触到公司的业务,我司为我们安排了将近一个月的实操。虽然不用敲代码,但是… 了解到我司使用到的技术栈,在空闲时间正好对RocketMQ这块技术做个…

服务器配置两个默认网关必须配置路由优先级

背景 对于具备多网口的服务器来说,启用多个网口很正常,正常情况下应该只有一个默认网关,其他网口配置明细路由,如果将服务器做为软路由,并且有两个外网网络,1主1备,则会需要配置网关默认网关&am…

C++笔试强训7

文章目录 一、选择题1-5题6-10题 二、编程题题目一题目二 一、选择题 1-5题 基础知识,函数代码少,频繁调用的时候才适合定义内联函数。 故选C。 在C中,inline关键字是用来向编译器建议将函数体在每个调用点“内联展开”的。这意味着编译器会…

前端表格解析方法

工具类文件 // fileUtils.tsimport { ref } from vue; import * as xlsx from xlsx;interface RowData {[key: string]: any; }export const tableData ref<RowData[]>([]);export async function handleFileSelect(url: string): Promise<void> {try {const res…

《无线互联科技》是什么级别的期刊?是正规期刊吗?能评职称吗?

​问题解答 问&#xff1a;《无线互联科技》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知网收录的正规学术期刊。 问&#xff1a;《无线互联科技》级别&#xff1f; 答&#xff1a;国家级。主管单位&#xff1a;江苏省科学技术厅 主办单位&#xff1a…

浅谈断言之MD5Hex断言

浅谈断言之MD5Hex断言 “MD5Hex断言”是一种特殊类型的断言&#xff0c;主要用于验证返回数据的完整性和一致性。本文将详细介绍MD5Hex断言的用途、配置方法及应用场景。 MD5Hex断言概述 MD5Hex断言基于MD5&#xff08;Message-Digest Algorithm 5&#xff09;算法&#xff…

Nexus3 批量上传 jar 包、pom文件

Nexus3 Maven 私服搭建及各种使用 详见**Maven私服搭建及各种使用汇总2020** Maven 配置 Nexus 私服 在 Maven 项目中配置 Nexus 私服&#xff0c;需要在项目的 pom.xml 或 maven 的 settings.xml 文件中添加 Nexus 仓库的配置。 示例&#xff1a; 以下是一个项目的 pom.xml…

JDK8升级到JDK17,报错Error:java:错误:不支持的发行版本5

1 问题描述&#xff1a; 我原来用到是JDK8,后来重新安装了JDK17后&#xff0c;并更换了JAVA_HOME的配置&#xff0c;在CDM上面查看JAVA版本确认安装无误。 当我打开IDEA运行代码时&#xff0c;就报错java&#xff1a;错误&#xff1a;不支持的发行版本5&#xff0c;至始至终我都…

UM980的天线馈电设计

UM980 不支持内部天线馈电&#xff0c;需要从模块外部给天线馈电&#xff0c;建议尽量选择高耐压、大功率的器件&#xff1b; 还可以在馈电电路上增加气体放电管、压敏电阻、 TVS 管等大功率的防护器件&#xff0c;可有效提高防雷击与防浪涌的能力。 如果 ANT_BIAS 天线馈电和模…

python3.10.4——CentOS7安装步骤

目录 1.CentOS7中默认有python2.7.5 2.安装前置依赖程序 3.在python官网下载linux系统安装包 4.解析、编译安装python3.10.4 5.创建软链接 6.修改yum相关配置 7.重新检查python版本号 1.CentOS7中默认有python2.7.5 2.安装前置依赖程序 yum install wget zlib-devel bz…

NVIDIA Container Toolkit 安装与配置帮助文档(Ubuntu,Docker)

NVIDIA Container Toolkit 安装与配置帮助文档(Ubuntu,Docker) 本文档详细介绍了在 Ubuntu Server 22.04 上使用 Docker 安装和配置 NVIDIA Container Toolkit 的过程。 概述 NVIDIA 容器工具包使用户能够构建和运行 GPU 加速容器。即可以在容器中使用NVIDIA显卡。 架构图如…

Qt开发网络嗅探器03

数据包分析 想要知道如何解析IP数据包&#xff0c;就要知道不同的IP数据包的包头结构&#xff0c;于是我们上⽹查查资料&#xff1a; 以太网数据包 ARP数据包 IPv4 IPv6 TCP UDP ICMP ICMPv6 根据以上数据包头结构&#xff0c;我们就有了我们的protocol.h文件&#xff0c;声明…

【云原生】Kubernetes中的DaemonSet介绍、原理、用法及实战应用案例分析

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

【LeetCode】填充每个节点的下一个右侧节点指针 II

目录 一、题目二、解法完整代码 一、题目 给定一个二叉树&#xff1a; struct Node { int val; Node *left; Node *right; Node *next; } 填充它的每个 next 指针&#xff0c;让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点&#xff0c;则将 next 指针设置为 NUL…

【学习笔记】无人机系统(UAS)的连接、识别和跟踪(十)-无人机A2X服务

引言 3GPP TS 23.256 技术规范&#xff0c;主要定义了3GPP系统对无人机&#xff08;UAV&#xff09;的连接性、身份识别、跟踪及A2X&#xff08;Aircraft-to-Everything&#xff09;服务的支持。 3GPP TS 23.256 技术规范&#xff1a; 【免费】3GPPTS23.256技术报告-无人机系…

Mindspore框架循环神经网络RNN模型实现情感分类|(二)RNN模型构建

Mindspore框架循环神经网络RNN模型实现情感分类 Mindspore框架循环神经网络RNN模型实现情感分类|&#xff08;一&#xff09;IMDB影评数据集准备 Mindspore框架循环神经网络RNN模型实现情感分类|&#xff08;二&#xff09;RNN模型构建 Mindspore框架循环神经网络RNN模型实现情…