YOLOv8 + SAM实现自动标注分割数据集【附完整源码+步骤详解】

《博主简介》

小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。
更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~
👍感谢小伙伴们点赞、关注!

《------往期经典推荐------》

一、AI应用软件开发实战专栏【链接】

项目名称项目名称
1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】
3.【手势识别系统开发】4.【人脸面部活体检测系统开发】
5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】
7.【YOLOv8多目标识别与自动标注软件开发】8.【基于YOLOv8深度学习的行人跌倒检测系统】
9.【基于YOLOv8深度学习的PCB板缺陷检测系统】10.【基于YOLOv8深度学习的生活垃圾分类目标检测系统】
11.【基于YOLOv8深度学习的安全帽目标检测系统】12.【基于YOLOv8深度学习的120种犬类检测与识别系统】
13.【基于YOLOv8深度学习的路面坑洞检测系统】14.【基于YOLOv8深度学习的火焰烟雾检测系统】
15.【基于YOLOv8深度学习的钢材表面缺陷检测系统】16.【基于YOLOv8深度学习的舰船目标分类检测系统】
17.【基于YOLOv8深度学习的西红柿成熟度检测系统】18.【基于YOLOv8深度学习的血细胞检测与计数系统】
19.【基于YOLOv8深度学习的吸烟/抽烟行为检测系统】20.【基于YOLOv8深度学习的水稻害虫检测与识别系统】
21.【基于YOLOv8深度学习的高精度车辆行人检测与计数系统】22.【基于YOLOv8深度学习的路面标志线检测与识别系统】
23.【基于YOLOv8深度学习的智能小麦害虫检测识别系统】24.【基于YOLOv8深度学习的智能玉米害虫检测识别系统】
25.【基于YOLOv8深度学习的200种鸟类智能检测与识别系统】26.【基于YOLOv8深度学习的45种交通标志智能检测与识别系统】
27.【基于YOLOv8深度学习的人脸面部表情识别系统】28.【基于YOLOv8深度学习的苹果叶片病害智能诊断系统】
29.【基于YOLOv8深度学习的智能肺炎诊断系统】30.【基于YOLOv8深度学习的葡萄簇目标检测系统】
31.【基于YOLOv8深度学习的100种中草药智能识别系统】32.【基于YOLOv8深度学习的102种花卉智能识别系统】
33.【基于YOLOv8深度学习的100种蝴蝶智能识别系统】34.【基于YOLOv8深度学习的水稻叶片病害智能诊断系统】
35.【基于YOLOv8与ByteTrack的车辆行人多目标检测与追踪系统】36.【基于YOLOv8深度学习的智能草莓病害检测与分割系统】
37.【基于YOLOv8深度学习的复杂场景下船舶目标检测系统】38.【基于YOLOv8深度学习的农作物幼苗与杂草检测系统】
39.【基于YOLOv8深度学习的智能道路裂缝检测与分析系统】40.【基于YOLOv8深度学习的葡萄病害智能诊断与防治系统】
41.【基于YOLOv8深度学习的遥感地理空间物体检测系统】42.【基于YOLOv8深度学习的无人机视角地面物体检测系统】
43.【基于YOLOv8深度学习的木薯病害智能诊断与防治系统】44.【基于YOLOv8深度学习的野外火焰烟雾检测系统】
45.【基于YOLOv8深度学习的脑肿瘤智能检测系统】46.【基于YOLOv8深度学习的玉米叶片病害智能诊断与防治系统】
47.【基于YOLOv8深度学习的橙子病害智能诊断与防治系统】48.【车辆检测追踪与流量计数系统】
49.【行人检测追踪与双向流量计数系统】50.【基于YOLOv8深度学习的反光衣检测与预警系统】
51.【危险区域人员闯入检测与报警系统】52.【高压输电线绝缘子缺陷智能检测系统】

二、机器学习实战专栏【链接】,已更新31期,欢迎关注,持续更新中~~
三、深度学习【Pytorch】专栏【链接】
四、【Stable Diffusion绘画系列】专栏【链接】
五、YOLOv8改进专栏【链接】持续更新中~~
六、YOLO性能对比专栏【链接】,持续更新中~

《------正文------》

引言

本文主要介绍一个使用YOLOv8 + MobileSAM自动生成结构化分割数据标注的方法。这个脚本是一个完整的从图像检测到分割再到生成标注文件的工作流,利用YOLOv8进行快速物体检测,再借助SAM模型实现高精度的分割,并自动化生成结构化的标注数据,非常适合于大规模图像数据的分割数据集标注

实现步骤

下面是详细的实现步骤。

导入所需库和模块

from pathlib import Path
from ultralytics import SAM, YOLO
import torch

pathlib.Path:用于处理文件和目录路径的库。
ultralytics.YOLOultralytics.SAM:分别用于加载YOLOv8对象检测模型和Segment Anything Model (SAM)语义分割模型。
torch:PyTorch深度学习框架。

定义变量

# 定义图像数据路径
img_data_path = 'ultralytics/assets'
# 定义检测模型和SAM模型的路径
det_model="yolov8n.pt"
sam_model="MyModels/mobile_sam.pt"
# 根据CUDA是否可用选择设备
device = '0' if torch.cuda.is_available() else 'cpu'
# 定义输出目录,默认为None
# 输出路径
output_dir = None

img_data_path需要进行自动分割标注的图像数据路径
det_modelsam_model:分别为YOLO检测模型和SAM分割模型的文件路径。
device:根据系统中是否可用CUDA(NVIDIA GPU加速),选择运行模型的设备(GPU或CPU)。

模型初始化

# 初始化检测模型和SAM模型
det_model = YOLO(det_model)
sam_model = SAM(sam_model)

使用给定路径加载YOLOv8检测模型SAM分割模型到内存中,准备进行图像处理。
这里使用的是yolov8n.pt目标检测和mobile_sam.pt分割一切模型,如果对于精度要求更高的,可以使用yolov8x.pt或者sam_b.pt等更大的模型。

图像检测

# 对图像数据进行检测
det_results = det_model(data, stream=True, device=device)

使用YOLO模型对img_data_path路径下的所有图像进行物体检测,stream=True允许逐个处理图像,减少内存占用;device=device指定计算设备。

结果处理与分割

# 遍历检测结果
for result in det_results:# 获取类别IDclass_ids = result.boxes.cls.int().tolist()  # noqa# 如果有检测到物体if len(class_ids):# 获取检测框坐标boxes = result.boxes.xyxy  # Boxes object for bbox outputs# 使用SAM模型进行分割sam_results = sam_model(result.orig_img, bboxes=boxes, verbose=False, save=False, device=device)

遍历检测结果:对于每个检测到物体的图像,提取其类别ID和边界框坐标。
应用SAM模型:对每个检测到的物体使用SAM模型进行精细化分割,获取更精确的分割掩码。

生成标注文件

# 获取分割结果segments = sam_results[0].masks.xyn  # noqa# 为每个图像生成标注文件with open(f"{Path(output_dir) / Path(result.path).stem}.txt", "w") as f:# 遍历每个分割区域for i in range(len(segments)):s = segments[i]# 如果分割区域为空,则跳过if len(s) == 0:continue# 将分割区域坐标转换为字符串格式segment = map(str, segments[i].reshape(-1).tolist())# 写入标注信息f.write(f"{class_ids[i]} " + " ".join(segment) + "\n")

对于每张图像及其检测到的每个物体,创建一个文本文件用于存储标注信息。
文件命名规则为原图像文件名加上.txt后缀,存储于之前创建的output_dir目录下。

标注格式:每行代表一个物体的标注信息,包括类别ID后跟分割区域的坐标点序列,坐标点以空格分隔。

生成的标注文件为YOLO分割数据格式,如下图:
在这里插入图片描述
分割图片结果如下所示:
在这里插入图片描述

完整源码

from pathlib import Path
from ultralytics import SAM, YOLO
import torch# 定义图像数据路径
img_data_path = 'ultralytics/assets'# 定义检测模型和SAM模型的路径
det_model="yolov8n.pt"
sam_model="MyModels/mobile_sam.pt"# 根据CUDA是否可用选择设备
device = '0' if torch.cuda.is_available() else 'cpu'# 定义输出目录,默认为None
# 输出路径
output_dir = None# 初始化检测模型和SAM模型
det_model = YOLO(det_model)
sam_model = SAM(sam_model)# 获取图像数据路径
data = Path(img_data_path)# 如果输出目录未定义,则生成默认的输出目录
if not output_dir:output_dir = data.parent / f"{data.stem}_auto_annotate_labels"# 创建输出目录Path(output_dir).mkdir(exist_ok=True, parents=True)# 对图像数据进行检测
det_results = det_model(data, stream=True, device=device)# 遍历检测结果
for result in det_results:# 获取类别IDclass_ids = result.boxes.cls.int().tolist()  # noqa# 如果有检测到物体if len(class_ids):# 获取检测框坐标boxes = result.boxes.xyxy  # Boxes object for bbox outputs# 使用SAM模型进行分割sam_results = sam_model(result.orig_img, bboxes=boxes, verbose=False, save=False, device=device)# 获取分割结果segments = sam_results[0].masks.xyn  # noqa# 为每个图像生成标注文件with open(f"{Path(output_dir) / Path(result.path).stem}.txt", "w") as f:# 遍历每个分割区域for i in range(len(segments)):s = segments[i]# 如果分割区域为空,则跳过if len(s) == 0:continue# 将分割区域坐标转换为字符串格式segment = map(str, segments[i].reshape(-1).tolist())# 写入标注信息f.write(f"{class_ids[i]} " + " ".join(segment) + "\n")

好了,这篇文章就介绍到这里,感谢点赞关注,更多精彩内容持续更新中~

关注文末名片G-Z-H:【阿旭算法与机器学习】,可获取更多干货学习资源

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

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

相关文章

014基于SSM+Jsp的网络视频播放器

开发语言:Java框架:ssm技术:JSPJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包…

北京十大金牌律师事务所(2024年权威高胜诉率推荐)

律师职业本身,是一个看起来很美、说起来很烦、听起来很阔、做起来很难的职业。所谓术业有专攻,律师的专业就是解决法律纠纷,负责为个人和组织提供法律咨询和代理法律服务。律师在执行其职责时需要遵守道德准则和法律规定,并以客户…

数据可视化实验一:Panda数据处理及matplotlib绘图初步

目录​​​​​​​ 2024-6-17 一、请将所有含有发明家“吴峰”的发明专利的“申请日”打印出来。并将含有“吴峰”的所有发明专利条目保存到Excel中 1.1 代码实现 1.2 运行结果 二、读取文件创建城市、人口、性别比、城镇化率DataFrame对象,计算指标排名&…

多种异构数据的分析设计方案3:聊聊策略模式+函数式接口+MAP

多种异构数据的分析设计方案3:聊聊策略模式函数式接口MAP 定义 策略模式(Strategy Pattern): 定义并封装一系列算法类,并且这些类可以相互替换,可以在运行时根据需要选择不同的算法,而不需要修改客户端流程代码。 策略模式让算法…

同三维T80004EH-N HDMI高清NDI编码器

1路HDMI 1路3.5音频输入,支持NDI 产品简介: 同三维T80004EH-N 高清HDMI编码器是专业的NDI高清音视频编码产品,该产品支持1路高清HDMI音视频采集功能,1路3.5MM独立音频接口采集功能。编码输出双码流H.265/H.264格式,音频MP3/AAC格…

小程序开发平台源码系统商业运营版 带完整的安装代码包以及搭建教程

系统概述 小程序开发平台源码系统商业运营版 是一套基于现代技术栈开发的,专为中小企业及个人开发者设计的小程序快速开发与运营管理解决方案。该系统采用模块化架构设计,集成了代码生成器、可视化拖拽编辑器、多端适配引擎、云端部署、数据统计分析等多…

问题解决-连接ssh很慢

SSH 连接慢可能是由多种原因引起的。以下是一些常见的原因及其解决方法: 1. DNS 反向解析 原因:SSH 服务器尝试对连接客户端的 IP 地址进行反向 DNS 解析,导致连接延迟。 解决方法:禁用 SSH 服务器的 DNS 反向解析。 编辑 /et…

【图书推荐】《Hive入门与大数据分析实战》

本书重点 Hive的网站流量分析项目、旅游酒店评价大数据分析项目,两个案例(均包括SQL和Java编程两种解决方法,SQL实现不用编程)可用于课题研究和毕业论文素材。 内容简介 Hive是基于Hadoop的一个数据仓库工具,用来进…

Stable Diffusion基础:ControlNet之细节替换

本文继续给大家分享 Stable Diffusion 的基础能力:ControlNet之细节替换,故事的主角是 Tile。 Tile 的原意是瓦片、瓷砖。作为 ControlNet,它会对参考图进行分块,并识别出区块内的对象。如果提示词和区块内的对象匹配&#xff0c…

数据分离(C++)

第1题 数的变化(课程A) 查看测评数据信息 输入1个正整数a,每次打印后删除个位数,直至数字删除完。 输入格式 一行1个正整数:a,范围在[1,100000000]。 输出格式 多行整数,一个比一个短。 输入/输出例子1 输入&#…

ucos抢占式实时多任务操作系统 (RTOS)。

介绍 uCOS (也称为 μC/OS 或 Micro-Controller Operating System) 是一个开源的、可移植的、可裁剪的、抢占式实时多任务操作系统 (RTOS)。它最初由 Jean J. Labrosse 编写,并广泛用于嵌入式系统设计中。uCOS 是一个小型的 RTOS,非常适合那些需要实时性…

使用 calibre 拆分电子书合辑

文章目录 引言下载插件拆书设置封面等元信息 引言 下载电子书合辑后,想拆分为单独成册的文件 https://bookfere.com/post/603.html 教程使用 calibre 的 EpubSplit 插件,这里我跟着实践,记录在此,希望能帮助你。 本文基于 macOS …

【Android面试八股文】1. 怎么保证线程按顺序执行? 2. 如何实现线程排队 ?

文章目录 面试想考察的知识点面试问题面试场景问题 0:在多线程编程中,有没有办法保证线程按照特定的顺序执行?问题 1:假设有A、B两个线程,B线程需要在A线程执行完成之后执行问题 2:假设有A、B两个线程,其中A线程中执行分为3步,需要在A线程执行完成第二步之后再继续执行…

SQL server 内连接 左连接 右连接 全连接 语句

在SQL Server中,连接(JOIN)操作用于从两个或多个表中检索相关数据。内连接、左连接、右连接和全连接是最常用的几种连接类型。下面详细介绍每种连接的用法和区别: 1. 内连接 (INNER JOIN) 内连接只返回两个表中满足连接条件的匹…

算法:11. 盛最多水的容器

11. 盛最多水的容器 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明:你…

山东大学软件学院深度学习期末回忆版

(大数据,2021级,老师是gys和cm,贝多芬,但是略微会有10% 的考试内容不在背诵范围内,看个人理解) 一、名词解释(8 * 3 24) 1、超参数 2、梯度确认 3、分布式表示 4、共现矩阵 5、Attention机制…

Windows采用txt和bat来一次性建立多个文件夹

前言 最近工作需要一次性建立多个文件夹,方便保存不同的数据,所以在网上搜了搜方法,方法还挺多的,这里只是给出流程最简洁、最适合自己的方法,供自己日后回顾,如果大家想学习更多方法可以百度一下。 方法…

Ubuntu系统的使用基本教程

引言 Ubuntu是基于Linux内核的开源操作系统,以其稳定性、安全性和易用性赢得了广泛的用户群体。无论是作为服务器操作系统,还是作为个人桌面系统,Ubuntu都表现出色。本文将详细介绍Ubuntu系统的基本使用方法,包括系统安装、基本配…

清远mes管理系统助力企业降本增效

清远MES管理系统可以帮助企业降本增效的方式包括但不限于以下几个方面: 生产过程优化:清远MES系统可以实时监控生产过程中的各个环节,包括设备状态、生产进度、质量指标等,帮助企业管理人员及时了解生产情况并做出相应的调整和控制…

APP Android

APP Android 安卓源生应用程序 APP IOS-CSDN博客 05.04 06:11Testing