尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

GroundingDINO 零样本目标检测实战:不重新训练,用一句话框出图中任意物体

GroundingDINO 零样本目标检测实战:不重新训练,用一句话框出图中任意物体 GroundingDINO 零样本目标检测实战不重新训练用一句话框出图中任意物体【免费下载链接】GroundingDINO[ECCV 2024] Official implementation of the paper Grounding DINO: Marrying DINO with Grounded Pre-Training for Open-Set Object Detection项目地址: https://gitcode.com/GitHub_Trending/gr/GroundingDINOGroundingDINO 是一个文本引导的零样本目标检测模型零样本——指不用针对新类别再训练输入一句描述就能框出图里对应的东西。这篇文章会讲清楚它的原理和实测成绩并给你一套本地部署的三步流程和常见的调参建议看完你就能在自己的图片上跑起来。先看效果就这张普通的猫狗合照你不用提供任何训练数据只要给出 cat . dog . 这样的提示词模型就能把猫和狗分别用边框圈出来。它甚至能理解 left dog左边的狗、black cat黑猫这种带修饰的描述。仓库里的demo/目录提供了单图推理、COCO 评测和 Gradio 网页版多种入口想自己试的话可以直接照着改提示词。为什么值得试传统检测器只认训练时见过的类别想加新类别重新标数据、重新训练成本不低封闭集之外基本失灵换个场景就掉得厉害只能按类别名查询没法用自然语言指认比如 举着奖杯的那个人文本和图像是两套体系想对齐得自己想办法GroundingDINO 把这四件事一次解决类别由语言定义理解由模型直接完成不需要你为某个具体任务再训一次模型。它是怎么做到的这张图看着模块多实际就三步。第一步两路特征各走各的。文本走 BERT 编码器变成语义向量图像走 Swin Transformer 主干提取多尺度视觉特征。到这一步两边还互不认识。第二步双向对齐。特征增强层用交叉注意力让文本和图像互相看一眼文本特征去关注图像区域图像特征也反过来关注描述词。经过这一层cat这个词开始知道猫大概在画面哪里。第三步解码出框。跨模态解码器默认产生 900 个候选框每个框都会和提示词里的每个词算一个匹配分数。推理时你看两个阈值就行box_threshold默认 0.35过滤掉位置没把握的框text_threshold默认 0.25决定哪些词配得上作为标签。想只看某几个词的结果把另外两个阈值调高即可。实测数据先看 COCO 上的成绩表来自仓库 .asset/COCO.png数值可直接引用模型主干零样本 AP微调 APGLIP-TSwin-T46.755.1DINOSwin-T46.256.9GroundingDINO-TSwin-T48.457.2GroundingDINO-LSwin-L52.563.0零样本意味着提示词只有物体名训练也没碰 COCO52.5 AP 已经超过了用 COCO 完整训练过的一些封闭集检测器微调后 63.0 AP在当年是同类工作的最好水平之一。再看 ODinW——一个覆盖大量不同领域的开放集基准更能体现换场景不塌的能力设置对比模型GroundingDINO 成绩零样本GLIP-T 19.6 / DetCLIP 24.9平均 AP22.3T/ 26.1L少样本DINO-Swin-T 41.2 / GLIP-T 38.946.4T全样本DINO-Swin-T 66.7 / GLIP-T 62.670.7T点评一句少样本和全样本两档上 T 版就超过 DINO 和 GLIP说明它在见过一点数据和完全没见过之间切换得很平滑不会一微调就退化成普通检测器。三步上手第一步克隆仓库git clone https://gitcode.com/GitHub_Trending/gr/GroundingDINO第二步装依赖、下权重cd GroundingDINO pip install -e . mkdir weights cd weights wget -q https://github.com/IDEA-Research/GroundingDINO/releases/download/v0.1.0-alpha/groundingdino_swint_ogc.pth cd ..注意有 GPU 的话先确认echo $CUDA_HOME有输出装完跑起来如果报NameError: name _C is not defined十有八九是 CUDA 环境没配对重新走一遍安装即可。纯 CPU 机器可以在推理命令后加--cpu-only。第三步跑通第一张图CUDA_VISIBLE_DEVICES0 python demo/inference_on_a_image.py \ -c groundingdino/config/GroundingDINO_SwinT_OGC.py \ -p weights/groundingdino_swint_ogc.pth \ -i .asset/cat_dog.jpeg \ -o out \ -t cat . dog .跑完在out目录里就能看到带框的图。不想走命令行也可以用demo/gradio_app.py起一个网页版直接拖图上传。想在代码里调用的话核心就是 groundingdino/util/inference.py 里的load_model和predict两个函数README 里有一整段调用示例可以抄。避坑与调优速查场景建议显存不够约 8GB 以下选 Swin-T 权重默认推理已足够大分辨率输入时优先降尺寸而不是硬扛想要更高精度、显存宽裕约 6GB换 Swin-B 配置groundingdino/config/GroundingDINO_SwinB_cfg.py框太多太杂调高box_threshold0.35 → 0.45标签不对就调text_threshold只想要句子里的某个词提示词写成短句用--token_spans指定词的位置或代码里按词过滤提示词写法多个类别用.分隔例如 person . car . traffic light比写成一句话更稳批量推理统一缩放到 800×1333避免反复 resize 放大predict内部已有torch.no_grad别在外面套训练逻辑CPU 机器加--cpu-only速度慢但能跑适合验证流程两个阈值是日常最常动的旋钮box_threshold管框稳不稳text_threshold管标签准不准建议从 0.35 / 0.25 起步微调。一句话选型想快速验证想法、显存 8GB 以内 → Swin-T 权重就够别折腾离线批量处理、追求召回和精度 → 上 Swin-B你的任务其实是固定那几类且量很大 → 直接微调传统检测器更划算零样本的优势发挥不出来写在最后GroundingDINO 把检测什么从训练阶段挪到了提示词里这一点对数据成本敏感的团队价值很大。它的生态也在往外长——接 SAM 做开放集分割、接 Stable Diffusion 做可控图像编辑demo/里两个 notebook 就是示例可以作为不少多模态应用的底座。输出文章【免费下载链接】GroundingDINO[ECCV 2024] Official implementation of the paper Grounding DINO: Marrying DINO with Grounded Pre-Training for Open-Set Object Detection项目地址: https://gitcode.com/GitHub_Trending/gr/GroundingDINO创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表