NVIDA开源视觉定位神器:LocateAnything
LocateAnything全称为LocateAnything: Fast and High-Quality Vision-Language Grounding(并行框解码视觉语言定位模型)。开源了 LocateAnything-3B(30 亿参数)。
模型定位:通用开放词汇视觉定位基座,一句话文本指令→图像自动输出目标包围框,统一开放域检测、指代定位、UI 控件拾取、OCR 文字框选四大任务,主打高速 + 高精度,面向机器人抓取、AI 智能体、工控视觉、自动 GUI 操作场景。非商用免费开源,商用需联系英伟达授权。
1.传统VLM缺陷
主流 VLMs(GPT4V、Qwen-VL)自回归逐 Token 生成坐标:框[x1,y1,x2,y2]拆成 4 组数字逐个字符解码,串行生成:
1)速度慢:单个目标 4 次解码,多物体叠加时延暴涨
2)误差累积:第一个坐标出错,整框报废、几何失真
2.模型创新:PBD(Parallel Box Decoding 并行框解码)原理
把整框 (x1,y1,x2,y2) 当做 1 个不可拆分的原子单元,一步并行全量预测,不再拆分坐标 Token:
1)视觉编码器提取图像全局特征,文本编码器解析查询指令(自然语言);
2)解码器一次性批量输出所有目标完整包围框,单步输出 4 个坐标;
3)天然保留框几何约束,不会出现坐标错位、长宽畸形。性能提升:推理吞吐量≈传统自回归模型2.5~10 倍;H100 混合模式可达12.7 框 / 秒 (BPS),满足机器人实时毫秒级定位。
3.三种推理运行模式
如下表所示:
| 模式 | 适用场景 | 特点 |
|---|---|---|
| Fast 快速 | 机器人实时抓取、端侧工控、在线实时检测 | 纯 PBD 并行解码,速度最优,牺牲极少量精度 |
| Slow 高精度 | 数据集标注、离线质检、高精度测量 | 传统自回归解码,精度拉满、速度偏低 |
| Hybrid 混合(默认) | 通用部署 | 默认 Fast,场景歧义 / 识别异常自动切 Slow,兼顾速度 + 精度 |
4.训练数据集:LocateAnything-Data(业界超大定位数据集)
自研百万级多域标注库:1200 万张独立图像 + 1.38 亿条文本查询 + 7.85 亿标注包围框
覆盖 5 大领域:通用自然物体、机器人实操场景、手机 / 电脑 GUI 界面、文档 OCR、自动驾驶路面目标
优势:开箱即用零样本,不用微调即可识别任意新词、小众工业零件。
5.支持的任务和优势
1)开放词汇通用目标检测:输入 “图里所有黑色手机”,自动框出全部手机,不限预定义类别;
2)指代表达定位:“画面右侧胶带下方的绿色方格板”,精准框选指代物体(机器人抓取刚需);
3)GUI 界面元素定位:“屏幕所有按钮 / 输入框”,AI 自动化点控、键鼠自动化;
4)OCR 文本框选:“框出图片内所有汉字”,文字区域坐标提取;
5)点提示辅助定位:配合打点 + 文本混合 Prompt,疑难物体精准框选。
相比传统的优势如下:
1)定位 AP 精度>现有开源 VLMs(Qwen-VL、LLaVA)5%~12%;
2)同等精度下推理耗时仅传统方案 1/3;
3)密集杂物堆叠场景(多零件混放)零样本鲁棒性突出,适配工业杂乱工件定位。
6.和SAM/YOLO 区别
1)YOLO 系列:闭集预定义类别,新增工件必须重新标注训练;LocateAnything开放词汇,自然语言任意新词零样本识别;
2)SAM 分割:点 / 框提示做像素分割,不能文本指令;LocateAnything纯文本输入出检测框,侧重目标定位,推理更快;
互补方案:LocateAnything 出目标包围框→框内送入 SAM 做精细像素分割,工业视觉常用组合。
7.应用部署
使用 NVIDIA 官方开源 LocateAnything-3B,支持自然语言指令检测任意物体(人、车、工件、缺陷、零件、文字、按钮… 都可以)。
1)环境要求:
Python 3.9+;PyTorch 2.0+;CUDA 11.7+(必须有 NVIDIA 显卡);显存 ≥ 10GB(推荐 16GB 以上,如 RTX 3090/4090)。
2)环境配置:pip install torch torchvision transformers pillow opencv-python
模型下载:nvidia/LocateAnything-3B
3)目标检测:纯目标检测模式:输入图片 + 文本指令 → 输出所有目标框,代码如下:
import cv2
import torch
from PIL import Image
from transformers import AutoModel, AutoTokenizer
# ====================== 1. 加载模型 ======================
model_name = "nvidia/LocateAnything-3B"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModel.from_pretrained(
model_name,
torch_dtype=torch.float16,
trust_remote_code=True
).cuda().eval()
# ====================== 2. 加载图片 ======================
image_path = "test.jpg" # 你要检测的图片
image = Image.open(image_path).convert("RGB")
# ====================== 3. 输入检测指令 ======================
# 想检测什么就写什么!!!
prompt = "找出图中的所有杯子"
# prompt = "框出所有轴承工件"
# prompt = "找到图中的红色零件"
# ====================== 4. 推理 ======================
with torch.no_grad():
boxes = model.predict_boxes(
image=image,
prompt=prompt,
tokenizer=tokenizer,
max_boxes=20, # 最多检测多少个物体
conf_thres=0.3, # 置信度阈值
device="cuda"
)
# ====================== 5. 绘制结果 ======================
img = cv2.imread(image_path)
for box in boxes:
x1, y1, x2, y2 = map(int, box)
cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2)
cv2.imwrite("result.jpg", img)
print("检测完成!输出框坐标:", boxes)
4)检测应用技巧
(1)检测任意物体(开放词汇,不用训练):想检测什么,直接写自然语言就行
prompt = "找出图中的所有螺丝" prompt = "找到所有黑色橡胶圈" prompt = "框出所有金属工件" prompt = "找出图中的缺陷" prompt = "找到所有按钮"。
(2)控制检测数量
max_boxes=10 # 最多检测10个
conf_thres=0.5 # 置信度越高,框越少越准
(3)支持复杂描述(比 YOLO 强得多)
prompt = "找到桌子上的白色杯子"
prompt = "框出右上角的零件"
prompt = "找到图片中间最大的那个物体"
(4)支持多类别同时检测
prompt = "找出图中的杯子、瓶子、键盘"
检测效果如下图所示

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)