航片转GIS数据自动化管线

news2024/11/23 17:16:39

近年来,计算机视觉领域的进步已显著改善了物体检测和分割任务。一种流行的方法是 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

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

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

相关文章

借助Python将txt文本内容导入到数据库

安装数据库并创建admin账号 #Create mariadb user CREATE USER admin% IDENTIFIED BY password; GRANT SELECT, INSERT, UPDATE, DELETE ON hosts_info.* TO admin%; FLUSH PRIVILEGES;创建库并创建数据表 #创建库 CREATE DATABASE hosts_info; #创建表 CREATE TABLE host_tm…

shell条件语句

一,条件测试 1 . test命令 测试表达式是否成立,若成立返回0,否则返回其他数值 1.1 格式 test 条件表达式 [ 条件表达式 ] 2 . 文件测试 2.1 格式 [ 操作符 文件或目录 ] 例 test -d /home/user 2.2 常用的测试操作符 -d:测试是否为目录(Directory)-e:测试目…

安装Ubuntu24.04服务器版本

Ubuntu系统安装 一.启动安装程序二.执行 Ubuntu Server 安装向导1.选择安装程序语言,通常选择「English」2.设置键盘布局,默认「English US」即可3.选择安装方式 三.配置网络1.按Tab键选择网络接口(例如 ens160),然后按…

== 与 equals 的区别

概念 它的作用是判断两个对象的地址是不是相等,判断两个对象是不是同一个对象基本数据类型比较的是值是否相等引用数据类型比较的是内存地址是否相等 equals() 概念 它的作用也是判断两个对象是否相等。但它一般有两种使用情况:情况1:类没有…

重复图片查找:巧用Python和OpenCV进行图像哈希与汉明距离检测以从海量图片中找出重复图片

重复图片查找:巧用Python和OpenCV进行图像哈希与汉明距离检测以从海量图片中找出重复图片 1. 导言2. 环境准备3. 图像哈希(pHash)原理4. 汉明距离原理5. 代码实现导入必要的库图像哈希计算函数汉明距离计算函数查找重复图片函数示例使用 在处…

昇思25天学习打卡营第14天|计算机视觉

昇思25天学习打卡营第14天 文章目录 昇思25天学习打卡营第14天FCN图像语义分割语义分割模型简介网络特点数据处理数据预处理数据加载训练集可视化 网络构建网络流程 训练准备导入VGG-16部分预训练权重损失函数自定义评价指标 Metrics 模型训练模型评估模型推理总结引用 打卡记录…

Python机器学习入门:从理论到实践

文章目录 前言一、机器学习是什么?二、机器学习基本流程三、使用Python进行机器学习1.数据读取2.数据规范化3. 数据降维(主成分分析)4. 机器学习模型的选择5. 线性回归模型的实现6. 可视化结果 总结 前言 机器学习是人工智能的一个重要分支&…

RabbitMQ的学习和模拟实现|muduo库的介绍和使用

muduo库 项目仓库:https://github.com/ffengc/HareMQ muduo库 muduo库是什么快速上手搭建服务端快速上手搭建客户端上面搭建的服务端-客户端通信还有什么问题?muduo库中的protobuf基于muduo库中的protobuf协议实现一个服务器 muduo库是什么 Muduo由陈硕大佬开…

无人机之摄影构图指南

一、三分法构图 将画面分为三等分,水平线或地平线通常放在1/3处,使得画面看起来更加舒适。主体放在九宫格四个交点(视觉中心)上,突出视觉中心。 二、对称式构图 将画面左右或上下对等分割,形成呼应&…

HTML:lang属性作用

lang作用 用法常见语言代码优点示例结构效果说明分析HTML 基础结构导航栏内容部分总结 扩展 用法 HTML 文档级别: 在 <html> 标签上使用 lang 属性&#xff0c;指定整个文档的语言。 <!DOCTYPE html> <html lang"en"> <head><meta charse…

(C++) 文件读写基础

文章目录 &#x1f5c2;️前言&#x1f4c4;ref&#x1f4c4;访问标记&#x1f5c3;️流打开模式类型 &#x1f5c2;️Code&#x1f4c4;demo&#x1f4c4;分点讲解&#x1f5c3;️打开/关闭&#x1f5c3;️写&#x1f5c3;️读&#x1f5c3;️状态函数 &#x1f5c2;️END&…

javascript 的执行上下文与作用域

目录 1. 初步了解 上下文&#xff08;context&#xff09;2. 全局上下文(global context)3. 上下文栈 (context stack)4. 作用域链( scope chain)5. 作用域(scope)6. 作用域链增强 1. 初步了解 上下文&#xff08;context&#xff09; 上下文(context) 全称 执行上下文 (execut…

linux中RocketMQ安装(单机版)及springboot中的使用

文章目录 一、安装1.1、下载RocketMQ1.2、将下载包上传到linux中&#xff0c;然后解压1.3、修改runserver.sh的jvm参数大小&#xff08;根据自己服务器配置来修改&#xff09;1.4、启动mqnamesrv &#xff08;类似于注册中心&#xff09;1.5、修改runbroker.sh的jvm参数大小&am…

【Linux】进程信号 --- 信号处理

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前正在学习c和算法 ✈️专栏&#xff1a;Linux &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章有啥瑕疵&#xff0c;希望大佬指点一二 如果文章对…

el-table列的显示与隐藏

需求&#xff1a;实现 表字段的显示与隐藏。效果图 代码实现 写在前面 首先 我部分字段有自定义的排序逻辑&#xff0c;和默认值或者 数据的计算 所以是不能简单的使用 v-for 循环column 。然后 我需要默认展示一部分字段&#xff0c;并且 当表无数据时 提示不能 显示隐藏 …

HTTP 缓存

缓存 web缓存是可以自动保存常见的文档副本的HTTP设备&#xff0c;当web请求抵达缓存时&#xff0c;如果本地有已经缓存的副本&#xff0c;就可以从本地存储设备而不是从原始服务器中提取这个文档。使用缓存有如下的优先。 缓存减少了冗余的数据传输缓存环节了网络瓶颈的问题…

学习大数据DAY21 Linux基本指令2

目录 思维导图 搜索查看查找类 find 从指定目录查找文件 head 与 tail 查看行 cat 查看内容 more 查看大内容 grep 过滤查找 history 查看已经执行过的历史命令 wc 统计文件 du 查看空间 管道符号 | 配合命令使用 上机练习 4 解压安装类 zip unzip 压缩解压 tar …

google 浏览器插件开发简单学习案例:TodoList

参考&#xff1a; google插件支持&#xff1a; https://blog.csdn.net/weixin_42357472/article/details/140412993 这里是把前面做的TodoList做成google插件&#xff0c;具体网页可以参考下面链接 TodoList网页&#xff1a; https://blog.csdn.net/weixin_42357472/article/de…

Web前端:HTML篇(一)

HTML简介&#xff1a; 超文本标记语言&#xff08;英语&#xff1a;HyperText Markup Language&#xff0c;简称&#xff1a;HTML&#xff09;是一种用于创建网页的标准标记语言。 您可以使用 HTML 来建立自己的 WEB 站点&#xff0c;HTML 运行在浏览器上&#xff0c;由浏览器…

android studio中svn的使用

第一步&#xff0c;建立一个项目。 第二步&#xff0c;share project。 第三步&#xff0c;选择存放的位置&#xff0c;然后添加提交信息&#xff0c;最后点击share。这样就可以在svn上面看到一个空的项目名称。 第四步&#xff0c;看到文件变成了绿色&#xff0c;点击commit图…