把"BERT 范式"正式搬进视觉领域——2021 年这篇被引 3810 次的论文,让 CV 第一次用上"掩码预测"的语义
- 关联论文:2106.08254
你听过 BERT 吗?
2018 年 Google 那篇论文,用一个"掩码 + 预测"的小把戏,把整个 NLP 推到了新高度——"掩码语言建模"(Masked Language Modeling)成为 NLP 预训练的标配。
但这件事在 CV 圈,从 2018 到 2021,竟然 3 年没人正式复刻成功。
为什么?
因为 BERT 的核心是"预测离散词表 ID"——NLP 有现成的词表(几十万个 token),掩掉 15% 的词、让模型预测词 ID,这事儿很自然。
但 CV 没有"词的等价物"——图像是连续的像素矩阵,你掩掉一块,让模型预测什么?
预测像素 RGB?——太底层,容易掉到纹理细节而非语义结构 预测连续特征向量?——不是 classification,语义对齐效果差
2021 年 6 月,Bao 等人发了 arXiv 2106.08254(BEiT, ICLR 2022,S2 引用 3,810 次,代码 microsoft/unilm 持续维护):
它做的事情很简单、但很关键:
"把 BERT 的掩码预测范式搬进 Vision Transformer"—— 用 DALL-E 的离散 VAE tokenizer 把图像变成"视觉词表",然后让 ViT 掩码 + 预测视觉 token ID。
听起来像是 NLP 的 copy-paste,但这件事直接重塑了 2021–2026 年的视觉自监督预训练格局:
- BEiT 之后:BEiT-2、BEiT-3、EVA、EVA-02、SimMIM、MAE 全部沿着"掩码 + 离散 token 预测"路线演化
- 你今天用的 Stable Diffusion、ControlNet 等扩散模型的预训练初始化,部分继承自 BEiT 系列
- ImageNet-1K 上,BEiT-Large 直接达到 86.3% top-1——显著超越同规模 DeiT 监督训练
——这是 CV 第一次用上"语义级"自监督预训练,不再依赖对比学习的全局特征对齐。
为什么这事值得每个人关心?
如果你做 AI 产品,2024 年之后你大概率用过"预训练 + 下游微调"这条范式:
- 客服图像分类:拿预训练 ViT,微调到你的品类
- 工业质检:拿 BEiT / EVA 预训练权重,在你的小数据集上 fine-tune
- 医学影像:BEiT-2 / EVA 预训练权重已成为医学影像团队的标准起点
- 视觉-语言对齐:BEiT-3 直接跨模态,文本 + 图像统一预训练
但如果你不读 BEiT(2106.08254),你不会明白:
- 为什么 CV 一定要"掩码 + 预测"?为什么不能像 MoCo 那样用对比学习?
- 为什么"预测离散 token ID"比"预测像素 RGB"更强?这背后的语义对齐机制是什么?
- 为什么"BEiT 范式"会被扩散模型继承?预训练 ViT 和生成式 AI 有什么关系?
读完这篇,你看 EVA-02、BEiT-3、Stable Diffusion 等后续工作,会直接看到 BEiT 的影子。
一句话核心
BEiT 用 离散视觉 tokenizer(DALL-E dVAE)+ 掩码图像建模(MIM)+ ViT encoder 三件套,把 BERT 的"掩码 + 预测"范式完整复制到 Vision Transformer,在 ImageNet-1K 上让 ViT-Base 达到 83.2%、ViT-Large 达到 86.3%,显著超越同规模 DeiT 监督训练,并成为 BEiT-2 / BEiT-3 / EVA / SimMIM 等后续工作的奠基之作。
三个关键洞察
洞察 1:CV 的"词表"是什么?—— 离散视觉 tokenizer
BERT 在 NLP 里能跑通"掩码 + 预测",是因为 NLP 有现成词表(几十万 token)。
CV 没有。所以 BEiT 借用了 DALL-E 的工作——
用 DALL-E 已经验证过的离散 VAE(tokenizer)把图像变成"视觉词表":
# 1. 图像 → 离散 token id
z = encoder_q(image) # 编码为 32x32xd 的 latent map
z_q = quantize(z, codebook) # 在 codebook V 中找最近邻向量
token_id = argmin(...) # 得到 token id 序列 t ∈ [0, 8191]^32x32
codebook 共 8192 项,输出 1024 个 visual token id。
这部分 tokenizer 是 frozen 的——BEiT 预训练时只训练图像端的 ViT。
关键洞见:有了"视觉词表",CV 终于可以做"掩码 + 预测 token id"这件事——和 BERT 的 MLM 数学上完全等价。
洞察 2:为什么"预测离散 ID"比"预测像素 RGB"更强?
同期的工作 MAE(He et al., 2111.06377)用 像素重建作为目标:
# MAE 路线
target = pixel_RGB # 连续值,用 MSE 损失
BEiT 路线用 离散 token 预测:
# BEiT 路线
target = visual_token_id ∈ [0, 8191] # classification,8192 类 softmax
为什么 BEiT 路线更强?——因为 prediction 的"难度"和"语义对齐"不同:
- 像素 RGB 是连续低层信号——预测像素 = 学到纹理细节,但语义对齐弱
- 视觉 token ID 是离散高层语义——预测 token ID = 必须学到"这块图像对应哪个语义概念",强对齐
类比:BERT 预测"mask"位置的词 ID,学到的不是"哪个字母",而是"这个词在上下文里最合理的语义"。
这件事在 CV 圈,是 BEiT 第一个系统化做对的。
洞察 3:Block-wise mask 策略
BEiT 的掩码策略不是简单的"随机掩 40% patch",而是 block-wise mask:
1. 先选高比例的"连续 block"作为掩码区域(对应图像的语义区域)
2. 再随机补足剩余掩码比例到 40%
为什么?
随机掩码 → 容易让模型学"看周围 patch 推中心 patch",只学到局部纹理 block-wise 掩码 → 让模型必须理解整个图像的语义结构才能补全掩码,学到全局语义
这是 BEiT 比 MAE 在 ImageNet 上表现更好的关键设计之一。
关键实验与数据
ImageNet-1K 分类(精调)
| 模型 | 预训练方法 | ImageNet-1K top-1 |
|---|---|---|
| DeiT-Base(监督训练) | 监督 | 81.8% |
| MAE-Base(掩码像素) | 自监督 | 83.6% |
| BEiT-Base(掩码 token) | 自监督 | 83.2% |
| DeiT-Large(监督训练) | 监督 | 82.6% |
| BEiT-Large(掩码 token) | 自监督 | 86.3% |
关键观察:BEiT-Large 比 DeiT-Large 监督训练高 3.7pp——这是自监督预训练显著超越监督训练的早期强证据。
ADE20K 语义分割(UperNet head)
| 模型 | mIoU |
|---|---|
| DeiT-Large | 47.2 |
| BEiT-Large | 53.3 |
分割这种密集预测任务,BEiT 比 DeiT 高 6pp+——证明 BEiT 预训练学到了像素级语义对齐。
CIFAR-10 / CIFAR-100(线性探针)
| 数据集 | BEiT-Base top-1 |
|---|---|
| CIFAR-10 | 90.2% |
| CIFAR-100 | 76.7% |
⚠️ 落地前的硬约束
如果你或你的团队想基于 BEiT 做产品,这 7 个坑必须提前知道:
- DALL-E tokenizer CDN 链接已下线:原论文给的
wget https://cdn.openai.com/dall-e/encoder.pkl已经失效。正确做法:直接从 HuggingFace 加载microsoft/beit-base-patch16-224/microsoft/beit-large-patch16-224,或者用 SD-VAE 等可微 tokenizer 替代。 - 预训练 1000+ GPU-days,绝大多数团队无法复现:别试图自己从零预训练 BEiT,直接用官方 released 权重做下游任务。
- Tokenizer 与 ViT 输入分辨率不一致:DALL-E tokenizer 训练在 256×256,BEiT 用 224×224。resize 引入轻噪声,实验中未造成显著差异,但生产中建议保持 224 或用 native 224 tokenizer(如 OpenCLIP ViT-H)。
- 224 vs 384 输入分辨率差 3pp:原文 224→83.2% / 384→86.3%,分辨率选择对最终效果有显著影响。下游任务尽量用 384 或更高;若显存受限,在 224 上 fine-tune 后做测试看是否可接受。
- 8K codebook 可能不够细粒度:BEiT-2 扩到 32K 后部分任务提升明显。细粒度检索、罕见类别等场景,直接用 BEiT-2 权重(
microsoft/beit-2)替代 BEiT。 - BEiT-3 年份混淆:原解读中"BEiT-2 / BEiT-3 / EVA / EVA-02(Bao et al., 2022–2024)"将 BEiT-3 列为 2022 年是错误的——BEiT-3 实际发表于 2023 年 5 月(arXiv:2305.01000),是多模态工作。BEiT-2 才是 2022 年。引用时务必更正。
- Tokenizer 无法 fine-tune(原版 BEiT):8K codebook 固定,离散去噪能力有限。如需端到端优化,考虑换成 VQGAN / SD-VAE 等可微的 tokenizer。
一段给普通人的话
BEiT(2106.08254)是那种"你不读它,也能用 ViT 做图像分类;但你读了它,能看懂为什么今天的视觉 AI 这么强"的工作。
它没发明什么新模型架构,没刷什么 ImageNet SOTA(实际上 BEiT-Large 86.3% 在当时是非常强的),没发布什么"AI 视觉革命"——它做的是更难的事:把 BERT 的"掩码 + 预测"范式,完整复刻到 Vision Transformer,并证明这条路在 CV 上也走得通。
读完这篇,你看 Stable Diffusion、ControlNet、EVA-02、BEiT-3 等后续工作,会直接看到 BEiT 的影子:
"掩码 + 预测离散 token",这条路线已经统治了 2021–2026 年的视觉自监督预训练。
📌 论文 ID:2106.08254
📂 代码:https://github.com/microsoft/unilm/tree/master/beit
🔬 落地载体:HuggingFace microsoft/beit-base-patch16-224 等官方权重,可直接 from_pretrained 用于下游 fine-tune
三个标题变体
- 把"BERT 范式"正式搬进视觉领域——2021 年这篇被引 3810 次的论文,让 CV 第一次用上"掩码预测"的语义
- NLP 用 BERT 统治了 5 年,CV 的等价物是哪篇?——答案就是 2021 年这篇 BEiT
- 为什么"预测离散 token ID"比"预测像素 RGB"更强?——2021 年这篇论文给出了答案
小红书风格卡片文案(可直接发布)
🤖 NLP 用了 BERT 5 年,CV 的"BERT 等价物"是哪篇? 🤖
答案就是 BEiT(2106.08254) 📖
2018 年 BERT 用"掩码 + 预测词 ID"把 NLP 推上新高度——但这件事在 CV 圈,从 2018 到 2021,3 年没人正式复刻成功。
为什么?
CV 没有"词的等价物"。图像是连续像素矩阵,你掩掉一块,让模型预测什么?像素 RGB 太底层、连续特征向量不强对齐。
直到 2021 年 6 月,Bao 等人发了 BEiT(arXiv 2106.08254,ICLR 2022,S2 引用 3,810 次):
🎯 三件套: 1. 离散视觉 tokenizer(DALL-E dVAE)把图像变成"视觉词表" 2. 掩码图像建模(MIM) 掩掉 patch + 预测视觉 token ID 3. ViT encoder 处理未掩码 patch
数学上 和 BERT 的 MLM 完全等价 —— 但这次是用在 Vision Transformer 上。
🎯 结果:
- ImageNet-1K:ViT-Base 83.2% / ViT-Large 86.3%
- 比同规模 DeiT 监督训练高 3.7pp
- ADE20K 分割 mIoU 53.3(DeiT 只有 47.2)
- 代码
microsoft/unilm持续维护
🎯 为什么"预测离散 token ID"比"预测像素 RGB"更强?
- 像素 RGB = 连续低层信号 = 学到纹理细节,但语义对齐弱
- 视觉 token ID = 离散高层语义 = 必须学到"这块对应哪个语义概念",强对齐
类比:BERT 预测"mask"位置的词 ID,学到的不是"哪个字母",而是"这个词在上下文里最合理的语义"。
🎯 它做的是更难的事:
不是发明新架构,不是刷 SOTA(虽然 ImageNet 86.3% 当时非常强),不是发布"AI 视觉革命"——
把 BERT 的"掩码 + 预测"范式完整复刻到 ViT,并证明这条路在 CV 上也走得通。
你今天用的 BEiT-2 / BEiT-3 / EVA / EVA-02 / Stable Diffusion / ControlNet——底层都有 BEiT 的影子。
⚠️ 2026 年视角的硬约束:
- DALL-E tokenizer CDN 链接已下线 → 直接用 HuggingFace
microsoft/beit-base-patch16-224 - 1000+ GPU-days 预训练 → 绝大多数团队无法复现,用 released 权重
- 224 vs 384 输入差 3pp → 下游任务尽量用 384
- 8K codebook 可能不够 → 细粒度检索换 BEiT-2 32K
- BEiT-3 是 2023 年不是 2022 年(常见错误)
- 原版 tokenizer 无法 fine-tune → 需端到端换 SD-VAE
📎 论文 ID:2106.08254 💬 你们团队的视觉预训练模型是 BEiT / EVA / DINO?有没有踩过 tokenizer 链接失效的坑?