【免费下载链接】Tess-4-27B-8bit
Tess-4-27B-8bit是 mlx-community 提供的 8bit 量化多模态大模型,由 27 层 ViT 视觉塔(vision tower)负责"看懂"图像与视频帧,再把视觉信息交给 27B 语言模型生成回答。本文拆解这条视觉通路:图片如何被切成 16×16 的 patch、27 层 Transformer 如何融合局部细节、Merger 又如何把视觉特征压缩成语言模型能理解的 token。
一张图看懂整体结构:从像素到文字
整个模型的"看图说话"流程可以概括为三步:
图片/视频帧 ──▶ 预处理(切patch) ──▶ ViT视觉塔(27层) ──▶ Merger压缩 ──▶ 语言模型(64层) ──▶ 文字回答- 视觉塔(vision_tower):27 层 ViT 编码器,只负责"看",输出纯视觉特征;
- Merger:把 2×2 相邻的 patch 特征两两合并,token 数量直接减到 1/4;
- 语言模型:64 层、hidden_size 5120 的 Qwen3_5 架构,支持线性注意力 + 全注意力混合,负责理解并回答。
三者全部打包在 config.json 的architectures、text_config、vision_config三段配置里。
视觉塔核心参数:27 层 ViT 的"身材"
打开 config.json,vision_config字段就是视觉塔的"体检报告":
| 参数 | 值 | 含义 |
|---|---|---|
depth | 27 | Transformer 层数(blocks.0 ~ blocks.26) |
hidden_size | 1152 | 每个视觉 token 的向量维度 |
num_heads | 16 | 多头注意力头数 |
patch_size | 16 | 每块 16×16 像素 |
temporal_patch_size | 2 | 视频按 2 帧为一组处理 |
spatial_merge_size | 2 | 2×2 空间合并 |
out_hidden_size | 5120 | 对齐语言模型的 hidden_size |
num_position_embeddings | 2304 | 位置编码容量上限 |
hidden_act | gelu_pytorch_tanh | 激活函数 |
为什么是 27 层?层数越多,ViT 能从"局部纹理"逐步抽象到"全局语义"。第 0 层只认识边缘和色块,越靠后的层越接近"这是一只猫坐在沙发上"这种概念级理解。27 层是在识别精度与推理速度之间的平衡点。
ViT 原理图解:图像是如何被"读"懂的
第一步:切 Patch —— 把图片撕成小方块
ViT(Vision Transformer)的核心思想是:把图像当成"句子"来处理。
图片先按patch_size: 16切成 16×16 像素的小方块,每个方块通过vision_tower.patch_embed(3D 卷积投影)变成一个 1152 维向量,即一个"视觉 token"。权重文件对应 model-00001-of-00006.safetensors 中的:
vision_tower.patch_embed.proj.weightvision_tower.pos_embed.weight(位置编码,让模型知道每个 patch 在图中的位置)
第二步:动态分辨率 —— 大图不糊,小图不浪费
和传统 ViT 固定输入尺寸不同,本模型采用动态分辨率策略。查看 preprocessor_config.json 可知:
min_pixels: 65536(约 256×256):小图至少补到这个分辨率;max_pixels: 16777216(约 4096×4096):大图最多切这么多 patch。
也就是说,一张高清图会被切成更多 patch,模型就"看得更仔细";一张小图则不会强行放大糊掉。像素范围约束在 processor_config.json 的max_pixels/min_pixels中同样可以找到。
第三步:27 层注意力 —— 局部细节如何变成全局语义
每一层 block 的结构在 model.safetensors.index.json 中可以清晰看到(以 blocks.0 为例):
norm1 ──▶ attn(qkv + proj) ──▶ 残差 norm2 ──▶ mlp(fc1 + fc2) ──▶ 残差- attn.qkv:把每个 patch 向量拆成 Query / Key / Value,做 16 头自注意力——每个 patch 都会"参考"图中所有其他 patch;
- attn.proj:注意力结果投影回 1152 维;
- mlp.linear_fc1 / fc2:两层前馈网络(中间维度 4304),做非线性变换。
27 层反复堆叠后,早期层的"局部纹理特征"逐层整合为高层的"物体、空间关系、场景"表示。这是 ViT 相比卷积网络最本质的差异:全局上下文从第一层就开始参与计算。
第四步:Merger —— 视觉 token 的四压缩
27 层输出的 patch token 数量太大(一张大图可能有上万个),直接塞给语言模型会撑爆上下文。于是vision_tower.merger登场:
- 把 2×2 相邻的 4 个 patch token 拼接(hidden 维度 1152 → 4608);
- 经
linear_fc1→ 激活 →linear_fc2,投影到out_hidden_size: 5120,与语言模型对齐。
对应权重见 model.safetensors.index.json 中的vision_tower.merger.linear_fc1.weight等条目。token 数量除以 4 之后,才以特殊 token 的形式进入语言模型:
| 特殊 token | ID | 作用 |
|---|---|---|
vision_start_token_id | 248053 | 标记视觉内容开始 |
image_token_id | 248056 | 图像 patch 占位符 |
video_token_id | 248057 | 视频帧 patch 占位符 |
vision_end_token_id | 248054 | 标记视觉内容结束 |
这些占位符规则也可以从对话模板 chat_template.jinja 中看到:遇到图片插入 ,遇到视频插入 。
视频理解:帧如何变成"时间 token"
视频与图片走的是同一座 ViT,区别在时间维度:
temporal_patch_size: 2:每 2 帧叠成一组,卷积核在时间轴上做投影,让相邻帧共享特征,从而"看懂运动"而不是只看静态画面;- 抽帧策略见 processor_config.json:默认
fps: 2.0(每秒抽 2 帧),最少min_frames: 4帧、最多max_frames: 768帧; - 单帧分辨率在 video_preprocessor_config.json 中约束,
max_pixels放宽到约 2516 万像素,因为视频帧数多、单帧可以更省。
一句话概括:2 帧打包 + 2×2 空间合并 + 2×2 时间合并,让一段视频最终变成语言模型可以逐 token 阅读的"视觉句子"。
权重落在哪里:视觉塔文件定位
本仓库采用 6 分片的 safetensors 存储,全模型总大小 29,500,938,720 字节(约 29.5 GB,见 model.safetensors.index.json 的total_size)。
视觉塔的全部权重集中在第一个分片:
- model-00001-of-00006.safetensors —— 包含
vision_tower.blocks.0~26、merger、patch_embed、pos_embed,以及语言模型第 0~9 层; - model-00002-of-00006.safetensors ~ model-00006-of-00006.safetensors —— 语言模型其余层与 lm_head。
按 8bit 量化估算(8bit 权重 + 每 64 个元素一组缩放因子,见 config.json 的group_size: 64),27 层 ViT 约占 4 GB 出头,仅占整个模型的 1/7 左右——这正是"用 27B 大脑 + 轻量视觉塔"的典型设计。
快速上手:3 步验证视觉塔
仓库 README.md 给出了最小验证方式,跑一次"图片描述"即可确认视觉通路完整:
pip install -U mlx-vlmpython -m mlx_vlm.generate --model mlx-community/Tess-4-27B-8bit --max-tokens 100 --temperature 0.0 --prompt "Describe this image." --image <path_to_image>如果模型能准确描述图片内容,说明 patch_embed → 27 层 ViT → merger → 语言模型这条链路都工作正常。
总结:27 层 ViT 的设计取舍
- 看得准:27 层自注意力让全局上下文从第一层就参与,配合动态分辨率,大图细节不丢;
- 进得去:Merger 四压缩 + 5120 维对齐,视觉 token 数量可控,语言模型吃得住;
- 看得动:
temporal_patch_size: 2让同一座 ViT 既能读图片也能读视频帧; - 跑得动:8bit 亲和量化把 27B 多模态模型压到约 29.5 GB,在 Apple Silicon 的 MLX 生态里可直接本地推理。
下次当你问它"图里有什么"时,这 27 层 ViT 已经默默完成了切块、融合、压缩的全部工作——这正是 Tess-4-27B-8bit 多模态能力的核心所在。
【免费下载链接】Tess-4-27B-8bit
相关推荐
Tess-4-27B-4bit 图像理解实战:如何让视觉大模型看图识物、分析视频
Tess 4 27B 4bit 图像理解实战:如何让视觉大模型看图识物、分析视频 📌 Tess 4 27B 4bit 是一款可在 Apple Silicon
Agnes-3.0-Flash视觉塔架构拆解:27层ViT如何把图片压缩进5120维Token空间
Agnes 3.0 Flash视觉塔架构拆解:27层ViT如何把图片压缩进5120维Token空间 Agnes 3.0 Flash 是一款开源多模态大模型,它的
大模型多模态推理模型27层视觉塔如何工作?Qwopus3.8-27B-Flash-V2-bf16 多模态视觉编码器结构拆解
27层视觉塔如何工作?Qwopus3.8 27B Flash V2 bf16 多模态视觉编码器结构拆解 本文拆解 Qwopus3.8 27B Flash V2
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考