尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

开放词汇目标检测实战:YOLO-World 如何用一句话定位任意物体

开放词汇目标检测实战:YOLO-World 如何用一句话定位任意物体 开放词汇目标检测实战YOLO-World 如何用一句话定位任意物体【免费下载链接】YOLO-World[CVPR 2024] Real-Time Open-Vocabulary Object Detection项目地址: https://gitcode.com/gh_mirrors/yo/YOLO-World传统目标检测器有一个绕不开的硬伤模型训练时写死了几十上百个类别之后想新增一个智能手表或破损零件就得重新标注数据、重新训练。而现实中的物体种类数以万计标注成本高昂。CVPR 2024 开源的 YOLO-World 正是冲着这个问题来的——它把类别从模型里解放出来让你在推理时直接输入一句话实时检测任意物体。这篇文章从原理到实战带你一步步把它跑起来。为什么固定类别正在成为目标检测的天花板先看一组现实数据COCO 数据集定义了 80 类Objects365 覆盖了 365 类LVIS 扩展到了 1203 类。但即便类别库做到上千仍然覆盖不了长尾场景——野生动物保护要识别几十种特定鸟种工业质检要盯划痕污渍这类非物体目标电商平台每天上架的新品更是无法穷举。你是不是也遇到过这种尴尬手头的检测模型什么都好就是不能加类别。每次需求变化意味着重新标注、重新训练、重新上线一套流程走下来动辄数周。传统 YOLO 的解决方案是换一个更大的类别库——治标不治本。类别再多也是有限的而用户的需求是无限的。真正要解决的问题不是多训练几千类而是让检测器能理解你的语言描述。一句话看懂 YOLO-World 的工作原理YOLO-World 的核心思路可以用一个词概括先提示后检测prompt-then-detect。你可以把它想象成一次看图填空的考试传统检测器是提前背好了标准答案固定类别而 YOLO-World 是带着一本词典上场——你把要查的词告诉它它现场把词义和图片内容做比对。具体到实现模型包含三个协作部分图像分支沿用 YOLOv8 的 CSPDarknet 主干提取视觉特征文本分支用 CLIP 文本编码器把你输入的词语转成向量embedding相当于把红雨伞翻译成计算机能理解的语言融合模块YOLOWorldPAFPN 把视觉特征和文本向量逐层融合最后通过对比学习计算图片里的每个区域像不像你说的词。这套设计带来一个直接好处类别不是模型的参数而是推理时的输入。你换一个词模型就去比对一个新目标完全不需要重新训练。公开数据下的硬指标S/M/L/X 怎么选官方在 LVIS minival 上给出了 YOLO-World-v2 系列S/M/L/X/XL的零样本评测结果先看数据再谈选择模型输入分辨率AP零样本定位AP_r常见AP_c稀有AP_fYOLO-World-v2-S640×64022.716.320.825.5YOLO-World-v2-M640×64030.025.027.233.4YOLO-World-v2-L640×64033.022.632.035.8YOLO-World-v2-X640×64035.428.732.938.7YOLO-World-v2-XL640×64036.025.834.139.5选型建议很直白边缘设备或实时视频流S 版在 640 分辨率下即可流畅运行性价比最高精度与速度的平衡点M 版是多数业务场景的默认选择追求高精度L 版在常见类别上表现突出也是官方微调主力专业级任务X/XL 版配合 1280 高分辨率微调权重小目标检测能力明显更强。值得一提的是所有版本都是零样本直接出结果的上面的 AP 没有经过任何领域微调。3 步快速上手跑通第一次零样本检测环境准备只需要三条命令基础依赖、演示依赖、ONNX 导出依赖按需安装pip install -r requirements/basic_requirements.txt pip install -r requirements/demo_requirements.txt pip install -r requirements/onnx_requirements.txt安装完成后用仓库自带的公交车图片做第一次检测。这个命令的输入很有意思你要找什么直接写在引号里python demo/image_demo.py \ configs/pretrain/yolo_world_v2_s_vlpan_bn_2e-3_100e_4x8gpus_obj365v1_goldg_train_lvis_minival.py \ weights/yolo_world_v2_s_obj365v1_goldg_pretrain.pth \ demo/sample_images/bus.jpg \ bus,person,car,bicycle \ --output-dir results把结果目录打开你会看到模型标注出的公交车、行人、汽车和自行车——全程没有训练只是把类别名作为参数传了进去。image_demo.py还支持批量处理把最后一个参数换成图片目录路径即可如果类别较多也可以把每个类别写成一行存进 txt 文件用--threshold调节置信度阈值控制输出的严格程度。详细用法见 demo/image_demo.py。换一种玩法用 Gradio 网页界面交互不喜欢敲命令行仓库内置了 Gradio 网页演示一行命令启动python demo/gradio_demo.py \ configs/pretrain/yolo_world_v2_s_vlpan_bn_2e-3_100e_4x8gpus_obj365v1_goldg_train_lvis_minival.py \ weights/yolo_world_v2_s_obj365v1_goldg_pretrain.pth浏览器访问http://localhost:7860左侧上传图片右侧输入任意描述点击检测立刻出结果。这个界面特别适合给非技术同事做产品演示也适合你快速验证某个词模型能不能认出来。进阶之路三种微调方案怎么选零样本检测解决能不能用微调解决用得好不好。YOLO-World 提供了三条微调路径官方总结在 docs/finetuning.md方案一常规微调Normal Fine-tuning针对固定类别场景用 COCO 格式数据 一个文本 JSON 文件即可。微调成本很低官方说明 1 张 GPU 也能跑80 个 epoch 足够收敛对比 YOLOv8 动辄 300-500 epoch。核心改动只有三处换基础配置、调小学习率、替换数据集配置。方案二提示调优Prompt Tuning冻结主干只训练一组可学习的提示向量适合数据量少、想保住通用能力的场景。详细说明见 docs/prompt_yolo_world.md。方案三重参数化微调Reparameterized Fine-tuning把文本向量直接焊进模型变成 1x1 卷积的参数。这样推理时不再需要在线计算文本嵌入脖子和头可以独立优化精度甚至反超普通微调官方在 COCO val2017 上对比重参数化 46.3 AP vs 普通微调 46.1 AP。转换只需一个脚本python tools/reparameterize_yoloworld.py \ --model path/to/checkpoint \ --out-dir path/to/save/re-parameterized/ \ --text-embed path/to/text/embeddings \ --conv-neck一句话总结数据充足选方案一数据少选方案二要部署效率选方案三。不止检测框开放词汇语义分割扩展检测给的是框分割给的是像素级掩码。YOLO-World 的姊妹模型 YOLO-World-Seg 在 LVIS-Base 上微调后同样支持开放词汇分割——输入man,person,suit,face输出的是每个目标的精确轮廓python demo/image_demo.py \ configs/segmentation/yolo_world_seg_l_dual_vlpan_2e-4_80e_8gpus_allmodules_finetune_lvis.py \ weights/yolo_world_seg_l.pth \ demo/sample_images/zidane.jpg \ man,person,suit,face \ --output-dir segmentation_results分割模型在 LVIS val 上的掩码 AP 达到 28.7L 版全模块微调。两种微调策略各有取舍全模块微调分割精度更高但会牺牲部分零样本能力只微调分割头则能保住原有的检测能力同时获得分割输出。部署落地从 PyTorch 到 ONNX 的转换路径训练和推理只是第一步真正上线还要考虑部署。项目提供了 ONNX 导出与演示脚本详细步骤见 docs/deploy.md# 导出 ONNX可指定自定义文本 PYTHONPATH./ python deploy/export_onnx.py \ path/to/config path/to/weights \ --custom-text path/to/customtexts --opset 11 # 运行 ONNX 推理 python deploy/onnx_demo.py path/to/model.onnx path/to/images path/to/texts几个实用提示去掉 NMS 的选项--without-nms让模型结构更纯净方便后续量化或自写后处理量化准备--without-bbox-decoder再导出更适合 INT8 量化流程einsum 兼容性旧版 ONNXopset 11不支持 einsum 算子要么升级到 opset 12要么改用use_einsumFalse的配置仓库提供了 noeinsum 样例配置TFLite 路线支持 INT8 量化导出移动端部署可以参考 docs/tflite_deploy.md。高频疑问集中解答Q文本描述怎么写效果最好具体优于宽泛。红色跑车优于车戴眼镜的老人优于人。多个类别用逗号分隔一次传入模型内部会并行匹配。Q微调最少需要多少数据常见场景 50-100 张标注图即可看到明显提升特殊领域建议 200-500 张。数据格式转成标准 COCO 格式即可转换说明见 docs/data.md。Q推理速度能满足实时吗S 版在消费级显卡上可跑到 60 FPS 以上L 版约 30 FPS视频分析完全够用。想要更快优先走重参数化 ONNX 导出。Q重参数化之后还能换类别吗常规重参数化会把词表固化适合固定业务场景。如果想保留灵活性用提示调优或常规微调更合适。现在就动手把 YOLO-World 跑进你的项目回顾一下全流程安装依赖 → 克隆仓库 → 下载预训练权重 → 一行命令零样本检测 → 按需微调 → 导出部署。整个链路最慢的环节是下载权重其余基本在几分钟内完成。git clone https://gitcode.com/gh_mirrors/yo/YOLO-World cd YOLO-World接下来试试这些动作拿一张你自己行业里的图片输入你真正关心的几个词——质检员试划痕、污渍安防工程师试背包、安全帽、烟雾电商运营试连衣裙、运动鞋。你会发现原来加一个新检测类别真的可以只是改一行文本的事。动手之前如果还有疑问先翻 docs/faq.md踩到坑也别急把报错信息贴到项目讨论区社区维护者会给出解答。最好的学习方式就是现在把第一条检测命令跑通。【免费下载链接】YOLO-World[CVPR 2024] Real-Time Open-Vocabulary Object Detection项目地址: https://gitcode.com/gh_mirrors/yo/YOLO-World创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表