dino&dinov2

dino

https://www.bilibili.com/video/BV1wN411J7Gg/?spm_id_from=333.337.search-card.all.click&vd_source=ffe0194cb4df5b2582746fd0c78060e8
  • 一种用于自监督视觉学习的深度学习模型,于 2021 年由 Facebook AI 提出;
  • 最先探讨基于 Transformer 架构的自监督学习代表作之一,通过在无标签图像上进行自监督训练来学习视觉特征表示;
  • 核心思想便是通过在大规模的无标签数据集上进行对比学习,将原始图像的特征与随机裁剪的图像的特征进行对比,从而学习到更好的视觉通用表征;
  • DINO 这个名称可以理解为是由 Distillation 和 NO labels 这两个词组成的缩写,既表达了DINO采用自蒸馏方法的特点,也突出了它是一种基于无监督学习的模型;
  • 使用自身的输出来生成“伪标签”,然后使用这些伪标签来重新训练模型,从而进一步提高模型的性能和泛化能力。

方法

DINO 本质上是一种自监督学习方法,通过无监督的方式学习图像特征表示,可用于计算机视觉的其他下游任务,例如分类和检测等。该方法的核心思想是使用一种叫做自蒸馏的方法,即将一个学生模型的表示与一个动量化的教师模型的表示进行比较,以学习出更好的特征表示。

网络结构
  • 整体框架包含两个相同的架构,分别为教师网络和学生网络,具体的架构可以是 ViT 等 vision transformer 或者诸如 ResNet 等 CNNs 特征提取器;
  • 这种学生和教师网络均输出相同 embeddings 的情况容易出现模式崩塌(mode collapse)的现象–>应用“动量教师”(momentum tearcher)模型,即教师模型的权重不是基于反向传播更新的,而是更新自学生网络。
数据增强
图像裁剪

DINO 中最核心的数据采样策略便是图像裁剪,这也是自监督学习领域应用非常广泛的主策略之一。一般来说可将裁剪后的图像分为两种:

  • Local views: 即局部视角,也称为 small crops,指的是抠图面积小于原始图像的 50%;
  • Global views: 即全局视角,也称为 large crops,指的是抠图面积大于原始图像的 50%;

在 DINO 中,学生模型接收所有预处理过的 crops 图,而教师模型仅接收来自 global views 的裁剪图。据作者称,这是为了鼓励从局部到全局的响应,从而训练学生模型从一个小的裁剪画面中推断出更广泛的上下文信息。

简单来说,就是把局部特征和全局特征分别交给不同的模型来学习,以便在处理整个图像时,能够更好地对局部细节和上下文进行综合判断。

随机增强

此外,为了使网络更加鲁邦,DINO 中也采用一些其它的随机增强,包括:

  • 颜色扰动(color jittering)
  • 高斯模糊(Gaussian blur)
  • 曝光增强(solarization)
损失函数
  • 教师和学生网络分别预测一个一维的嵌入,为了训练学生模型,我们需要选取一个损失函数,不断地让学生的输出向教师的输出靠近;
  • 在训练过程中,学生模型可以通过模仿教师模型的输出来学习更好的特征表示,从而提高模型的性能和泛化能力;
  • 这也可以看作是一个分类问题,以便网络可以从局部视图中学习更有意义的全局表示。
Centering and Sharpening

用于防止模式崩塌的两种有效方式。

Centering
  • 在自监督学习中,mode collapse 是指网络的学习过程中出现了多样性减少的现象。具体来说,当网络学习到一组特征表示时,往往会出现多个输入数据映射到相同的特征表示的情况,这就是所谓的模式崩塌;
  • 这种现象通常是由于网络在优化过程中陷入了局部最优解,只能考虑到一部分数据的特征表示,而忽略了其它数据样本的模式和特征,从而导致了多样性缺失的现象,因此会对模型的鲁棒性产生很大的负面影响。
  • 教师模型的输出经过一个 EMA 的操作,从原始激活值中减去得到一个新的结果,这种操作能够防止任何一个特征占据统治地位,因为平均值会在值的范围中间。
Sharpening
  • 通过在 softmax 函数中加入一个 temperature 参数来强制让模型将概率分布更加尖锐化;
  • 由于小差异会被夸大,这会防止所有激活值都是相同的,因为小的差异也会被放大;
  • 这个技巧和中心化操作搭配使用,可以使得激活值不断变化,从而引导学生模型更好地了解哪些特征应该变得更加强大。

实验

  • 能够自动学习特定于类别(class-specific)的特征,从而实现准确的无监督对象分割;
  • 应用于未受过训练的场景,例如用于识别重复图像,表现也优于现有的最先进模型,尽管它起初并不是为这一目的设计的;
  • 相比于监督学习,DINO 的潜在空间也具有很好的分离类别,这意味着它的特征足够丰富,可以分离物体中的微小差异,这使得它非常适合下游任务和迁移学习。

总结

第一篇探索 ViT 模型在自监督学习领域的经典代表作。DINO 整体架构基于自蒸馏的范式进行构建,包含一个教师网络和学生网络。其中,学生网络学习从局部补丁预测图像中的全局特征,该补丁受动量教师网络嵌入的交叉熵损失的监督,同时进行居中和锐化以防止模式崩溃。

dinov2

https://github.com/facebookresearch/dinov2

借鉴NLP;
自动化数据管道–>获取更好的数据集,包含 10 亿个可调参数的 ViT 模型,无监督蒸馏压缩成应用于不同任务的小模型;

大规模数据集 LVD-142M

从大量未标注的数据中检索出与几个经过精心整理过的数据集中存在相似度很高的那部分样本所组成;
在这里插入图片描述

去重

copy detection pipeline
// A self-supervised descriptor for image copy detection | Meta-CVPR22

自监督图像检索
  1. 聚类,使检索时能快速找到与查询图像相似的图像;
  2. 给定一个查询图像,从与查询图像所在的聚类中检索N(通常为4)个最相似的图像;
  3. 将这些相似的图像和查询图像一起用于预训练,以获得更加优质大规模预训练数据集。
实现细节
  • Faiss库:专门用于高维向量相似度搜索的库。预训练数据集的去重和检索阶段中,采用 Faiss 库来高效地索引和搜索最近嵌入向量。
  • GPU加速:Faiss 库的GPU-accelerated indices,利用倒排文件索引(inverted file indices)和乘积量化编码(product quantization codes)进行处理。
  • 集群计算:整个预处理过程在一个由 20 个节点组成的计算集群上完成,每个节点配备 8 个 V100-32 GB 的 GPU。

通过以上操作,最终生成的 LVD-142M 数据集是一个包含 142 百万张图像的数据集。整个预处理过程只需要不到两天的时间就能够完成。

方法

用于学习特征的判别式自监督方法,DINO 和 iBOT 损失的结合,并引入了 SwAV 的居中方法;
一个正则项来扩展特征;
短的高分辨率训练阶段。

Image-level objective

图像级目标,一种用于学习特征的判别式自监督方法。

  • 将来自同一图像不同裁剪的视图作为正样本,将来自不同图像的视图作为负样本,使用交叉熵损失函数来衡量这些视图之间的相似性和差异性,从而训练一个学生网络;
  • 使用指数移动平均方法构建一个教师网络,其参数是过去迭代的加权平均值,以减少训练中的波动;
  • 最终,使用这两个网络的类令牌特征作为特征表示。
Patch-level objective

另一种用于学习特征的自监督方法,称为 Patch 级目标。

  • 将输入的一些 Patch 随机地遮盖掉,只将未被遮盖的 Patch 提供给教师网络;
  • 使用交叉熵损失函数来衡量学生和教师网络在每个被遮盖的 Patch 上的特征表示的相似性和差异性,从而训练学生网络;
  • 同时,我们可以将 Patch 级别的损失与图像级别的损失相结合,以便在训练过程中兼顾整体和局部特征。
Untying head weights between both objectives

此方法是针对前两个方法的实验发现进行的改进。

  • 在前两个方法中,图像级别和Patch级别的损失函数都共享了一个网络的参数(权重)。但是经过实验观察发现,当两个级别的损失函数共享同样的参数时,模型在Patch级别会欠拟合,在图像级别会过拟合。
  • 因此,考虑将这些参数(权重)解绑,使得模型在两个级别都能够更好地学习特征表示。
  • 这个方法的优化目标是在两个级别都得到最佳的结果。
Sinkhorn-Knopp centering

这个方法是对 DINO 和 iBot 两种方法中的一些步骤进行改进。

  • 在原来的方法中,教师模型中的 softmax-centering 步骤在某些情况下可能导致不稳定性,因此本文采用了 Sinkhorn-Knopp(SK)批量归一化方法来代替。
  • 通过正则化来使学生和教师网络在特征表示上更加接近,使用 3 次 Sinkhorn-Knopp 算法迭代来实现归一化。
  • 对于学生网络,则仍然使用 softmax 归一化。
KoLeo regularizer

一种正则化方法,它通过计算特征向量之间的差异来确保它们在批次内均匀分布。

  • 使用一种名为 Kozachenko-Leonenko 差分熵估计的技术,这是一种估计随机样本密度的方法;
  • 计算前特征向量会被进行“2-范数归一化”以确保其具有相同的长度;
  • 这个正则化器的作用是减少特征向量之间的差异,从而使它们在整个批次内均匀分布。
Adapting the resolution
  • 预训练的最后一段时间内,将图像的分辨率提高到 518×518 ,便在下游任务中更好地处理像素级别的信息,例如分割或检测任务。
  • 高分辨率的图像通常需要更多的计算资源和存储空间,因此只在预训练的最后阶段使用这种方法,以减少时间和资源成本。

实现

PyTorch 2.0, A100 GPU;
与 iBOT 实现相比,DINOv2 的代码在相同硬件下运行速度提高了2倍,内存使用量也只有 iBOT 的 1/3;

Fast and memory-efficient attention

为了提高自注意力层的速度和内存使用效率,作者基于 FlashAttention 实现了一个新的版本。由于 GPU 硬件的特殊性,每个 head 的嵌入维度是 64 的倍数时效率最佳,并且当整个嵌入维度是 256 的倍数时,矩阵运算效率更好。

Nested tensors in self-attention

为了提高计算效率,本文实现了一个可以在同一个前向传递中运行全局裁剪和局部裁剪(它们具有不同数量的补丁标记)的版本。

Efficient stochastic depth
  • 在传统的stochastic depth方法中,由于每个残差块在训练过程中可能会随机丢弃,因此需要在前向计算时对每个残差块的输出进行屏蔽(mask)以确保正确性;
  • 这里实现了一种改进版本的stochastic depth方法,跳过被丢弃的残差的计算,而不是对结果进行屏蔽,以节省内存和计算资源,并且在高丢弃率下具有更好的计算效率和内存使用率;
  • 具体地,实现方式是在批次维度上随机重排样本,并将第一个(1 - d)× B个样本用于块的计算。
Fully-Sharded Data Paralle
  • FSDP 技术的作用是使训练过程可以更加高效地扩展至多个 GPU 节点,如此一来,模型大小不再受单个 GPU 的内存限制,而是受到整个计算节点的 GPU 内存总和的限制;
  • FSDP 还具有第二个优点,即可以节省跨 GPU 通信成本,与 DDP 和 float16 自动类型转换相比,Pytorch-FSDP 混合精度在几乎所有情况下都更加优越。
Gradient AllReduce

是在分布式深度学习中,一种将梯度从不同 GPU 节点上的模型参数收集和组合成单个梯度张量的操作。通常,在使用梯度下降算法时,需要将所有 GPU 节点的梯度合并成单个梯度张量,以更新模型参数。此操作便是实现这一目的的一种并行算法,可以提高模型训练的速度和效率。

Model distillation

模型蒸馏是一种通过在小模型中复制大模型的输出来训练小模型的方法。这种方法旨在通过最小化大模型和小模型对一组给定输入的输出之间的距离来实现。对于该论文中的训练,研究人员利用了同样的训练循环,使用一个更大的模型作为冻结的教师模型,保留学生模型的 EMA 作为最终模型,并且移除了遮蔽和随机深度。

实验

定量分析
  • ImageNet Classification
  • Additional Image and Video classification Benchmarks
  • Instance Recognition
  • Dense Recognition Tasks
定性分析
  • Semantic Segmentation and Depth Estimation
  • Out-of-distribution generalization
  • PCA of patch features
  • Patch matching

总结

第一个基于图像数据的 SSL 工作,一种用于在大型图像数据集上预训练图像编码器,以获得具有语义的视觉特征。这些特征可用于广泛的视觉任务,无需微调即可获得与有监督模型相当的性能。该方法的关键是基于精心设计的数据流管道构建大规模的图像数据集,以及一些技术改进,如 Stochastic Weight Averaging、Efficient Stochastic Depth和Fully-Sharded Data Parallel等。此外,本文充分展示了这些模型的一些性质,如对场景几何和对象部分的理解。作者计划继续在模型和数据规模上进行扩展,并希望将这些视觉特征与简单的线性分类器相结合,用于创建一个语言-视觉联合系统,以处理视觉特征并提取所需的信息。

References

  • https://blog.csdn.net/CVHub/article/details/130303984
  • https://blog.csdn.net/CVHub/article/details/130304078
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值