YOLO-World 免训练开放词汇检测实战指南:一句话描述,实时框出任何物体
【免费下载链接】YOLO-World[CVPR 2024] Real-Time Open-Vocabulary Object Detection项目地址: https://gitcode.com/gh_mirrors/yo/YOLO-World
想检测"穿黄马甲的工人",或者"停在楼下的蓝色共享单车"?过去的流程是:先标注几百张图,再跑一整晚训练,训完发现换个物体又得重来。而 CVPR 2024 开源的YOLO-World把这件事压缩成一句话——输入文本描述,实时返回检测框,免训练、零代码,还保留了 YOLO 系引以为傲的速度。
一句话说清:它到底替谁解决了什么麻烦
用过传统检测器的人,大概率经历过这种死循环:想加一个类别 → 找数据 → 打标签 → 重新训练 → 结果又要加新类别。YOLO-World 把整个循环砍掉了,核心逻辑就一句话:
把"类别"从代码里抠出来,变成运行时的一句话输入。
它对三类人特别有用:
- 非算法岗:产品、运营、设计师想快速验证"这个功能能不能做",不用求人训练模型;
- 多场景开发者:今天检测安全帽、明天检测宠物,一个权重打天下;
- 边缘设备玩家:它跑起来仍是 YOLO 的速度,不是那种慢吞吞的"大模型"。
三步上手:装起来、跑起来、玩起来
第一步,装起来:两条命令起步
git clone --recursive https://gitcode.com/gh_mirrors/yo/YOLO-World cd YOLO-World pip install torch wheel -q pip install -e .--recursive千万别漏,项目依赖third_party/mmyolo子模块,漏了后面会报一堆导入错误。装完再补两行:
pip install -r requirements/basic_requirements.txt pip install -r requirements/demo_requirements.txt如果卡在 mmcv 上,单独指定版本装一次即可:mim install mmcv==2.0.0,或者按 docs/installation.md 里对应 CUDA 版本挑一个。
第二步,跑起来:完成第一张图的检测
先准备权重:把下载好的.pth文件放进项目根目录的weights/文件夹(文件名要和命令里写的一致)。然后原样复制这条命令:
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当results/里出现画好框的公交照片时,你就已经跑通了一次开放词汇检测。注意:全程没有任何训练步骤,类别就是命令行里那串逗号分隔的单词。
第三步,玩起来:网页界面随手试
命令行不过瘾?项目自带 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 最爽的体验是:同一张图、同一个权重,只改文本参数,任务就换了。
把'bus,person,car,bicycle'换成'red umbrella,traffic light,parked motorcycle',不需要改任何代码。想处理整个文件夹?把 image 参数从单张图片换成目录路径即可:
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 \ ./my_photos \ 'cat,sofa,plant,person' \ --output-dir results类别太多时,把每行一个词写进.txt文件,text 参数直接指向文件路径,同样生效。
进阶档:视频、分割,一次到位
想盯一段监控视频?video_demo.py的用法和图片版几乎一样,多一个--out指定输出文件:
python demo/video_demo.py \ configs/pretrain/yolo_world_v2_m_vlpan_bn_2e-3_100e_4x8gpus_obj365v1_goldg_train_lvis_minival.py \ weights/yolo_world_v2_m_obj365v1_goldg_pretrain.pth \ my_clip.mp4 \ 'person,bicycle,vehicle' \ --out annotated.mp4只画框不过瘾?项目还有分割分支(YOLO-World-Seg),换个分割配置,输出就从"框"升级成像素级蒙版:
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 \ 'person,suit,face' \ --output-dir seg_results高手档:加速、部署、微调,三项加分 🚀
1. 重参数化,把文本"焊"进模型。平时推理要先算文本嵌入再和图像特征对齐;重参数化把文本嵌入直接固化成 1x1 卷积参数,相当于给模型做了一次"一键瘦身",推理更快、显存更省,关键是零样本能力还在。流程很简单:先用tools/generate_text_prompts.py生成自定义词嵌入,再跑tools/reparameterize_yoloworld.py导出新权重。原理对比见图:
2. 部署到生产环境。项目在deploy/下提供了 ONNX 导出(deploy/export_onnx.py)、TFLite + INT8 量化(见 docs/tflite_deploy.md),还有针对 TensorRT 的 easydeploy 方案。量化后模型更小、跑得更快,适合塞进手机或嵌入式设备。
3. 微调出"专属"模型。零样本够用,但垂直领域还是微调更香。项目给出三种配方:常规微调、提示微调(数据少时保住零样本能力)、重参数化微调(场景和通用世界差得远时更稳)。现成配置都在 configs/finetune_coco/,其中带mask-refine的版本精度更高,建议优先试。
选型号也有讲究,按你的预算对号入座:
| 型号 | 精度(LVIS minival AP) | 适合谁 |
|---|---|---|
| v2-S | 22.7 | 笔记本、边缘设备、快速验证 |
| v2-M | 30.0 | 平衡之选,多数场景够用 |
| v2-L | 33.0 | 精度优先,显卡随便跑 |
| v2-X / XL | 35.4 / 36.0 | 专业级,小物体多的场景 |
想要更高精度,还有 1280 分辨率的1280ft配置,小物体检测会明显更稳。
新手最容易踩的 5 个坑
坑 1:克隆漏了子模块
❌git clone https://gitcode.com/gh_mirrors/yo/YOLO-World后直接装,报一堆 mmyolo 导入错误。
✅ 带上--recursive参数;如果已经克隆了,补一句git submodule update --init --recursive。
坑 2:权重文件没放对地方
❌ 命令里写weights/xxx.pth,实际文件还在下载目录,于是报 FileNotFoundError 或加载失败。
✅ 把权重统一放进项目根目录的weights/,并确认文件名与命令完全一致(大小写、后缀都对上)。
坑 3:阈值一上来就调很高
❌--threshold 0.7,结果一张图什么都检不到,以为模型坏了。
✅ 从 0.1~0.3 开始调。开放词汇场景的置信度天然比固定类别模型低,阈值是拿来"过滤"的,不是拿来"保底"的。
坑 4:描述词写得太抽象
❌ 写'things'、'person with emotion'这类词,检测结果自然飘。
✅ 用具体名词,多给同义词用逗号隔开,比如'car,automobile'、'man,gentleman'。描述越贴近训练语料里的常见名词,结果越准。
坑 5:CPU 机器硬跑默认配置
❌ 没显卡直接跑默认的cuda:0,报设备错误。
✅ 命令加--device cpu。第一次加载权重会慢一点,但能正常出结果。
一个完整小故事:十分钟给球赛照片做"人物图鉴"
假设你手头有一张比赛现场的照片(项目自带demo/sample_images/zidane.jpg),想把它变成一张带标注的"人物图鉴"。
第一步,先跑框检测,类别写具体一点:
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/zidane.jpg \ 'person,man,suit,face' \ --output-dir results第二步,觉得框不够精细,换分割配置拿蒙版:
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 \ 'person,suit' \ --output-dir seg_results第三步,把图片换成你自己的照片,把类别换成你的业务词:'helmet,safety vest,ladder'做工地巡检,'red dress,sneakers,backpack'做穿搭分析。
整个过程没有写一行训练代码,没有标一个框。这就是 YOLO-World 想带给你的体验:把"检测什么"的决定权,从训练阶段挪到输入阶段。
现在轮到你了
别光看,最快的一条路是:克隆项目、放进权重、复制上面第一条命令,先把 bus.jpg 跑通,再换成你自己的图片和类别词。
想继续深入,按这个顺序逛:
- 环境问题:docs/installation.md
- 换着花样玩:demo 目录下的
image_demo.py、video_demo.py、gradio_demo.py、inference.ipynb - 挑预训练配置:configs/pretrain/
- 微调与数据准备:docs/finetuning.md
- 部署落地:docs/deploy.md 与 docs/tflite_deploy.md
【免费下载链接】YOLO-World[CVPR 2024] Real-Time Open-Vocabulary Object Detection项目地址: https://gitcode.com/gh_mirrors/yo/YOLO-World
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考