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:
    # 获取类别ID
    class_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:
    # 获取类别ID
    class_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:【阿旭算法与机器学习】,可获取更多干货学习资源

  • 27
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
基于YOLOv8的自行车识别检测系统源码(部署教程+训练好的模型+各项评估指标曲线).zip 平均准确率:0.98 类别:“自行车” 【资源介绍】 1、ultralytics-main ultralytics-main为YOLOv8源代码,里面涵盖基于yolov8分类、目标检测额、姿态估计、图像分割四部分代码,我们使用的是detect部分,也就是目标检测代码 2、搭建环境 安装anaconda 和 pycharm windows系统、mac系统、Linux系统都适配 在anaconda中新建一个新的envs虚拟空间(可以参考博客来),命令窗口执行:conda create -n YOLOv8 python==3.8 创建完YOLOv8-GUI虚拟空间后,命令窗口执行:source activate YOLOv8 激活虚拟空间 然后就在YOLOv8虚拟空间内安装requirements.txt中的所有安装包,命令窗口执行:pip install -r requirements.txt 使用清华源安装更快 3、训练模型过程 进入到\ultralytics-main\ultralytics\yolo\v8\detect\文件夹下,datasets即为我们需要准备好的数据集,训练其他模型同理。 data文件夹下的bicycle.yaml文件为数据集配置文件,该文件为本人训练自行车检测模型时创建,训练其他模型,可自行创建。博文有介绍https://blog.csdn.net/DeepLearning_?spm=1011.2415.3001.5343 train.py中238行,修改为data = cfg.data or './bicycle.yaml' # or yolo.ClassificationDataset("mnist") 237行修改自己使用的预训练模型 若自己有显卡,修改239行,如我有四张显卡,即改成args = dict(model=model, data=data, device=”0,1,2,3“) 以上配置完成后运行train.py开始训练模型,训练完毕后会在runs/detect/文件夹下生成train*文件夹,里面包含模型和评估指标等 4、推理测试 训练好模型,打开predict.py,修改87行,model = cfg.model or 'yolov8n.pt',把yolov8n.pt换成我们刚才训练完生成的模型路径(在\ultralytics-main\ultralytics\yolo\v8\detect\runs\detect文件夹下),待测试的图片或者视频存放于ultralytics\ultralytics\assets文件夹, 运行predict.py即可,检测结果会在runs/detect/train文件夹下生成。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿_旭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值