WeVisOne-VL-4B核心架构全解析:Qwen3-VL与1001个坐标Token如何生成框与点
WeVisOne-VL-4B是腾讯微信视觉团队推出的 All-in-One 统一视觉理解模型,基于Qwen3-VL构建,用1001 个专用坐标 Token以"自然语言"方式输出归一化检测框与点坐标,一个模型统一完成目标检测、指代表达定位、计数、指点、OCR、指代分割与抠图(matting)七大任务。本文带你解剖它的核心架构,看懂"框与点"是如何通过 next-token prediction 结构化生成的。
一、为什么"一个模型"能管住 7 大任务?
传统流程里,"检测、定位、分割、抠图"往往各养一个专用模型,调用繁琐、结果难对齐。WeVisOne-VL 把物体级与像素级感知全部收敛进单一模型:
| 层级 | 覆盖任务 | 输出形式 |
|---|---|---|
| 物体级 | 开放词汇检测、指代定位、物体计数、指点、OCR 定位 | 坐标 Token(<0>~<1000>) |
| 像素级 | 指代分割、可提示 Alpha 抠图 | 轻量像素解码器(9.6M 参数) |
关键思路:所有"位置信息"不生成数字文本,而是映射到专用坐标 Token,让模型输出天然结构化、可解析。
二、1001 个坐标 Token:把位置"说"出来
核心设计是一组<0>...<1000>坐标 Token:
- 坐标范围压缩到0~1000的归一化区间,单个检测框只需 4 个 Token(x1, y1, x2, y2),指点任务只需 2 个;
- 用户查询的目标不存在时,模型直接返回
None——相当于给模型一个"找不到"的出口,减少幻觉框; - 密集任务(如检测)中,每输出一个框后追加实例 Token
<OBJ>(token ID152678)作为实例分隔符。
这样"物体在哪里"就和"生成一个词"一样简单,模型可以自回归地逐个吐出多实例坐标。相关分词配置见 tokenizer_config.json,完整词表映射在 tokenizer.json。
三、架构三大件解剖
① 基座:Qwen3-VL 双编码器
config.json 中architectures为Qwen3VLForConditionalGeneration,直接继承 Qwen3-VL 的视觉编码器 + 语言模型:
- 视觉侧:ViT
patch_size16、2×2 空间合并(spatial_merge_size2)、hidden_size1024、输出维度 2560;deepstack_visual_indexes在 5/11/17 层把视觉特征多层级注入语言模型,其中 merge 前的 ViT 多层特征还会交给像素解码器使用; - 语言侧:36 层 Transformer,
hidden_size2560,32 个注意力头 + 8 个 KV 头(GQA),最大支持262144上下文长度——密集坐标 Token 输出再多也不怕; - 位置编码:M-RoPE(
mrope_section为[24, 20, 20]),时间/宽/高三个维度统一建模,对视觉定位任务非常关键; - 词表 152680:在 Qwen3-VL 原词表之上扩展了坐标/实例 Token,
<OBJ>恰好落在 152678。
② 坐标生成:跳 CoT 的结构化输出
generation_config.json 设定了 top_k 20、top_p 0.8、temperature 0.7 的采样参数。WeVisOne-VL 为推理效率跳过 Chain-of-Thought,直接生成结构化结果,典型输出形如:
<OBJ> <387> <241> <512> <389> <OBJ> <450> <120> <610> <300>每个框后跟一个<OBJ>作实例分隔,下游按分隔符切分即可还原出逐实例的框列表,无需正则解析坐标数字。对话与图像输入通过 chat_template.jinja 模板封装,图片以Picture N:+ 图像占位符方式注入。
③ 像素解码器:仅 9.6M 参数的"像素引擎"
仓库中的 mask_decoder.pt(9,609,764 参数)是像素级任务的核心组件,由三个模块组成:
- Visual Feature Adapter:接入 Qwen3-VL merge 前 ViT 的多层级特征,为像素级输出提供分辨率信息;
- Box-Guided Query Decoder:6 个 deformable cross-attention 块,以
<OBJ>隐藏状态初始化,并用Fourier 编码注入检测框先验——先用框"锁定"区域,再精细提取特征; - Instance-Conditioned Dense Prediction Head:
FullCanvasAlphaCascadeHead沿S/4 → S/2 → S/1级联上采样,最终输出 stride 1 的全分辨率连续 alpha matte。
这种"大模型出框 + 轻量解码器出像素"的分工是最大亮点:昂贵的 LLM 只负责粗定位,像素级精修交给百万级小网络,算力开销大幅降低。
四、几个容易忽略的关键细节
- 图像预处理:processor_config.json 采用
Qwen2VLImageProcessor,mean/std 均为 0.5 归一化到 0~1,长边像素上限高达 16M,高分辨率图不怵; - 精度格式:默认
bfloat16,推理显存效率更友好; - 边界限制:像素解码器拒绝视频网格输入,目前仅面向单轮图像感知;精细 alpha 边缘对分辨率、严重遮挡与复杂半透明敏感;
- 用途定位:面向视觉落地/分割/抠图等研究场景,不应用于高风险自主决策或个体身份识别。
五、5 行代码快速上手
安装推理包后即可运行(权重仓库为只读,clone 使用 https://gitcode.com/tencent_hunyuan/WeVisOne-VL-4B ):
from PIL import Image from wevisone_vl import WeVisOneVL model = WeVisOneVL("tencent/WeVisOne-VL-4B", device="auto", dtype="bfloat16") image = Image.open("example.jpg").convert("RGB") result = model.predict(image, task="matting", query="person", temperature=0.0) print(result.response, len(result.masks))task换成检测、指代分割、OCR 等任务名,即可切换七大任务——一个模型、一套调用接口。
六、总结:这套架构值得抄哪三点?
| 设计点 | 收益 |
|---|---|
| 1001 个坐标 Token 化位置 | 位置即 Token,输出稳定、解析零成本 |
<OBJ>实例分隔 +None兜底 | 多实例天然分离,"找不到"不产生幻觉框 |
| 9.6M 像素解码器 + 跳 CoT | LLM 只做定位,像素交给轻量网络,快且省 |
WeVisOne-VL-4B 证明了:把坐标 Token 化 + 轻量像素解码器,一个小参数量的统一模型就能覆盖"框"到"像素"的全链路视觉感知,是研究统一视觉感知(unified visual perception)很实用的样本。模型以 Apache-2.0 协议发布(见 LICENSE),欢迎上手研究。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考