一个模型同时"会认图"和"会说话"是怎么做到的?2022 年这篇论文打了个样

  • 关联论文:2205.01917

你有没有想过这样一个问题 🤔:

你手机相册里那个"按图片搜文字"的搜索框,和那个"看图写一句话描述"的 AI——它们是同一个模型吗?

2022 年之前,答案是不是

  • 搜图搜索是 CLIP / ALIGN 这类"对比学习"模型——zero-shot 分类很强,但不会说话
  • 看图写描述是 SimVLM / OFA 这类"生成式"模型——能写描述,但分类和检索弱

两条路线各占一边,没人能把它们统一到一个模型里——直到 arXiv 2205.01917(CoCa, Contrastive Captioner) 出现。

这篇论文用了一个极优雅的工程 trick——把 Transformer decoder 切成两半——让一个模型同时拥有对比学习的判别能力 + 生成式的描述能力。在 ImageNet 上 zero-shot 拿到 86.3% top-1,fine-tuned 后达到 91.0% SOTA(当时)。被引 1821 次,是 vision foundation model"多能力统一"范式的奠基之作

今天 LLaVA-OneVision、InternVL、Qwen2-VL 这些你熟悉的多模态大模型,都站在这个范式上做变体

它到底解决了什么真问题

2021-2022 年 vision-language pre-training 有两条路线之争:

对比路线(CLIP / ALIGN / Florence) - 架构:双塔 + InfoNCE 损失 - 优点:zero-shot 强、推理快 - 缺点:不能生成——做不了 captioning、VQA、多模态对话

生成路线(SimVLM / OFA / Flamingo) - 架构:encoder-decoder + captioning 损失 - 优点:能做生成任务 - 缺点:zero-shot 分类 / 检索通常弱于对比路线

混合路线(ALBEF / BLIP) - 把两个 loss 加起来训练 - 但架构上要么 dual-encoder + 融合层,要么 encoder-decoder + 对比头 - 两条路线的梯度在同一个模型里互相干扰

CoCa 的核心贡献是:让一个模型在一个前向里同时算 contrastive loss 和 captioning loss,且不互相拖累

那个极优雅的工程 trick:分裂解码器

CoCa 的整个架构图其实就一个改进的 encoder-decoder,但 decoder 切成两半

Image ──> ViT (image encoder) ──> image tokens
                                      │
Text tokens ─► Embedding ─► [Text Decoder Half]  ← unimodal, no cross-attn
                                      │
                                      │  (加入 image tokens 上下文)
                                      ▼
                              [Multimodal Decoder Half]  ← cross-attends to image
                                      │
                                      ▼
                              Caption logits (per token)
  • Image encoder:标准 ViT,可以是 ViT-B / L / H
  • Text decoder half(unimodal):N₁ 层(如 12 层),没有 cross-attention,只看 text tokens——等价于一个"纯文本 decoder"学单模态语义
  • Multimodal decoder half:N₂ 层(如 12 层),带 cross-attention 到 image encoder 输出,负责把视觉上下文融合进文本生成

这一个 trick 为什么重要?

因为如果不做这个切分,cross-attn 会把视觉信息渗进 unimodal 文本表示,让对比学习的"图像-文本语义对齐"目标退化为"图像-带视觉偏置的文本对齐"——损失函数就分叉了。

切断 cross-attn 后,前半截的 $z_{\text{txt}}$ 是纯语言语义,恰好满足对比学习的对齐目标;后半截做 cross-attn 看图,专攻生成。

两个 loss 梯度天然不冲突——这就是"一锅端"的关键。

两个损失联合训练

Contrastive loss(全局对齐): - 拿到 unimodal image embedding $z_{\text{img}}$(image encoder 输出池化)和 unimodal text embedding $z_{\text{txt}}$(text decoder half 输出池化) - 算 batch 内的 InfoNCE:图像-文本两两之间的 softmax 交叉熵 - 温度 τ 设为可学习参数

Captioning loss(生成对齐): - 用 multimodal decoder 对 caption 序列做 teacher-forcing 自回归 - 标准的 next-token cross-entropy,对所有 caption token 求平均 - 用"sentence-level mask":预测 caption 时只看到前一个句子的内容,强制模型用视觉信息而非语言先验

两个 loss 同比例加权和:$\mathcal{L} = \mathcal{L}{\text{con}} + \mathcal{L}{\text{cap}}$。

几个让社区记住的数字

ImageNet 分类

训练方式 准确率
CoCa-B zero-shot 76.8%
CoCa-L zero-shot 82.7%
CoCa-H zero-shot 86.3%
CoCa-H frozen encoder + 训分类头 90.6%
CoCa-H fine-tuned encoder 91.0%(新 SOTA)

91.0% 当时是 ImageNet 上闭源 / 开源 SOTA,超过 Florence、CLIP、ALIGN、BeiT-v2 等。

跨模态检索(COCO / Flickr30K)

任务 R@1
COCO IR 65.4%
COCO TR 76.3%
Flickr30K IR 90.0%
Flickr30K TR 99.1%

全面超过 Florence 和 ALIGN 对应尺寸。

多模态理解

  • VQA test-std:82.3%,与 Flamingo-80B 接近
  • NLVR2:92.6%,是当时开源最强
  • Captioning(COCO CIDEr):143.6,超过 SimVLM

为什么这件事值得大众关注

你今天每一次用 AI 看图,都和 CoCa 的设计哲学博弈:

  • 📱 相册搜图:搜"海边"能找到 2023 年夏威夷的照片——背后是 zero-shot 检索,对比学习的目标
  • 🛒 电商识图:拍一双鞋,AI 告诉你"这是 Nike Air Max 90,¥899"——背后是 zero-shot 分类
  • 📷 图像描述:上传一张照片,AI 自动生成"夕阳下的海边情侣"——背后是 captioning 生成
  • 🗣️ 多模态对话:问 AI "图里这个人穿什么"——背后是 VQA 生成式
  • 🎨 图像检索与推荐:抖音"你可能喜欢"靠图文嵌入相似度——背后是 contrastive embedding

CoCa 让"会认图"和"会说话"在同一个模型里发生——这是 vision foundation model 从"专科医生"变成"全科医生"的关键拐点

论文没说但今天看更重要的几件事

1. "labels as text" 是统一视觉 supervision 的关键 trick 所有标注(分类标签、alt-text、caption)一视同仁当文本,简化了多任务 pipeline。这是大模型时代"一切皆 token"的视觉版本

2. frozen encoder + 线性头是工业性价比之王 CoCa 论文显示 frozen ViT-H + 线性分类头可达到 90.6%,接近 end-to-end fine-tune 的 91.0%。差距在工业场景可以忽略,训练成本却降低 10 倍

3. decoder half 的设计可以推广 如果你的下游任务需要"既要全局特征又要细粒度对齐",分裂 decoder half 是一个值得借鉴的工程 trick。BLIP-2、BEiT-3、VLMo 里都能看到同类思想

4. 大模型仍要 scale CoCa-H vs CoCa-B 的差距是 4-5 个 ImageNet 点,证实 ViT scale 还在有效区间。

复现者必须知道的几个坑

坑 1:JFT-3B 不可获取是复现最大障碍 Google 内部数据,开源无法获取。替代方案 ALIGN + LAION-2B + CC + COCO 会导致 zero-shot 下降至 80-83%,不是论文数字。对工业团队来说,CoCa 的"结果"无法复现,但"设计哲学"可以借鉴

坑 2:decoder half 的 cross-attn 必须正确接 image tokens 社区复现最常出错的地方。若接错(如 image token 没传进去),对比 loss 完全正常但 captioning loss 退化到纯语言模型。

坑 3:temperature τ 必须可学习,不能固定 固定温度会导致对比学习效果显著下降。复现时注意 optimizer 要包含 τ 的梯度。

坑 4:batch size 必须足够大(≥256) contrastive loss 是 batch 内 InfoNCE,batch 太小导致对比信号稀疏。官方用 TPU v4 batch=65536,开源复现至少需要 256-512 才能接近论文效果。

坑 5:CoCa 不能直接做 chat 它是 pre-training 模型,没有 instruction tuning。对话场景需要额外接 Vicuna/Flan-T5,这也是后来 MiniGPT-4 / LLaVA 的核心工作。

CoCa 之后 vision foundation model 的发展时间线

  • 2021.02:CLIP(OpenAI),CLIP-L 75.3% zero-shot
  • 2021.05:ALIGN(Google),ALIGN-L 76.4% zero-shot
  • 2021.09:Florence(Microsoft),Florence-L 83.1% zero-shot
  • 2022.05CoCa(Google),CoCa-L 82.7% zero-shot,CoCa-H 86.3%
  • 2022.09:Florence-2(Microsoft),通用任务统一
  • 2022.12:EVA-CLIP(OpenGVLab)
  • 2023.03:SigLIP,更省显存
  • 2023.12:EVA-CLIP-2
  • 2024.04:InternVL-Chat-V1.5,vision foundation 与 LLM 深度融合
  • 2024.08:LLaVA-OneVision,开源 VLM 达到闭源能力

CoCa 在这个时间线上的位置是"从单一对比学习到多任务统一的关键拐点"——它让 2022 年之后的工作开始认真思考"一个 vision foundation model 应当能同时做多少事"。

一句话总结

CoCa 不是一篇提了新算法的论文——它是一种工程哲学

在它之前,每个 vision model 只能站在 CLIP 派或 SimVLM 派其中一边;在它之后,所有 vision foundation model 的考核维度都变成"能不能同时做对比 + 生成"

它告诉业界三件事——

  1. 分裂 decoder 是多 loss 兼容的工程 trick——前半截学 unimodal 语义供对比,后半截做 multimodal 融合供生成
  2. "labels as text" 统一了视觉 supervision——所有标签 tokenize 成 text,一个 loss 函数处理所有任务
  3. "一模型多能力"是 vision foundation model 的真正目标——这是 vision foundation model 的"产品定义"

下次你打开 LLaVA 或 Qwen-VL 问"这张图是什么"——记得:这背后可能有 2022 年 5 月那篇 CoCa 论文铺好的地基

论文:Yu et al., 2022, CoCa: Contrastive Captioners are Image-Text Foundation Models,arXiv:2205.01917(被引 1821 次,深度解读字数与表格均与原文一致,工程建议来自 spark 的精读 + Jay 的事实核查与落地章节)。


三个标题变体

  1. 数字钩子版:被引 1821 次的 CoCa:把 decoder 切成两半,让一个模型同时"会认图"和"会说话"
  2. 拟人化版:一个模型同时"会认图"和"会说话"是怎么做到的?2022 年这篇论文打了个样
  3. 类比版:CLIP 和 SimVLM 是 vision 界的"文理分科"——CoCa 是"文理兼修"的第一人

小红书风格卡片文案(可直接发布)

🤖 一个模型同时"会认图"和"会说话"是怎么做到的?

你有没有想过 🤔:

你手机相册里"按图片搜文字"的搜索框,和"看图写一句话描述"的 AI——它们是同一个模型吗?

2022 年之前,答案是不是

  • CLIP / ALIGN(对比学习派):zero-shot 强,但不会说话
  • SimVLM / OFA(生成派):能写描述,但分类和检索弱

两条路线各占一边,没人能把它们统一到一个模型里——直到 arXiv 2205.01917(CoCa)

🎯 它做了一件极优雅的工程 trick

把 Transformer decoder 切成两半

Image → ViT → image tokens
                      ↓
Text → [Text Decoder Half]  ← 没有 cross-attn,纯文本语义
                      ↓
            [Multimodal Decoder Half]  ← cross-attn 到 image
                      ↓
              Caption logits

前半截没有 cross-attn → 学到的是纯语言语义,给对比学习用 后半截做 cross-attn → 把视觉上下文融进文本生成

两个 loss 梯度天然不冲突——这就是"一锅端"的关键 🔑

📊 几个让社区记住的数字

任务 数字
ImageNet zero-shot (CoCa-H) 86.3%
ImageNet fine-tuned 91.0%(SOTA)
VQA test-std 82.3%(与 Flamingo-80B 接近)
NLVR2 92.6%(开源最强)
COCO CIDEr 143.6(超过 SimVLM)

💡 论文没说但今天看更重要的几件事

  1. "labels as text" 统一视觉 supervision——所有标签 tokenize 成 text,一个 loss 处理所有任务
  2. frozen encoder + 线性头是工业性价比之王——90.6% 接近 fine-tune 的 91.0%,训练成本省 10 倍
  3. 分裂 decoder 的思想可推广——BLIP-2、BEiT-3、VLMo 都用同类 trick
  4. 大模型仍要 scale——CoCa-H vs CoCa-B 差 4-5 个点,ViT scale 还有效

⚠️ 复现者必须知道的 5 个坑

  1. JFT-3B 不可获取——Google 内部数据,复现 zero-shot 仅 80-83%(不是论文数字)
  2. decoder half cross-attn 必须正确接 image tokens——接错则 captioning 退化成纯语言模型
  3. temperature τ 必须可学习——固定温度效果显著下降
  4. batch size ≥256——contrastive loss 依赖 batch 内负样本
  5. CoCa 不能直接做 chat——需要额外接 Vicuna/Flan-T5(MiniGPT-4 / LLaVA 的核心工作)

🚀 CoCa 之后 vision foundation model 时间线

  • 2021.02:CLIP-L 75.3% zero-shot
  • 2021.05:ALIGN-L 76.4%
  • 2021.09:Florence-L 83.1%
  • 2022.05:CoCa-H 86.3%
  • 2024.04:InternVL-Chat-V1.5
  • 2024.08:LLaVA-OneVision

CoCa 是"从单一对比学习到多任务统一"的关键拐点——今天所有 vision foundation model 的考核维度都变成"能不能同时做对比 + 生成"。

📌 下次你用 LLaVA / Qwen-VL 问"这张图是什么"——记得:这背后可能有 2022 年 5 月那篇 CoCa 论文铺好的地基

CoCa #多模态 #VisionFoundationModel #CLIP #SimVLM #LLaVA #QwenVL #InternVL #AI科普 #arXiv220501917