跳转至

视觉自监督学习

概述

视觉自监督学习(Visual Self-Supervised Learning)从无标注图像中学习强大的视觉表示,是计算机视觉基础模型的核心预训练范式。主要分为三大流派:对比学习、掩码图像建模和自蒸馏。

graph TD
    A[视觉自监督学习] --> B[对比学习]
    A --> C[掩码图像建模]
    A --> D[自蒸馏]

    B --> B1[SimCLR]
    B --> B2[MoCo v1/v2/v3]
    B --> B3[BYOL]
    B --> B4[SwAV]
    B --> B5[Barlow Twins]

    C --> C1[MAE]
    C --> C2[BEiT]
    C --> C3[SimMIM]
    C --> C4[I-JEPA]

    D --> D1[DINO]
    D --> D2[DINOv2]
    D --> D3[EMA Teacher]

1. 对比学习(Contrastive Learning)

1.1 核心思想

对比学习的目标是拉近正样本对,推远负样本对

  • 正样本对:同一图像的不同增强视图
  • 负样本对:不同图像的视图

1.2 SimCLR

SimCLR(Chen et al., 2020)是对比学习的经典框架。

流程

  1. 对每张图像 \(x\) 随机应用两组数据增强,得到 \(\tilde{x}_i\)\(\tilde{x}_j\)
  2. 编码器 \(f(\cdot)\)(如ResNet)提取表示
  3. 投影头 \(g(\cdot)\)(MLP)映射到对比空间
  4. 在投影空间计算NT-Xent损失

NT-Xent损失(Normalized Temperature-scaled Cross Entropy):

\[ \ell_{i,j} = -\log \frac{\exp(\text{sim}(z_i, z_j) / \tau)}{\sum_{k=1}^{2N} \mathbb{1}_{[k \neq i]} \exp(\text{sim}(z_i, z_k) / \tau)} \]

其中:

  • \(z_i = g(f(\tilde{x}_i))\) 是投影后的表示
  • \(\text{sim}(u, v) = \frac{u^\top v}{\|u\| \|v\|}\) 是余弦相似度
  • \(\tau\) 是温度超参数
  • \(N\) 是batch中的图像数

关键发现

  • 数据增强的组合至关重要(随机裁剪 + 颜色扭曲最有效)
  • 投影头 \(g\) 对下游任务性能很重要(但下游使用 \(f\) 的输出)
  • 更大的batch size效果更好(SimCLR使用4096+)

1.3 MoCo(Momentum Contrast)

动机:SimCLR需要极大的batch size,MoCo通过动量队列解耦了batch size和负样本数量。

MoCo v1(He et al., 2020):

  • 动量编码器\(\theta_k \leftarrow m \theta_k + (1-m) \theta_q\)\(m=0.999\)
  • 队列:维护一个大的负样本队列(65536个)
  • 查询编码器通过梯度更新,键编码器通过动量更新

MoCo v2:加入MLP投影头 + 更强的数据增强

MoCo v3:去掉队列,改用batch内对比(类似SimCLR),结合ViT

1.4 BYOL(Bootstrap Your Own Latent)

突破不需要负样本的自监督方法!

架构

  • 在线网络:编码器 + 投影器 + 预测器
  • 目标网络:编码器 + 投影器(EMA更新)

损失函数

\[ \mathcal{L}_{\text{BYOL}} = \| \bar{q}_\theta(z_\theta) - \bar{z}'_\xi \|_2^2 \]

其中 \(\bar{q}\)\(\bar{z}'\)\(L_2\) 归一化后的向量。

为什么不崩塌(collapse)?

  • 预测器的不对称性
  • EMA更新的目标网络提供缓慢变化的目标
  • 批归一化的隐式正则化

1.5 其他对比方法

方法 关键创新 是否需要负样本
SimCLR 简洁框架,强增强 是(大batch)
MoCo 动量队列 是(队列)
BYOL 预测器+EMA
SwAV 在线聚类 否(聚类替代)
Barlow Twins 交叉相关矩阵 → 单位矩阵
VICReg 方差-不变性-协方差正则化

2. 掩码图像建模(Masked Image Modeling)

2.1 核心思想

受NLP中掩码语言模型(BERT)启发,随机遮挡图像的一部分,让模型预测被遮挡的内容。

2.2 MAE(Masked Autoencoders)

MAE(He et al., 2022)是掩码图像建模的里程碑。

设计

  1. 将图像分为 \(16 \times 16\) 的patch
  2. 随机遮挡 75% 的patch(极高的遮挡比例)
  3. 编码器(ViT)仅处理可见patch
  4. 轻量解码器重建被遮挡的像素

损失函数:在被遮挡patch上计算MSE:

\[ \mathcal{L}_{\text{MAE}} = \frac{1}{|\mathcal{M}|} \sum_{i \in \mathcal{M}} \| \hat{x}_i - x_i \|_2^2 \]

其中 \(\mathcal{M}\) 是被遮挡patch的集合。

关键设计选择

  • 75%遮挡比例 >> NLP中的15%,因为图像冗余度更高
  • 编码器不处理mask token → 大幅节省计算
  • 解码器很浅(1-2层Transformer)→ 迫使编码器学习语义

2.3 BEiT

BEiT(Bao et al., 2022):不预测原始像素,而是预测离散视觉token。

两阶段流程

  1. 预训练一个dVAE(discrete VAE)作为视觉tokenizer
  2. 遮挡patch → 预测对应的dVAE token
\[ \mathcal{L}_{\text{BEiT}} = -\sum_{i \in \mathcal{M}} \log p(z_i | x_{\backslash \mathcal{M}}) \]

BEiT v2:使用VQ-KD(向量量化知识蒸馏)替代dVAE

2.4 其他掩码建模方法

方法 预测目标 编码器
MAE 原始像素 ViT
BEiT dVAE token ViT
SimMIM 原始像素(简单头) Swin Transformer
I-JEPA 抽象表示(非像素) ViT
data2vec 教师模型表示 多模态

2.5 I-JEPA

I-JEPA(Assran et al., 2023)预测的是抽象表示而非像素或token:

  • 不使用数据增强(与对比学习不同)
  • 在表示空间中预测目标区域的表示
  • 避免了像素级预测的低级偏差

3. 自蒸馏(Self-Distillation)

3.1 DINO

DINO(Caron et al., 2021):自蒸馏 + 无标签ViT。

架构:学生-教师框架

  • 学生网络:梯度更新
  • 教师网络:EMA更新 \(\theta_t \leftarrow \lambda \theta_t + (1-\lambda) \theta_s\)

多裁剪策略

  • 2个全局视图(224×224)→ 教师
  • N个局部视图(96×96)→ 学生
  • 学生预测教师的全局视图输出

损失函数(交叉熵):

\[ \mathcal{L} = -\sum_x \sum_{\substack{s \in \{x_1^s, \ldots, x_V^s\} \\ t \in \{x_1^g, x_2^g\}, t \neq s}} P_t(x) \log P_s(x) \]

Centering 防止崩塌:\(P_t(x) = \text{softmax}((g_t(x) - c) / \tau_t)\)

DINO的涌现特性

  • 注意力图自动分割前景物体
  • 无监督学会了语义分割能力
  • k-NN分类器即可达到很好的效果

3.2 DINOv2

DINOv2(Oustalet et al., 2023):视觉基础模型。

关键改进

  • 结合DINO的自蒸馏 + iBOT的掩码建模
  • 大规模自动策展的数据集(LVD-142M)
  • 更大的模型(ViT-g, 1.1B参数)
  • KoLeo正则化保持表示均匀分布

DINOv2损失

\[ \mathcal{L} = \mathcal{L}_{\text{DINO}} + \lambda \mathcal{L}_{\text{iBOT}} \]

DINOv2作为特征提取器

  • 直接冻结DINOv2 + 线性探测即可在多个任务上达到SOTA
  • 包括:分类、分割、深度估计、检索

4. 方法对比

4.1 总体比较

维度 对比学习 掩码建模 自蒸馏
预训练任务 实例判别 像素/token重建 知识蒸馏
数据增强 关键 不太依赖 多裁剪
负样本 需要/替代方案 不需要 不需要
适合架构 CNN/ViT ViT为主 ViT为主
学到的特征 全局判别 局部+全局 全局语义
代表方法 SimCLR, MoCo MAE, BEiT DINO, DINOv2

4.2 下游任务性能

方法 ImageNet Linear ImageNet k-NN ADE20K Seg
MoCo v3 (ViT-B) 76.7 - -
MAE (ViT-B) 68.0 - 48.1
DINO (ViT-B) 78.2 76.1 -
DINOv2 (ViT-g) 86.5 83.5 49.0

4.3 选择指南

graph TD
    A[选择自监督方法] --> B{数据量?}
    B -->|小规模| C[MAE/DINO]
    B -->|大规模| D{目标任务?}
    D -->|分类/检索| E[DINOv2]
    D -->|密集预测| F{有ViT?}
    F -->|是| G[MAE + 微调]
    F -->|否/CNN| H[MoCo/BYOL]

5. 数据增强策略

数据增强是对比学习成功的核心:

增强方式 SimCLR MoCo v2 DINO
随机裁剪 ✓(多裁剪)
颜色扰动
高斯模糊
水平翻转
灰度化 -
Solarization - -
多尺度裁剪 - -

6. 实践指南

6.1 预训练设置

# MAE预训练示例(伪代码)
class MAE(nn.Module):
    def __init__(self, encoder, decoder, mask_ratio=0.75):
        self.encoder = encoder  # ViT
        self.decoder = decoder  # 浅层Transformer
        self.mask_ratio = mask_ratio

    def forward(self, x):
        # 1. Patch embedding
        patches = self.patchify(x)
        # 2. 随机遮挡
        visible, masked, ids = self.random_mask(patches)
        # 3. 编码可见patch
        latent = self.encoder(visible)
        # 4. 解码重建
        pred = self.decoder(latent, ids)
        # 5. MSE损失(仅在遮挡区域)
        loss = F.mse_loss(pred[masked], patches[masked])
        return loss

6.2 微调建议

  • 线性探测:冻结编码器,只训练线性层(评估表示质量)
  • 端到端微调:解冻编码器,较小学习率
  • 适配器微调:LoRA等参数高效方法

7. 总结与展望

历史演进

  1. 2020: SimCLR, MoCo → 对比学习爆发
  2. 2020: BYOL → 无负样本方法
  3. 2021: DINO → 自蒸馏 + ViT涌现特性
  4. 2022: MAE → 掩码图像建模兴起
  5. 2023: DINOv2, I-JEPA → 视觉基础模型
  6. 2024+: 多模态自监督、视频自监督

未来方向

  • 视频自监督学习(时序一致性)
  • 多模态联合自监督(图像+文本+音频)
  • 更高效的预训练方法
  • 自监督与大规模生成模型的融合

参考文献

  • Chen et al., "A Simple Framework for Contrastive Learning of Visual Representations," ICML 2020
  • He et al., "Momentum Contrast for Unsupervised Visual Representation Learning," CVPR 2020
  • Grill et al., "Bootstrap Your Own Latent," NeurIPS 2020
  • He et al., "Masked Autoencoders Are Scalable Vision Learners," CVPR 2022
  • Caron et al., "Emerging Properties in Self-Supervised Vision Transformers," ICCV 2021
  • Oquab et al., "DINOv2: Learning Robust Visual Features without Supervision," TMLR 2024

评论 #