告别手动标数据!Grounded-SAM+YOLO11实现全自动数据标注与模型训练【附源码】

《博主简介》

小伙伴们好,我是阿旭。
专注于计算机视觉领域,包括目标检测、图像分类、图像分割和目标跟踪等项目开发,提供模型对比实验、答疑辅导等。

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

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

项目名称 项目名称
1.【人脸识别与管理系统开发】 2.【车牌识别与自动收费管理系统开发】
3.【手势识别系统开发】 4.【人脸面部活体检测系统开发】
5.【图片风格快速迁移软件开发】 6.【人脸表表情识别系统】
7.【YOLOv8多目标识别与自动标注软件开发】 8.【基于深度学习的行人跌倒检测系统】
9.【基于深度学习的PCB板缺陷检测系统】 10.【基于深度学习的生活垃圾分类目标检测系统】
11.【基于深度学习的安全帽目标检测系统】 12.【基于深度学习的120种犬类检测与识别系统】
13.【基于深度学习的路面坑洞检测系统】 14.【基于深度学习的火焰烟雾检测系统】
15.【基于深度学习的钢材表面缺陷检测系统】 16.【基于深度学习的舰船目标分类检测系统】
17.【基于深度学习的西红柿成熟度检测系统】 18.【基于深度学习的血细胞检测与计数系统】
19.【基于深度学习的吸烟/抽烟行为检测系统】 20.【基于深度学习的水稻害虫检测与识别系统】
21.【基于深度学习的高精度车辆行人检测与计数系统】 22.【基于深度学习的路面标志线检测与识别系统】
23.【基于深度学习的智能小麦害虫检测识别系统】 24.【基于深度学习的智能玉米害虫检测识别系统】
25.【基于深度学习的200种鸟类智能检测与识别系统】 26.【基于深度学习的45种交通标志智能检测与识别系统】
27.【基于深度学习的人脸面部表情识别系统】 28.【基于深度学习的苹果叶片病害智能诊断系统】
29.【基于深度学习的智能肺炎诊断系统】 30.【基于深度学习的葡萄簇目标检测系统】
31.【基于深度学习的100种中草药智能识别系统】 32.【基于深度学习的102种花卉智能识别系统】
33.【基于深度学习的100种蝴蝶智能识别系统】 34.【基于深度学习的水稻叶片病害智能诊断系统】
35.【基于与ByteTrack的车辆行人多目标检测与追踪系统】 36.【基于深度学习的智能草莓病害检测与分割系统】
37.【基于深度学习的复杂场景下船舶目标检测系统】 38.【基于深度学习的农作物幼苗与杂草检测系统】
39.【基于深度学习的智能道路裂缝检测与分析系统】 40.【基于深度学习的葡萄病害智能诊断与防治系统】
41.【基于深度学习的遥感地理空间物体检测系统】 42.【基于深度学习的无人机视角地面物体检测系统】
43.【基于深度学习的木薯病害智能诊断与防治系统】 44.【基于深度学习的野外火焰烟雾检测系统】
45.【基于深度学习的脑肿瘤智能检测系统】 46.【基于深度学习的玉米叶片病害智能诊断与防治系统】
47.【基于深度学习的橙子病害智能诊断与防治系统】 48.【基于深度学习的车辆检测追踪与流量计数系统】
49.【基于深度学习的行人检测追踪与双向流量计数系统】 50.【基于深度学习的反光衣检测与预警系统】
51.【基于深度学习的危险区域人员闯入检测与报警系统】 52.【基于深度学习的高密度人脸智能检测与统计系统】
53.【基于深度学习的CT扫描图像肾结石智能检测系统】 54.【基于深度学习的水果智能检测系统】
55.【基于深度学习的水果质量好坏智能检测系统】 56.【基于深度学习的蔬菜目标检测与识别系统】
57.【基于深度学习的非机动车驾驶员头盔检测系统】 58.【太基于深度学习的阳能电池板检测与分析系统】
59.【基于深度学习的工业螺栓螺母检测】 60.【基于深度学习的金属焊缝缺陷检测系统】
61.【基于深度学习的链条缺陷检测与识别系统】 62.【基于深度学习的交通信号灯检测识别】
63.【基于深度学习的草莓成熟度检测与识别系统】 64.【基于深度学习的水下海生物检测识别系统】
65.【基于深度学习的道路交通事故检测识别系统】 66.【基于深度学习的安检X光危险品检测与识别系统】
67.【基于深度学习的农作物类别检测与识别系统】 68.【基于深度学习的危险驾驶行为检测识别系统】
69.【基于深度学习的维修工具检测识别系统】 70.【基于深度学习的维修工具检测识别系统】
71.【基于深度学习的建筑墙面损伤检测系统】 72.【基于深度学习的煤矿传送带异物检测系统】
73.【基于深度学习的老鼠智能检测系统】 74.【基于深度学习的水面垃圾智能检测识别系统】
75.【基于深度学习的遥感视角船只智能检测系统】 76.【基于深度学习的胃肠道息肉智能检测分割与诊断系统】
77.【基于深度学习的心脏超声图像间隔壁检测分割与分析系统】 78.【基于深度学习的心脏超声图像间隔壁检测分割与分析系统】
79.【基于深度学习的果园苹果检测与计数系统】 80.【基于深度学习的半导体芯片缺陷检测系统】
81.【基于深度学习的糖尿病视网膜病变检测与诊断系统】 82.【基于深度学习的运动鞋品牌检测与识别系统】
83.【基于深度学习的苹果叶片病害检测识别系统】 84.【基于深度学习的医学X光骨折检测与语音提示系统】
85.【基于深度学习的遥感视角农田检测与分割系统】 86.【基于深度学习的运动品牌LOGO检测与识别系统】
87.【基于深度学习的电瓶车进电梯检测与语音提示系统】 88.【基于深度学习的遥感视角地面房屋建筑检测分割与分析系统】
89.【基于深度学习的医学CT图像肺结节智能检测与语音提示系统】 90.【基于深度学习的舌苔舌象检测识别与诊断系统】
91.【基于深度学习的蛀牙智能检测与语音提示系统】 92.【基于深度学习的皮肤癌智能检测与语音提示系统】
93.【基于深度学习的工业压力表智能检测与读数系统】 94.【基于深度学习的CT扫描图像肝脏肿瘤智能检测与分析系统】
95.【基于深度学习的CT扫描图像脑肿瘤智能检测与分析系统】 96.【基于深度学习的甲状腺结节智能检测分割与诊断系统】
97.【基于深度学习的车载视角路面病害检测系统】 98.【基于深度学习的宫腔镜病变智能检测与语音提示系统】
99.【基于深度学习的人群密集检测统计分析与报警系统】 100.【基于深度学习的路面积水智能检测分割与分析系统】
101.【基于深度学习的钢丝绳缺陷检测与语音提示系统】 102.【基于深度学习的无人机视角河道水面垃圾检测系统】
103.【基于深度学习的停车场车位智能检测识别系统】 104.【基于深度学习的无人机视角野外搜救人员检测与语音提示系统】
105.【基于深度学习的无人机视角路面病害检测识别系统】 106.【基于深度学习的无人机红外视角海上搜救人员检测与语音提示系统】
107.【基于深度学习的交警手势识别系统】 108.【基于深度学习的红外图像光伏板热斑缺陷检测与语音提示系统】
109.【基于深度学习的风力机缺陷检测与语音提示系统】 110.【基于深度学习的茶叶病害智能检测识别系统】
111.【基于深度学习的铁轨部件缺陷检测与语音提示系统】 112.【基于深度学习的无人机视角车辆检测系统】

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

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

目录

引言

在2026年的计算机视觉(CV)开发中,打造高性能检测模型不该再是"手动标数据"的体力活。传统CV项目里,开发者往往要耗费数百小时手动框选目标、标注数据,很多雄心勃勃的项目都折在了这个"数据瓶颈"上。

而今天要分享的这套流程,能把原本数周的手动标注工作压缩到几分钟------通过Grounded-SAM和Autodistill搭建"教师-学生"模型架构,让AI自动识别并精准标注目标(比如蜜蜂、花朵),最终训练出可落地的YOLO11模型。无论你是做生物多样性研究、毕业设计,还是工业级检测应用,这套自动化数据标注流程都能让你把精力聚焦在模型优化和落地,而非重复劳动。

一、为什么自动化数据标注是必选项?

现代AI开发的核心瓶颈早已不是神经网络本身,而是高质量训练数据的生成。手动标注不仅效率低,还容易因疲劳、主观判断导致标注不一致;而自动化数据标注则依托预训练大模型(Grounded-SAM)的"零样本检测"能力,通过简单的文本指令就能批量生成高精度的边界框和分割掩码,既保证标注质量,又能处理远超人工规模的数据集。

整个流程的核心是"模型蒸馏":用大而强的Grounded-SAM(教师模型)自动标注数据,再把这些标注数据喂给轻量、高速的YOLO11(学生模型)训练,最终得到既精准又易部署的检测模型。

二、第一步:搭建稳定的AI开发环境

自动化标注依赖CUDA、PyTorch、Ultralytics等工具的特定版本,环境冲突是最容易踩的坑。因此第一步要搭建独立的Conda环境,避免全局库冲突,保证流程可复现。

为什么必须用独立Conda环境?

Conda环境能隔离项目依赖,确保CUDA 12.8、PyTorch 2.9.1等核心库的版本适配,让自动化标注脚本在不同机器上都能稳定运行。

环境配置代码

shell 复制代码
# 1. 创建名为GroundedSam的虚拟环境(Python 3.11)
conda create --name GroundedSam python=3.11
# 2. 激活环境
conda activate GroundedSam
# 3. 检查NVIDIA编译器版本(确认CUDA 12.8)
nvcc --version

# 4. 安装适配CUDA 12.8的PyTorch套件
pip install torch==2.9.1 torchvision==0.24.1 torchaudio==2.9.1 --index-url https://download.pytorch.org/whl/cu128      

# 5. 安装YOLO11核心库
pip install ultralytics==8.3.50

# 6. 安装自动化标注相关库
pip install autodistill==0.1.29          # Autodistill核心(模型蒸馏)
pip install autodistill-grounded-sam==0.1.0  # Grounded-SAM插件
pip install autodistill-yolov11==0.1.4   # YOLO11插件
pip install scikit-learn==1.6.1          # 数据分割与评估
pip install roboflow==1.1.50             # 数据集管理
pip install Transformers==4.29.2         # 模型权重管理
pip install opencv-python==4.11.0.86     # 图像处理(无头版本)

三、第二步:视频抽帧,生成高质量训练样本

原始视频无法直接用于训练,需要先提取关键帧作为标注素材。用Supervision库抽帧比手动截图更高效:可自定义"帧间隔",既保证样本多样性,又避免冗余。

关键概念:帧间隔(FRAME_STRIDE)

帧间隔指每跳过多少帧保存一张图片,比如设为5,就是每5帧保存1张。合理的帧间隔能避免数据集全是相似画面,让模型学到更多视角,同时提升后续自动化标注的效率。

视频抽帧代码

python 复制代码
import os 
import supervision as sv 
from tqdm import tqdm

# 配置路径(根据自己的文件位置修改)
VIDEO_DIR_PATH = "Trainvideos"  # 原始视频路径
IMAGE_DIR_PATH = "D:/Data-Sets-Object-Detection/Bees/images"  # 抽帧后图片保存路径
FRAME_STRIDE = 5  # 每5帧保存1张

# 筛选视频文件(仅处理mov/mp4)
video_paths = sv.list_files_with_extensions(
    directory=VIDEO_DIR_PATH,
    extensions=["mov","mp4"] )
print("找到的视频文件:", video_paths)

# 批量抽帧
for video_path in tqdm(video_paths) :
    video_name = video_path.stem  # 获取视频名(不含后缀)
    image_name_pattern = video_name + "-{:05d}.png"  # 生成图片命名规则

    # 抽帧并保存
    with sv.ImageSink(target_dir_path=IMAGE_DIR_PATH, image_name_pattern=image_name_pattern) as sink :
        for image in sv.get_video_frames_generator(source_path=str(video_path), stride=FRAME_STRIDE) :
            sink.save_image(image=image)

# 验证抽帧结果
image_paths = sv.list_files_with_extensions(
    directory=IMAGE_DIR_PATH,
    extensions=["png", "jpg", "jpeg"] )
print("抽帧完成!共提取图片数量:", len(image_paths))

四、第三步:AI自动标注

这是自动化标注的核心步骤------用CaptionOntology(描述性本体)通过自然语言告诉AI要标注的目标。比如告诉它"a bee"对应标签"bee",Grounded-SAM就能基于预训练的语义理解能力,自动识别图片中的蜜蜂并标注,无需手动框选。

灵活适配任意目标

这套逻辑不局限于蜜蜂/花朵:只需修改文本指令(比如把"a bee"改成"一辆汽车""一个零件"),AI就能适配任意检测场景,堪称通用的自动化标注模板。

自动标注代码

python 复制代码
from autodistill.detection import CaptionOntology
from autodistill_grounded_sam import GroundedSAM

# 1. 定义标注规则:自然语言描述 → 数据集标签
ontology = CaptionOntology({
    "a bee" : "bee",    # 识别蜜蜂,标注为bee
    "a flower" : "flower"  # 识别花朵,标注为flower
})

# 2. 配置路径(根据自身情况修改)
IMAGE_DIR_PATH = "D:/Data-Sets-Object-Detection/Bees/images"  # 抽帧后的图片路径
DATASET_DIR_PATH = "D:/Data-Sets-Object-Detection/Bees/dataset"  # 标注后数据集保存路径

# 3. 初始化Grounded-SAM模型,执行自动标注
base_model = GroundedSAM(ontology=ontology)
dataset = base_model.label(
    input_folder=IMAGE_DIR_PATH,
    output_folder=DATASET_DIR_PATH,
    extension='.png'
)

运行后,AI会自动生成YOLO格式的标注文件,甚至会帮你创建data.yaml配置文件(告诉YOLO数据集路径和类别),直接用于后续训练。

五、第四步:可视化验证,确保标注质量

虽然Grounded-SAM标注精度极高,但仍需抽样验证,避免因文本指令模糊导致标注错误。我们可以随机抽取16张标注后的图片,叠加边界框、分割掩码和标签,直观检查标注效果。

标注验证代码

python 复制代码
import supervision as sv 
from pathlib import Path
import random 

# 配置路径
ANNOTATIONS_DIRECTORY_PATH = "D:/Data-Sets-Object-Detection/Bees/dataset/train/labels"  # 标注文件路径
IMAGES_DIRECTORY_PATH = "D:/Data-Sets-Object-Detection/Bees/dataset/train/images"        # 图片路径
DATA_YAML_PATH = "D:/Data-Sets-Object-Detection/Bees/dataset/data.yaml"                  # 配置文件路径

# 加载数据集
dataset = sv.DetectionDataset.from_yolo(
    images_directory_path=IMAGES_DIRECTORY_PATH,
    annotations_directory_path=ANNOTATIONS_DIRECTORY_PATH,
    data_yaml_path=DATA_YAML_PATH)
print("标注数据集大小:", len(dataset))

# 配置可视化参数
SAMPLE_SIZE = 16          # 抽样数量
SAMPLE_GRID_SIZE = (4,4)  # 展示网格(4×4)
SAMPLE_PLOT_SIZE = (16,10)# 展示尺寸

# 初始化标注可视化工具
mask_annotator = sv.MaskAnnotator()   # 分割掩码标注器
box_annotator = sv.BoxAnnotator()     # 边界框标注器
label_annotator = sv.LabelAnnotator() # 标签标注器

# 随机抽样
dataset_indices = list(range(len(dataset)))
random.shuffle(dataset_indices)

# 批量生成可视化图片
images = [] 
images_names = []
for i in dataset_indices[:SAMPLE_SIZE] :
    image_path , image , annotation = dataset[i]
    
    annotated_image = image.copy() 
    # 叠加分割掩码
    annotated_image = mask_annotator.annotate(
        scene=annotated_image,
        detections=annotation)
    # 叠加边界框
    annotated_image = box_annotator.annotate(
        scene=annotated_image,
        detections=annotation)
    # 叠加标签
    annotated_image = label_annotator.annotate(
        scene=annotated_image,
        detections=annotation)
    
    images_names.append(Path(image_path).name)
    images.append(annotated_image)

# 展示可视化结果
sv.plot_images_grid(
    images=images,
    titles=images_names,
    grid_size=SAMPLE_GRID_SIZE,
    size=SAMPLE_PLOT_SIZE)

六、第五步:训练YOLO11模型

有了高质量的自动化标注数据,训练YOLO11就成了"水到渠成"的事。这一步的核心是"模型蒸馏":把Grounded-SAM的"知识"浓缩到轻量的YOLO11中,得到既精准又高速的检测模型。

关键参数解释

  • 轮次(Epoch):整个数据集完整过一遍神经网络算1个轮次,300轮能让模型充分学习目标特征,保证精度;
  • 批次大小(Batch Size):32是兼顾GPU显存和训练效率的取值,显存不足可改为16;
  • Patience:若40轮内模型精度无提升,自动停止训练,避免过拟合。

YOLO11训练代码

python 复制代码
from ultralytics import YOLO

def main():
    # 1. 加载预训练YOLO11小模型(yolo11s.pt)
    model = YOLO("yolo11s.pt")

    # 2. 配置数据集配置文件路径
    config_file_path = "D:/Data-Sets-Object-Detection/Bees/dataset/data.yaml"

    # 3. 配置训练结果保存路径
    project = "d:/temp/model/Bees-model"  # 项目根路径
    experiment = "Bees-small"             # 实验名称

    # 4. 训练参数配置
    batch_size = 32  # 批次大小(显存不足改16)

    # 5. 执行训练
    results = model.train( 
        data=config_file_path,
        epochs = 300,        # 训练轮次
        project=project ,    # 结果保存根路径
        name = experiment,   # 实验名称
        batch = batch_size , # 批次大小
        device = 0 ,         # 使用第0块GPU(CPU训练可删此参数)
        patience = 40 ,      # 早停阈值
        imgsz=640 ,          # 输入图片尺寸
        verbose = True,      # 打印详细日志
        val= True            # 训练时同步验证
    )

if __name__ == "__main__":
    main()

训练完成后,会生成best.pt权重文件------这就是可直接部署的YOLO11模型。

七、第六步:实战验证

最后一步是用未见过的测试视频验证模型效果,看看自动化标注训练出的模型能否在真实场景中精准检测目标。

视频推理代码

python 复制代码
import cv2 
import os 
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
from ultralytics import YOLO

# 1. 加载训练好的模型权重
WEIGHTS_PATH = "d:/temp/model/Bees-model/Bees-small/weights/best.pt"
model = YOLO(WEIGHTS_PATH)

# 2. 配置测试视频路径(修改为自己的测试视频)
INPUT_VIDEO_PATH = "Best-Object-Detection-models/Yolo-V11/GroundedSAM-Auto-Annotation - Bees/Videos/Test videos/test_video.mp4" 

# 3. 配置输出视频路径
input_folder = os.path.dirname(INPUT_VIDEO_PATH) 
input_filename = os.path.basename(INPUT_VIDEO_PATH)
output_video_path = os.path.join(input_folder , f"annotated_{input_filename}")

# 4. 打开测试视频
cap = cv2.VideoCapture(INPUT_VIDEO_PATH)
# 获取视频属性(分辨率、帧率)
frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
fps = cap.get(cv2.CAP_PROP_FPS)
fourcc = cv2.VideoWriter_fourcc(*"mp4v")

# 5. 初始化视频写入器(保存标注后的视频)
out = cv2.VideoWriter(output_video_path , fourcc , fps , (frame_width , frame_height))

# 6. 初始化Matplotlib可视化窗口
fig , ax = plt.subplots(figsize=(12,8))
frame_display = None 

# 7. 定义帧处理函数(逐帧推理+标注)
def update_frame(_):
    global frame_display 

    # 读取单帧
    success , frame = cap.read()
    if not success :
        return
    
    # YOLO11推理
    results = model(frame) 

    # 叠加检测结果(边界框+标签)
    annotated_frame = results[0].plot()

    # 保存标注帧到输出视频
    out.write(annotated_frame)

    # 转换色彩空间(适配Matplotlib显示)
    annotated_frame = cv2.cvtColor(annotated_frame , cv2.COLOR_BGR2RGB)

    # 更新可视化窗口
    if frame_display is None :
        frame_display = ax.imshow(annotated_frame)
    else :
        frame_display.set_data(annotated_frame)

# 8. 配置可视化样式
plt.axis("off")
ani = FuncAnimation(fig , update_frame , interval=100 // fps)

# 9. 展示实时推理结果
plt.show()

# 10. 释放资源
cap.release()
out.release()
print(f"标注后的视频已保存至:{output_video_path}")

八、常见问题解答

Q:自动化数据标注到底是什么?

A:依托预训练大模型,通过文本指令自动识别并标注图片中的目标,替代人工框选,大幅提升数据生成效率。

Q:Autodistill是免费的吗?

A:是的!Autodistill是Roboflow开发的开源框架,可免费使用大模型训练轻量检测模型。

Q:多少张图片能训练出好用的模型?

A:取决于场景复杂度,通常几百张自动化标注的高质量图片,就能训练出效果优秀的YOLO11模型。

Q:data.yaml文件有什么用?

A:YOLO的核心配置文件,定义了数据集路径、类别名称等关键信息,Autodistill会自动生成。

Q:Grounded-SAM标注比人工好吗?

A:速度上远超人工;精度上,对于有机形状(如蜜蜂、花朵)的标注一致性,往往优于人工。

总结

从原始视频到可落地的YOLO11模型,这套流程彻底绕开了"手动标注"的痛点。依托Grounded-SAM的零样本能力和Autodistill的模型蒸馏逻辑,我们把CV开发的核心从"体力活"拉回"创造力"------不用再纠结标注是否准确、数据是否足够,而是聚焦模型优化和业务落地。

2026年的CV开发,早已不是"谁标数据更快",而是"谁能更快把想法变成可用的模型"。这套自动化标注流程,就是你提升开发效率、构建竞争力的核心工具。


好了,这篇文章就介绍到这里,喜欢的小伙伴感谢给点个赞和关注,更多精彩内容持续更新~~
关于本篇文章大家有任何建议或意见,欢迎在评论区留言交流!

相关推荐
-cywen-12 天前
SAM2
sam
bryant_meng4 个月前
【SAMv1】 The “Segment Anything” Revolution in Computer Vision
人工智能·深度学习·计算机视觉·大模型·sam·分割一切
昵称是6硬币8 个月前
SAM3D论文精读(逐段解析)
sam·三维重建·视觉大模型·sam3d
昵称是6硬币8 个月前
MobileSAM论文精读(逐段解析)
sam·蒸馏·视觉大模型·mobilesam
昵称是6硬币8 个月前
MobileSAMv2论文精读(逐段解析)
sam·视觉大模型·mobilesam·mobilesamv2
阿_旭9 个月前
YOLO与SAM实战:目标检测与图像分割的高效融合方案
人工智能·yolo·目标检测·sam
WWZZ20259 个月前
快速上手大模型:实践(Grounded-SAM2与Depth Anything V2)
大模型·sam·slam·多模态·具身智能·dino·grounded-sam2
_OP_CHEN9 个月前
【图像分割大模型】突破少样本分割瓶颈!CMaP-SAM 横空出世:收缩映射 + SAM 实现 71.1mIoU 巅峰性能
人工智能·深度学习·计算机视觉·大模型·图像分割·sam·医学人工智能
猛码Memmat10 个月前
SAM 3: Segment Anything with Concepts
计算机视觉·sam·语义分割