ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Ultralytics 自动标注指南:用 YOLO + SAM 快速生成实例分割数据集

Ultralytics 自动标注指南:用 YOLO + SAM 快速生成实例分割数据集 Ultralytics 自动标注指南用 YOLO SAM 快速生成实例分割数据集【免费下载链接】ultralyticsUltralytics YOLO26, YOLO11, YOLOv8 — object detection, instance segmentation, semantic segmentation, image classification, pose estimation, object tracking项目地址: https://gitcode.com/GitHub_Trending/ul/ultralyticsAuto-annotate自动标注是 Ultralytics 提供的批量数据标注工具它先用一个已训练好的 YOLO 检测模型圈出图像中的目标框再把每个目标框作为提示bbox prompt交给 SAMSegment Anything Model生成精确分割掩码最终直接输出 YOLO 格式的分割标注 txt 文件。读完本文你将掌握ultralytics.data.annotator.auto_annotate的完整用法、全部参数语义、输出格式约定以及如何用自动标注产出的标签继续训练分割模型。一、为什么需要自动标注人工标注分割数据集是计算机视觉项目中最耗时的一环——逐像素勾勒目标轮廓远比画矩形框昂贵。借助「检测 分割」双模型流水线可以在无人介入的情况下把大量无标注图片批量转化为可训练的分割标签检测模型确定「哪里有目标」输出目标类别与边界框分割模型利用边界框提示为每个目标生成精细掩码掩码归一化后被序列化为 YOLO 分割标签格式直接可供训练或验证使用。该功能在仓库中被多处正式文档引用原始 SAM 模型介绍见 docs/en/models/sam.mdSAM 2 见 docs/en/models/sam-2.mdSAM 3 见 docs/en/models/sam-3.md轻量版 docs/en/models/mobile-sam.md分段数据集章节见 docs/en/datasets/segment/index.md通用工具一章见 docs/en/usage/simple-utilities.md。二、快速上手最小可用示例核心入口函数为auto_annotate定义在 ultralytics/data/annotator.py内部封装了 YOLO 推理与 SAM 提示式分割的全过程。最简调用如下from ultralytics.data.annotator import auto_annotate auto_annotate( datapath/to/images, det_modelyolo26x.pt, sam_modelsam_b.pt, )按默认配置执行时data指向的文件夹内所有图片会被逐一处理yolo26x.pt负责检测也支持 YOLO11、YOLOv8 等任意可加载的 YOLO 权重sam_b.pt负责分割同时兼容 MobileSAM、SAM 2、SAM 3 权重运行完成后标注文件输出到data所在目录的同级位置目录名为数据文件夹名_auto_annotate_labels例如dataimages时会生成images_auto_annotate_labels/。需要注意该函数不返回任何值产物就是磁盘上逐张图片对应的.txt标签文件。三、参数详解auto_annotate的全部参数及默认值如下表所示与官方参数宏保持一致宏本体见 docs/macros/sam-auto-annotate.md参数类型默认值说明datastr必填存放待标注/待分割图片的目录路径det_modelstryolo26x.ptYOLO 检测模型路径用于初始目标检测sam_modelstrsam_b.ptSAM 分割模型路径支持 SAM、SAM 2、MobileSAM、SAM 3 权重devicestr计算设备如cuda:0、cpu传时自动检测设备conffloat0.25YOLO 检测置信度阈值用于过滤弱检测ioufloat0.45非极大值抑制NMS的 IoU 阈值用于剔除重叠框imgszint640图片缩放输入尺寸必须是 32 的倍数max_detfloat300单张图片最大检测数用于控制内存占用classeslist[int]None需要检测的类别索引列表如[0, 1]表示只保留 person 与 bicycleoutput_dirstrNone标注保存目录默认输出为data的同级data_auto_annotate_labels参数语义与取值建议conf置信度阈值仅保留置信度高于该值的检测框。调高可减少假阳性、让标签更干净但可能漏掉低置信度的真实目标若你的数据与预训练模型分布差异大建议先对少量图片目检再定值。iouNMS 阈值控制重叠框的合并强度。数值越小抑制越强、越少重叠框对密集小目标场景可适当调高避免多个紧邻目标被误并为同一个框。imgsz输入尺寸检测推理时的图片缩放边长需为 32 的倍数如 640、1280。更大的输入通常能提升小目标召回同时带来更高算力开销——这一倍数约束与 Ultralytics 推理前处理保持一致。max_det单图最大检测数上限越高单图可输出的目标越多但掩码推理与内存占用也随之上升默认 300 对大多数场景足够。classes类别过滤当只想标注部分类别时传入类别索引列表即可。注意类别索引对应det_model自身的类别顺序例如 COCO 检测模型下[0, 1]即 person 与 bicycle。device表示交给框架自动选择设备CUDA 可用则用 GPU也可显式指定cpu、cuda、cuda:0或0。det_model与sam_model共用同一设备参数。带自定义参数的完整示例from ultralytics.data.annotator import auto_annotate auto_annotate( datadatasets/new_domain/images, # 待标注图片目录 det_modelyolo26n.pt, # 轻量检测模型 sam_modelmobile_sam.pt, # 轻量分割模型降低显存/内存占用 devicecuda:0, # 显式指定 GPU conf0.3, # 更严格的置信度过滤 iou0.5, # 更宽松的 NMS 合并 imgsz1024, # 更高分辨率输入利于小目标 max_det500, # 允许单图更多目标 classes[0, 1], # 只标注 person、bicycle output_dirdatasets/new_domain/labels, )该示例与官方示例风格一致见 docs/en/usage/simple-utilities.md 中的 Auto Labeling / Annotations 一节。YOLO 模型与分割模型可以自由搭配例如用yolo26n.ptmobile_sam.pt换取吞吐量或用yolo26x.ptsam_b.pt换取精度。四、工作原理源码级解读auto_annotate的实现位于 ultralytics/data/annotator.py整个流程可以拆解为四步。4.1 模型加载与输出目录准备det_model YOLO(det_model) sam_model SAM(sam_model) data Path(data) if not output_dir: output_dir data.parent / f{data.stem}_auto_annotate_labels Path(output_dir).mkdir(exist_okTrue, parentsTrue)检测与分割模型分别通过YOLO()、SAM()构造器加载若不传output_dir默认输出目录由「数据目录的父目录 数据目录名 _auto_annotate_labels」拼接而成并自动递归创建。4.2 YOLO 批量检测det_results det_model( data, streamTrue, devicedevice, confconf, iouiou, imgszimgsz, max_detmax_det, classesclasses )检测采用streamTrue流式推理逐张图片返回结果避免一次性把所有图与预测结果载入内存。conf、iou、imgsz、max_det、classes等参数在此原样透传给检测推理对应预测模式参数约定见 docs/en/modes/predict.md 与 docs/macros/predict-args.md。4.3 SAM 提示式掩码生成for result in det_results: if class_ids : result.boxes.cls.int().tolist(): # Extract class IDs from detection results boxes result.boxes.xyxy # Boxes object for bbox outputs sam_results sam_model(result.orig_img, bboxesboxes, verboseFalse, saveFalse, devicedevice) segments sam_results[0].masks.xyn对每一张图片先取result.boxes.cls得到每个检测框的类别 id只有图片上检测到目标class_ids非空才会进入分割环节无目标图片会跳过、不产生标注文件将全部检测框以boxesXYXY 格式作为 SAM 提示传入一次调用为所有框批量生成掩码从sam_results[0].masks.xyn取出归一化分割多边形坐标值均在[0, 1]区间。SAM 推理器对 bbox 提示的支持可参见 ultralytics/models/sam/predict.py 中prompt_inference的相关说明。4.4 写出 YOLO 分割标签with open(f{Path(output_dir) / Path(result.path).stem}.txt, w, encodingutf-8) as f: for i, s in enumerate(segments): if len(s) 3: # fewer than 3 points is not a polygon, and writes a row no loader accepts segment map(str, s.reshape(-1).tolist()) f.write(f{class_ids[i]} .join(segment) \n)标签文件与源图片同名取result.path的文件主名扩展名为.txt每一行代表一个实例格式为class_id x1 y1 x2 y2 ... xn yn其中坐标全部是相对图片宽高的归一化浮点数与 Ultralytics 分割数据集使用的 YOLO 多边形标签约定一致。同时有两个容易踩坑的实现细节值得注意少于 3 个点的轮廓会被丢弃——两点/一点构不成多边形写出去也没有加载器能读取因此源码直接用len(s) 3做了过滤写入顺序与检测框顺序一一对应class_ids[i]是第i个分割轮廓的类别 id。产出标签的消费端同样是标准流水线分割训练时会读取这些归一化多边形并做重采样/格式化参见 ultralytics/data/dataset.py 中segments与normalized的处理逻辑因此无需额外转换即可直接送入训练。五、工程实践建议5.1 与segments2boxes联动生成检测标签若除了分割标签还需要检测框标签可配合将分割多边形转成边界框的segments2boxes工具见 docs/en/usage/simple-utilities.md用同一批自动标注结果同时支撑 detect 与 segment 两种任务的训练。5.2 训练前目检标注质量自动标注难免有漏检、误检或贴边掩码。训练前建议用visualize_image_annotations可视化标注工具同样见 docs/en/usage/simple-utilities.md将标签叠回原图检查修正明显错误后再投入训练避免错误标注污染模型。5.3 模型选型权衡追求速度与大图吞吐检测用yolo26n.pt/yolo11n.pt分割用mobile_sam.pt追求分割边界质量分割换成sam_b.pt乃至 SAM 2 / SAM 3 权重SAM 系列模型的能力演进详见 docs/en/models/sam-2.md 与 docs/en/models/sam-3.md设备受限仅 CPU显式传devicecpu并尽量选用轻量权重控制推理耗时。5.4 参考实现与更细粒度用法函数完整签名、docstring 与示例见 docs/en/reference/data/annotator.md其中锚点ultralytics.data.annotator.auto_annotate即本节所讲函数分段数据集页面的 Auto-Annotation 章节docs/en/datasets/segment/index.md介绍了与上述类似的最小示例及后续可视化流程。六、小结auto_annotate将「YOLO 出框、SAM 出掩码、归一化落盘」三步串成一条流水线无需编写任何提示工程代码即可把大规模无标注图片批量转成可直接训练的分割标签。本文完整覆盖了其参数表、最小/完整示例、源码级执行链路与工程化注意事项在 docs/en/models/sam.md、docs/en/models/mobile-sam.md、docs/en/datasets/segment/index.md 等页面中官方也以相同参数宏内嵌了该用法可作为进一步阅读的起点。【免费下载链接】ultralyticsUltralytics YOLO26, YOLO11, YOLOv8 — object detection, instance segmentation, semantic segmentation, image classification, pose estimation, object tracking项目地址: https://gitcode.com/GitHub_Trending/ul/ultralytics创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表