VPD
利用预训练文本生成扩散模型做视觉感知,在深度估计等任务上刷新SOTA
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
利用预训练文本生成扩散模型做视觉感知,在深度估计等任务上刷新SOTA
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
2023年,一个来自清华大学的研究团队在ICCV(国际计算机视觉顶会)上发表了一篇论文,提出一个大胆的问题:Text-to-Image扩散模型(如Stable Diffusion)学到的视觉表征,能不能直接拿来解决传统视觉任务——语义分割、深度估计、指代分割?
答案是:不仅能,而且效果拔群。这篇论文就是VPD(Visual Perception with Pre-trained Diffusion Models),它将预训练文本生成扩散模型的语义知识,迁移到下游视觉感知任务,在NYUv2深度估计、ADE20K语义分割、RefCOCO指代分割等多个基准上刷新了SOTA(State-of-the-Art)。
理解VPD的创新,需要先理解传统方法的问题。
传统感知模型的困境:ResNet、DINO等视觉模型是在大量图像数据上训练的,擅长提取低层纹理特征,但对高层语义理解有限。而Text-to-Image扩散模型(如SD)在生成逼真图像的过程中,已经隐式地学会了丰富的语义知识——它知道什么是「猫」、什么是「椅子」、空间深度关系如何。
VPD的核心洞察是:冻结SD模型的权重,只微调轻量级解码器,让SD的cross-attention map(交叉注意力图)成为提取语义信息的天然「探针」。
具体实现:
register_attention_control函数正是实现这一机制的核心——它遍历UNet的input_blocks、output_blocks和middle_block,将所有CrossAttention的forward替换为带controller的版本,从而获取注意力权重。VPD仓库采用多子项目并列的目录结构,每个子目录对应一个视觉任务:
| 目录 | 任务 | 核心模型 |
|---|---|---|
vpd/ | 核心模型(CrossAttn hook、AttentionControl) | VPDBase |
segmentation/ | 语义分割(ADE20K) | Semantic FPN + VPD |
depth/ | 单目深度估计(NYUv2) | VPDDepth |
refer/ | 指代图像分割(RefCOCO等) | VPDRefer |
vpd/models.py 是整个项目的技术核心,约500行代码,包含了:
register_attention_control: 核心hook机制,遍历UNet所有CrossAttention层注入controllerAttentionControl: 抽象基类,定义步间回调和between_steps接口DummyController: 空控制器,用于纯推理场景depth/ 和 refer/ 各自有完整的训练/测试脚本(train.py/test.py)、配置文件(configs/)、数据集处理工具和requirements.txt。这意味着三个任务是相互独立的,可以按需只跑其中一个。
VPD在三个任务上均展示了预训练扩散模型知识的迁移价值:
深度估计(NYUv2):RMSE 0.254 —— 相比之前的SOTA有明显提升。d1 accuracy(误差<10%的像素比例)达0.964,说明在绝大多数区域预测非常准确。
语义分割(ADE20K):mIoU 54.6,配合Semantic FPN仅训练80K迭代即达到此水平。这对于没有大规模标注的分割任务来说相当可观。
指代分割(RefCOCO/G-Ref):在RefCOCO上oIoU达到73.46,能根据自然语言描述(如「最左边的红苹果」)准确定位图像中的目标区域。这展示了SD语义知识在理解空间-语言关系上的优势。
环境要求(这是最大的门槛):
checkpoints/目录安装步骤:
git clone + git submodule init && git submodule updatecheckpoints/depth/requirements.txt、refer/requirements.txt)核心依赖:torch、timm、transformers、einops、omegaconf、opencv、scipy、tensorboardX。
训练/推理:各任务都有train.py和test.py,通过bash脚本(dist_train.sh、train.sh、test.sh)启动分布式训练。
没有Web界面,纯CLI操作,对习惯图形化的用户不友好。
VPD代表了2022-2023年一个重要的研究方向:利用大规模生成模型的知识来辅助判别任务。这一范式在VPD之后催生了大量follow-up工作,包括将SD知识用于3D重建、医学影像、视频理解等方向。
论文发表后被Papers With Code收录,在monocular depth estimation on NYU Depth V2榜单上获得了官方认证的SOTA标记。对于研究扩散模型表征学习与视觉感知交叉方向的学者,VPD是必读论文;对于想将扩散模型能力迁移到自身业务场景的工程师,VPD提供了完整的代码参照。