ARTICLE DETAIL

资讯详情

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

X-AnyLabeling、Grounded-SAM与autodistill自动标注全流程实战

X-AnyLabeling、Grounded-SAM与autodistill自动标注全流程实战 1. 全流程思路拆解三个工具各司其职先说说我为什么会把这几个工具凑到一起。过去做目标检测项目最头疼的就是标注阶段。一个中等规模的数据集几千张图就算两个人专职标注画框、抠轮廓、复审、改错没有一两周根本下不来。后来我陆续接触了 X-AnyLabeling、Grounded-SAM 和 autodistill发现它们恰好覆盖了自动标注的三个不同层次组合起来能省掉大部分手工劳动。1.1 三个工具的分工逻辑很多朋友刚开始接触自动标注时容易把它们当成同一类东西实际上三者差别很大。我给它们一个简单的定位X-AnyLabeling 是带图形界面的标注工作台负责“人来审核修正”Grounded-SAM 是自动生成标注的核心引擎负责“文本提示转检测结果”autodistill 是无人值守的流水线负责“批量产出训练数据并完成模型蒸馏”。X-AnyLabeling 的前身是 AnyLabeling基于 PyQt5 开发界面风格跟 LabelImg 很像但能力天差地别。它最大的价值在于内置了大量推理引擎包括 YOLO 系列、SAM、EfficientSAM、GroundingDINO 等。也就是说你不只是用它画框而是可以让它调用模型自动出框你只需要检查修正。这个交互模式对工程落地特别重要因为完全无人参与的自动标注在工业场景里基本不可靠总有边缘案例需要人工兜底。Grounded-SAM 是 GroundingDINO 和 SAM 的组合GroundingDINO 负责根据文本描述找出目标位置输出边界框SAM 负责对这些边界框做像素级分割输出精细掩膜。这个组合解决了传统标注里最费力的“抠轮廓”问题——以前用 LabelMe 一个点一个点描边现在只需要写一句文本提示。autodistill 则是 Roboflow 推出的半自动标注框架。它的核心思路是“大模型标注小模型学习”用 GroundedSAM 这类基础模型作为 teacher自动给一批未标注图片打上标签然后用这些标签去训练 YOLOv8 这类轻量 student 模型。这个过程反复迭代最终得到一个又快又准的自有模型后续新数据进来就能用它直接给出初标结果。1.2 一套完整的工作流是什么样我目前项目的标准流程大概是这样的先准备一小批图片50到100张用 X-AnyLabeling 加载 Grounded-SAM通过文本提示自动生成初标人工快速修一遍筛掉明显错误的框。把这批初标结果整理成 COCO 或 YOLO 格式交给 autodistill 作为验证集同时让它用 GroundedSAM 对剩余的全部未标注图片做批量自动标注。用自动标注结果训练一个 YOLOv8n 或 YOLOv8s 模型作为第一版 student 模型。把 student 模型加载回 X-AnyLabeling对第二轮新增数据进行预标注人工只做修正修正结果再反馈给模型做增量训练。这套流程走下来纯手工标注比例能降到原来的两成左右而且质量比全人工更稳定。后面我详细拆每个环节的操作细节和踩过的坑。2. X-AnyLabeling 环境部署与源码运行X-AnyLabeling 官方提供了打包好的可执行文件Windows 下直接下载就能用。但如果想在 PyCharm 里跑源码、改代码、调试自己的模型就需要手动部署环境。自动标注流程里源码运行几乎是必须的因为要接入自定义模型或者修改后处理逻辑闭源打包版做不到这些。2.1 源码环境准备先从 GitHub 拉取仓库关键字 X-AnyLabeling这个项目由 CVHub 团队维护然后按下面的步骤准备环境。我用的是 Windows Python 3.9 的组合实测兼容性最好。Python 3.10、3.11 也可以但部分依赖需要手动指定版本不建议新手一上来就用最新版 Python。git clone https://github.com/CVHub520/X-AnyLabeling.git cd X-AnyLabeling python -m venv venv venv\Scripts\activate pip install -r requirements.txt这里分享一个重要的经验不要用pip install -r requirements.txt一把梭。这个文件锁定的版本号比较激进尤其 PyQt5 和 onnxruntime 的版本组合直接安装大概率会踩到冲突。我更推荐分步安装核心依赖pip install PyQt55.15.9 pip install onnxruntime1.16.3 pip install ultralytics8.0.200 pip install opencv-python4.8.1.78 pip install shapely2.0.2 pip install pyyaml pip install labelme分步安装的意义在于能精准定位问题。如果一次性装完再报错你根本不知道是哪个包引起的。另外注意shapefile这个包名曾经在旧版本里出现过新版本已经改名为shapely如果遇到导入错误先检查这个名字。装完依赖后我习惯额外安装一个screeninfo库用来解决多显示器环境下窗口初始化的异常。这个问题在 X-AnyLabeling 老版本里挺常见不装的话偶尔会提示找不到合适的显示设备。2.2 PyCharm 运行配置在 PyCharm 中打开项目根目录后先确认解释器设置为刚才创建的虚拟环境。然后配置运行入口主程序文件是main.py但直接运行可能会报缺少anylabeling包的错误这是因为项目里anylabeling目录没有作为源码根目录被识别。解决办法有两种。第一种在 PyCharm 中右键anylabeling文件夹选择“Mark Directory as → Sources Root”。第二种运行前设置环境变量PYTHONPATH项目根目录的绝对路径我试过第一种简单直接。配置完成后点击运行几秒钟后就会出现标注界面。如果界面能正常打开说明环境没问题。如果卡在启动画面或者秒退多半是 PyQt5 和 onnxruntime 的 DLL 加载冲突先卸载重装这两个包把 PyQt5 固定到 5.15.9问题基本能解决。2.3 快捷键与标注效率X-AnyLabeling 的快捷键体系是用好它的基础。很多新手只会在界面里点来点去效率比 LabelImg 还低实际上它的快捷键设计极大优化了“模型预标注 人工修正”的流程。我总结一下最常用的几个快捷键和它们的使用场景快捷键功能我的使用习惯W创建矩形框模型漏标时手动补框E创建橡皮擦擦除 SAM 分割结果的边缘毛刺A / D上一张 / 下一张图连续审核时几乎只用这两个键CtrlS保存当前标注每改完一张立刻保存CtrlZ撤销上一步手滑删错标注时的后悔药Delete删除选中标注批量清理明显错误的框P创建多边形处理非矩形目标的精细标注M拖动画布放大后定位细节区域快捷键能极大提速但真正让效率产生质变的是结合模型的预标注。我的操作节奏是按住 D 翻图看到检测结果不对就先记下来不急着改先快速看完一批然后把有问题的图翻回去集中修正。这样做的好处是减少鼠标在工具栏和画布之间来回切换的频率专注力也不容易被打断。还有一个小技巧在标注界面的右上角设置里可以调整“自动保存”间隔。我把自动保存关掉全部改成手动 CtrlS。原因是自动保存偶尔会在你还在调整框的时候写盘如果程序崩溃最后一步的调整就丢了手动保存反而更可控。3. X-AnyLabeling 自动标注功能实战X-AnyLabeling 能自动标注靠的不是软件本身的魔法而是它内置了多个模型推理引擎。在左侧模型加载区你可以选择不同的模型组合最常用的是“GroundingDINO SAM”组合也就是常说的 Grounded-SAM 流程。3.1 模型加载与配置参数打开标注界面后左侧模型下拉框里找到 GroundingDINO 相关的选项。新版 X-AnyLabeling 把 GroundingDINO 和 EfficientSAM 分开列出来如果是第一次用需要下载对应的模型权重文件。这里特别注意模型文件不要下载后直接丢到项目目录里不管。X-AnyLabeling 对模型路径有约定需要在anylabeling/configs下面创建对应的模型配置文件里面写明权重路径和输入尺寸。写错了路径也能启动但加载模型时会卡很久然后报“Cannot open file”的错误。以 GroundingDINO 的配置为例我贴一段我常用的配置文件内容type: groundingdino name: GroundingDINO_Plus display_name: GroundingDINO Plus (Swin-T) model_config_path: grounding_dino_swin_t_cfg.py model_weight_path: groundingdino_swint_ogc.pth max_text_len: 256 box_threshold: 0.25 text_threshold: 0.25box_threshold和text_threshold这两个参数决定了检测结果的灵敏度。box_threshold控制边界框的置信度阈值值越低模型越激进会框出更多候选目标但误检也多text_threshold控制文本描述的匹配阈值值越低文本描述的容忍度越高同义词、上位词也能触发检测。我在实际调参过程中发现一个规律当目标遮挡严重、小目标居多时box_threshold要降到 0.2 左右当场景干净、目标完整时0.3 以上更合适误检率能明显降低。而text_threshold一般保持在 0.25 就行这个值在官方模型上表现最平衡。3.2 两种自动标注工作流的实战对比X-AnyLabeling 支持两种自动标注的触发方式新手经常混淆。第一种是“先选模型再画提示”。比如你加载了 EfficientSAM 模型然后在图上框选一个区域模型会自动分割出该区域内的目标轮廓。这种方式适合你已经大致知道目标在哪只是懒得精细描边的情况。它本质上是人工给定位置先验模型负责细化。第二种是“文本提示驱动”。在模型配置里选 GroundingDINO SAM然后在文本输入框里输入目标类别比如输入“crack”点击检测GroundingDINO 会扫描整张图找出所有可能属于裂纹的区域并生成框SAM 再对这些框做分割。这种方式适合批量初标你连位置都不需要手动指定。我的建议是混合使用大批量粗标用第二种拿到候选框后再用第一种方式对单个难例做二次精修。这样既保证了效率又兼顾了质量。3.3 标注结果导出的格式陷阱标注完成后导出格式的选择也直接影响后续流程。X-AnyLabeling 支持导出为 COCO 格式、YOLO 格式和 VOC 格式。这里踩过一个很深的坑YOLO 格式的类别编号必须从 0 开始连续编号但 X-AnyLabeling 在导出时如果某个类别没有任何标注对象会自动跳过导致类别编号不连续。比如你定义了 5 个类别第 3 类在一张图里没有目标导出后这张图的标注文件里后面的类别编号就串位了。后续训练 YOLO 时类别对应关系全乱。解决方法是导出一个完整的 COCO 格式文件作为备份同时维护一份类别映射表。我通常用 Excel 或者直接写个 Python 脚本把类别 ID 和名称绑定记录每次导出后自动检查一遍编号连续性再丢给 YOLO 训练。另外导出的标注文件默认存放在图片同目录下这会让文件夹变得很乱。建议在导出之前在设置里把保存路径改到独立的 labels 目录或者用我接下来要讲的 autodistill 统一管理数据集结构这个痛点会小很多。4. Grounded-SAM 集成从文本提示到精准分割Grounded-SAM 算是整个自动标注流程里的“发动机”。很多教程把它讲得很玄从原理到公式实际上它的运行逻辑很直接一句话就能说清先用检测模型找到“东西在哪”再用分割模型把“这个东西的精确边界”抠出来。4.1 GroundingDINO 检测器的工作原理解读GroundingDINO 是典型的多模态检测模型它把文本编码器和图像编码器融合在一起通过注意力机制让文本描述和图像区域建立对应关系。你可以把它理解成一个“听得懂人话”的目标检测器。在 X-AnyLabeling 里配置 GroundingDINO 时很多朋友困惑于text_threshold的作用。我举个例子解释一下你输入“person”这个文本模型会把文本编码成一个特征向量。在图像中模型会对每个候选区域也生成一个特征向量然后计算两者之间的相似度。text_threshold就是判断这个相似度达到多少才算匹配成功。如果设置成 0.1那狗、雕像只要长得像人的东西都会被框出来设置成 0.5又可能漏掉穿得严严实实只露半张脸的人。在实际项目里我的经验是不要追求一个万能阈值而是针对每批图片的特点动态调整。比如质检场景下光照变化大我会先用低阈值跑一遍得到一批候选目标再由人工快速过滤而不是一开始就用高阈值追求精准检测。低阈值带来的少量误检人工删除的成本远低于高阈值带来的漏检因为漏检意味着你要完全手动画框。4.2 SAM 分割与掩膜优化技巧SAMSegment Anything Model是 Meta 推出的分割大模型它接受点、框、文本等多种提示输出高质量的掩膜。在自动标注流程中SAM 的输入是 GroundingDINO 生成的边界框输出是该目标的像素级掩膜。常见的问题是SAM 分割出的掩膜边缘太干净甚至“过于完美”反而不符合某些工业场景的真实需求。比如划痕检测中SAM 会把划痕周围颜色相近的区域也分割进来导致掩膜范围偏大。遇到这类问题我会做两个调整一是把 GroundingDINO 的box_threshold调高让输入框更精确二是利用 X-AnyLabeling 的橡皮擦工具手动修掉多余部分。这里有一个技术细节SAM 的 ONNX 模型有不同尺寸X-AnyLabeling 默认使用的是 ViT-B 版本的量化模型精度略低但速度快。如果项目对掩膜精度要求极高可以考虑加载 ViT-L 版本的 SAM代价是单张图的推理时间从 1 到 2 秒变成 5 到 8 秒。我用过 ViT-L 版本检测精度确实有提升但批量标注的速度会拖累整体效率除非是医学影像或高精度工业场景否则不推荐。4.3 在 X-AnyLabeling 中编排 Grounded-SAM 完整流程X-AnyLabeling 官方没提供一键式 Grounded-SAM 按钮需要手动把 GroundingDINO 和 EfficientSAM 或 SAM 串起来。具体操作流程我在实际项目中已经跑顺了写在这里供大家参考在左侧模型下拉框中选择GroundingDINO_Plus作为检测模型再在另一个模型下拉框中选择EfficientSAM作为分割模型。在文本输入框填写目标提示词支持英文和中文但英文效果通常更好。Grounded-SAM 的多语言能力有限中文提示词的误检率比英文高建议关键项目用英文提示词。点击“Run Inference”观察检测候选框是否覆盖所有目标。如果漏检严重调低box_threshold如果误检太多调高text_threshold。确认候选框符合预期后点击“Run Segmentation”SAM 会为每个框生成掩膜。最后人工快速巡视一遍用快捷键 E 擦除多余掩膜用 W 补画漏检目标。整个过程看起来简单但有一个很容易被忽略的细节每次运行推理前要清空已有标注层。如果图上已经有之前生成的标注X-AnyLabeling 不会自动覆盖而是叠加显示导致导出时出现重复标注。手动清空的操作是选中全部标注CtrlA然后按 Delete 删除。5. autodistill 构建半自动标注流水线如果说 X-AnyLabeling 解决的是“人在回路中”的标注效率问题那 autodistill 解决的就是“无人值守”的批量标注问题。这一步是自动标注流程能否规模化应用的关键。5.1 autodistill 的核心概念与安装autodistill 的架构用一个简单的类比来说它像工厂里的师徒制。老师傅teacher 模型技术好但成本高、速度慢学徒student 模型便宜、快但刚开始什么都不会。老师傅先手把手教徒弟做一批活儿徒弟做完后用这些成果来练习直到学徒的水平达到可以独立接活的标准。安装 autodistill 及其配套模块十分简单pip install autodistill autodistill-grounded-sam autodistill-yolov8注意autodistill-grounded-sam 依赖环境变量或者已有的 GPU 配置。如果是在 CPU 环境下运行速度会很慢但功能正常。个人建议批量标注阶段尽量用 GPU。我测试过1080Ti 上处理 1000 张 640x640 的图片大约需要 25 到 40 分钟CPU 环境下可能要 4 到 5 小时这个时间差在实际项目中很难接受。5.2 用 CaptionOntology 定义标注语义autodistill 最核心的配置是CaptionOntology。它是一个提示词和类别名称的映射字典告诉 teacher 模型“看到什么算打什么标签”。from autodistill.detection import CaptionOntology from autodistill_grounded_sam import GroundedSAM from autodistill_yolov8 import YOLOv8 ontology CaptionOntology({ a crack on the metal surface: crack, a round bolt: bolt, a welding seam defect: welding_defect }) base_model GroundedSAM(ontology)这里踩过一个大坑提示词写得太抽象或者太泛化检测效果会断崖式下降。比如写 “defect”缺陷模型基本什么都框不稳写 “a long thin crack on the dark metal surface”效果就很好。GroundingDINO 对具体名词和精确描述更敏感对抽象类别和功能描述理解有限。调试提示词的时候有一个实用的方法先拿几十张典型图片跑一遍打印输出的检测结果观察哪些地方漏检、哪些地方误检然后调整提示词的修饰词。这个过程有点像写 prompt 调大语言模型但目标从“生成文本”变成了“找到目标”。5.3 批量标注与模型蒸馏实战配置好 ontology 后执行批量标注的命令只有一行base_model.label(./unlabeled_images, extension.jpg, output_dir./labeled_images)这个调用会把unlabeled_images目录下所有jpg图片逐张跑一遍检测和分割生成对应的标注文件支持多种格式输出。我习惯先设置output_dir单独存放标注结果避免把原始图片和标注文件混在一起。标注完成后接下来就是训练 student 模型target_model YOLOv8(yolov8n.pt) target_model.train(./labeled_images, ./labeled_images/labels.json, epochs100)训练过程中autodistill 会自动读取标注文件并转换为 YOLO 格式。epochs 的设定要看数据量。数据量只有几百张时训练 50 到 80 轮就足够再多就会过拟合数据量上千张时100 到 150 轮比较合理。蒸馏出来的 YOLOv8n 模型在验证集上的 mAP 通常能达到 teacher 模型的 85% 到 95%但推理速度远超 GroundedSAM。我实测同样的图片Grounded-SAM 单张推理约 3 秒蒸馏后的 YOLOv8n 只要 30 毫秒左右快了 100 倍。这也意味着第一版自动标注完成后后续的新数据就不需要再跑大模型了直接用这个小模型初标人工修正后再增量训练逐步逼近 teacher 模型的效果。5.4 蒸馏模型的迭代策略很多教程只讲一次蒸馏就结束了实际项目里这是远远不够的。我推荐采用“伪标签迭代”策略第一次用 GroundedSAM 标注 1000 张图训练 student 模型 v1然后用 v1 对另一批新增图片做初标人工修正后合并到训练集训练 student 模型 v2。如此迭代三四轮模型效果会越来越接近大模型同时人工修正量也会持续下降。这里要注意数据分布的问题。如果第一次标注的 1000 张图场景过于单一训练的 v1 模型只能做好单一场景。因此第一批数据最好覆盖尽可能多的变化比如不同光照、不同角度、不同背景。这跟机器学习里常说“垃圾进、垃圾出”类似自动标注也不例外初期的数据多样性决定了后期模型的天花板。6. 常见问题与排查技巧实录跑这套流程的时候几乎每个人都会在环境、推理、结果质量三个层面踩坑。这里我把遇到过的问题和排查方法整理成速查表希望对你有用。6.1 环境安装与依赖冲突问题现象原因解决方案PyQt5 启动时报failed to create pixmapPyQt5 版本与系统渲染兼容问题重新安装 PyQt5 5.15.9并升级显示驱动onnxruntime 报DLL load failed依赖的 VC 运行库缺失或版本过旧安装 Visual C Redistributable 2019 及以上版本运行 main.py 报ModuleNotFoundError: anylabelingPyCharm 源码根目录未配置将 anylabeling 目录标记为 Sources Root模型加载很慢或卡死模型路径配置错误或模型文件不完整检查配置文件路径重新下载模型核对文件大小环境问题的排查思路就一条不要盲目重装所有依赖先看报错信息是哪一层的问题再针对性修复。尤其是 DLL 和 PyQt5 相关的报错优先想到系统层面而不是 Python 包层面。6.2 模型加载与推理异常问题推理阶段最常见的三个异常第一GroundingDINO 检测结果为空。这种情况通常是提示词写得不精准。比如你要检测“划痕”写 “scratch” 效果好写 “damage” 效果可能就不行。建议尝试多种英文同义词组合比如缺陷类目标可以试试 “scratch”、“crack”、“surface defect”、“imperfect area”。第二SAM 分割出的掩膜覆盖了整个图片。这通常发生在目标与背景颜色高度相似的情况下。处理思路是手动给 SAM 更精确的框提示而不是直接依赖 GroundingDINO 的大范围候选框。在 X-AnyLabeling 里可以先手动画一个小框再触发 SAM 分割。第三批量标注中途崩溃。这类崩溃多数是内存占用过高导致的。GroundingDINO SAM 同时跑显存占用接近 6 到 8GB如果同时开多个进程或者图片分辨率过大4000x3000很容易爆显存。解决方案是先把图片统一缩放到合适尺寸比如 1280 像素长边把 batch size 设置为 1让模型逐张处理。6.3 标注质量不佳的处理技巧漏检问题漏检比误检更头疼因为它需要人工逐张对比原图才能发现。我的习惯是让 GroundingDINO 的box_threshold保持在偏低的 0.2 左右宁可多检一些也不要漏检。多检的部分用快捷键 Delete 批量删漏检的部分要重新跑文本检测工作量大得多。边界不准问题SAM 生成的掩膜边界偶尔会溢出或收缩。这时候不要试图用橡皮擦精细修效率很低。更好的做法是降低 GroundingDINO 的box_threshold让输入给 SAM 的框更紧贴目标或者在 X-AnyLabeling 里重新画一个更贴合的初始框再触发分割。类别混叠问题相似类别的目标比如螺栓和螺母经常被相互误检。这种问题光调阈值解决不了要从提示词入手把两个相似类别写成对比性的提示词。比如 “a round bolt with hex head” 和 “a thin nut for tight joint”让模型区分得更细。如果效果还不好就人工修正一批把它们加入训练集用蒸馏模型替代 GroundedSAM 做初标问题会逐渐缓解。核心思路自动标注不是全自动而是把人工从“从零绘制”变成“审核修正”这个从 100% 降到 10% 的工作量才是这套流程最大的价值。7. 从效率与成本角度聊聊这套流程的真实投入很多人看到这整套流程觉得效果好但也要考虑实际投入。我把自己的真实数据写出来给大家做个参考。以 5000 张图片的工业视觉检测项目为例目标类别 4 类图片尺寸约为 1920x1080。纯手工标注的条件下一个熟练标注员每天大概能完成 150 到 200 张需要 25 到 30 个工作日。按照 8 小时工时算人力成本在一万五到两万左右以市场外包标注单价粗略估算。我使用这套自动标注流程后大概是这样分配的时间环境部署和模型调试1 到 2 天主要是调提示词和阈值用 X-AnyLabeling 对 500 张图片进行初标和人工修正得到第一批优质标注1 天把 500 张标注图片交给 autodistill对剩余 4500 张图片批量自动标注约 3 小时GPU 环境人工随机抽查自动标注结果重点处理漏检和类别混叠的图片约 1 天训练 YOLOv8s 模型并验证效果约 1 小时整体下来1 周内完成任务而且大部分是审核工作不需要逐张从零绘制。成本大约是纯手工标注的三分之一后续如果继续标注新数据因为已经训好 student 模型成本会更低。7.1 训练时机的判断标准什么时候自动标注的结果可以直接用来训练什么时候还需要人工复审我的经验是看两类指标一类是 GroundingDINO 检测结果的置信度分布如果绝大多数目标的box_threshold都在 0.5 以上说明模型对这个类别的把握很高可以免人工另一类是对标注文件做随机抽查抽样比例 5% 到 10%如果错误率低于 3%基本可以直接训练否则需要人工过一遍。7.2 多轮迭代时的数据平衡策略自动标注流程有一个潜在风险teacher 模型会在某些困难样本上稳定地犯同样的错误而人工审核时容易因为疲劳漏掉这些系统性错误。这会导致训练集里积累了带偏见的伪标签student 模型学到的是错误模式。我的规避手段是每一轮人工审核时专门留出一批人检查同一张图片的两个版本——原始图和标注可视化后的图尤其是遮挡严重、小目标密集、模糊不清的图片。这类图片单独建一个“难例桶”每轮迭代都优先复审不直接信任模型输出。8. 我对这套流程的真实体会与使用建议写到最后聊聊个人使用这套流程几个月以来的真实感受以及一些连文档里都找不到的经验。第一模型选型会影响标注效率但提示词调优才是真正的分水岭。同一个 GroundingDINO 模型提示词写得好与不好检测准确率能差出 20 个百分点。我甚至觉得花在调提示词上的时间比花在调试模型本身的时间还多。建议在正式标注之前专门花半天时间拿 50 张典型图片做一轮提示词实验把漏检率降到可接受范围再开展批量标注。第二人工审核的环节不能省但可以聪明地省。我后来不再逐张审核而是让标注界面按置信度排序显示先从低置信度的图片开始审高置信度的图片直接跳过。置信度就是 GroundingDINO 输出的box_threshold分数。这样审核 500 张图的实际工作量大概只有全部审核的三分之一。第三student 模型训练不能贪大。用 YOLOv8n 还是 YOLOv8s 要看数据量和类别数量。数据量少于 2000 张时用 V8n 足够了V8s 反而因为参数量大、训练数据不足导致精度不如小模型。我记得有一次项目V8n 训练 5000 张图片后 mAP 达到了 0.87V8s 在相同数据下只有 0.84就是过拟合的典型表现。最后分享一个小技巧autodistill 有一个不太起眼的参数可以在label()方法里直接设置save_imagesTrue它会保存一张标注结果的可视化预览图。这些预览图在项目汇报和团队协作中非常有用大家不需要打开标注工具直接看预览图就能发现问题。我每次跑完批量标注后都会快速翻阅这些预览图一眼就能发现类别混叠或者检测范围异常的情况。这套“X-AnyLabeling Grounded-SAM autodistill”的流程我现在基本每个检测相关的项目都用它。它不可能完全替代人工标注但能把最费时、最枯燥的重复劳动减掉八成让人把精力放在真正需要判断力的事情上。如果你的项目也苦于标注成本过高不妨沿着这条路径试一次先把环境搭好再跑一小批数据验证效果我相信你会回来感谢这套流程的。
返回列表