dinov3论文阅读笔记
在大模型训练的任务中,核心问题在于长时间训练导致“块级特征丢失”现象:随着训练时间的延长,分类任务显著提升,效果明显变好,但是语义分割任务(像素级任务)显著下降。虽然采用了分层的策略,即libot与dino损失,但是随着时间推移,全局损失会占据主导地位,导致局部一致性(ibot)的退化。解读Gram矩阵是一个衡量不同特征之间关系的矩阵。对于一个由P个patch特征组成的矩阵X(尺寸为P×d),其G
简介:
dinov3是一个通用的视觉编码器,不专注于某个领域,而是作为一个base model对任何视觉任务都有出色效果。在任何场景下,用户直接冻结dinov3的参数,进行一次前向传播加上分类器即可完成下游任务,dinov3主要针对密集检测任务,超过了以往的模型
1)dinov3核心任务:同时胜任几何和语义任务。
-
几何任务:指需要理解物体“在哪儿”和“形状如何”的任务,如深度估计(每个像素距离相机的远近)、3D匹配(找到不同视角下同一个3D点的对应关系)、语义分割(标出每个像素的类别)。这类任务需要密集、像素级的精确特征,即密集特征图。
-
高层次语义任务:指需要理解图像“是什么”的任务,如图像分类(这是猫)、场景识别(这是厨房)。这类任务通常关注图像的全局信息。
2)面临的问题:
-
目标冲突:
-
为了做好全局语义理解,模型需要将信息高度抽象和压缩(例如,最终得到一个代表“狗”的向量)。这个过程会丢弃大量细节(比如狗的耳朵具体形状、尾巴的精确位置)。
-
为了做好局部几何任务,模型需要为每一个像素都保留其精确的局部结构和细节信息。
-
这两个目标在本质上是矛盾的。就像一个画家无法同时用一支笔既画出一幅画的宏大意境,又勾勒出每一片树叶的精确脉络。
-
-
特征坍塌:当模型越来越大、训练时间越来越长时(即进行大规模训练时),这种矛盾会变得更加尖锐。模型会倾向于优先优化更容易的全局目标,而“放弃”局部目标。导致的结果就是密集特征坍塌—— 所有像素的特征变得非常相似(比如都变成模糊的“狗”的特征),失去了区分度,无法用于精确定位和几何计算
dinov3给出了gram锚定策略,有效缓解了这种冲突
3)dinov3的贡献
贡献一:数据规模的扩展策略
问题:要训练一个“前沿模型”,需要海量数据,但获取高质量标注数据成本极高。
解决方案:
自动数据整理:利用最新的技术(引用 Vo et al., 2024)从一个巨大的、未经过滤的网络数据池中自动筛选出高质量、有价值的图像。这构成了训练的主体(“background” training dataset)。
精心混合专用数据:将上述海量“背景数据”与少量但质量极高的专用数据(ImageNet-1k) 进行混合。ImageNet-1k 是一个精心标注、类别均衡的数据集。
这种策略结合了“量大管饱”和“精雕细琢”的优点。海量网络数据提供了无与伦比的多样性,让模型“见多识广”;而注入少量高质量数据则像一个“锚点”,有助于稳定和提升模型的最终性能,防止其在杂乱的数据中迷失方向。这是一种非常聪明且实用的数据策略
贡献二:模型架构与训练的规模化
问题:简单地放大模型(如堆更多参数)和延长训练时间并不总能带来性能提升,可能会引入新问题或效率低下。
解决方案:
更大的模型:将主模型扩大到 70亿参数,跻身巨型模型行列。
定制化的ViT架构:没有使用标准ViT,而是做了定制改进,包括:
现代位置编码(Axial RoPE):RoPE(见后续讲解)(旋转位置编码)是LLM(如LLaMA)中的主流技术,Axial版本将其适配到2D图像上,能更好地处理图像不同方向的位置信息, likely 提升了模型对图像几何结构的理解。
正则化技术:防止模型过度依赖图像的绝对位置信息(即避免“位置伪影”,比如总是认为图像顶部的某个 patch 是天空)。
位置伪影讲解:过度依赖绝对位置信息,数据集不充分,单一的位置,导致模型无法学习真正的牛的特征,如四肢,牛头。
简化的训练计划:DINOv2 使用了复杂的、多阶段的余弦学习率计划。DINOv3 反其道而行,采用了恒定超参数计划并训练 100万次迭代。这表明他们的训练流程非常稳定和成熟,不再需要复杂的调度技巧,简化了大规模训练的复杂性。
这部分贡献确保了模型容量和训练流程能够有效地支撑“规模化”这个目标,是让模型变强的基础工程保障。
贡献三:核心算法创新——Gram锚定
问题:如上一段所讲,单纯扩大规模会导致一个致命问题——密集特征退化/坍缩。模型越来越擅长全局语义理解,却越来越忽略局部细节,导致特征图充满噪声。
解决方案:引入了 Gram锚定训练阶段。这是 DINOv3 最核心的算法创新。
Gram矩阵:源于风格迁移领域,能捕捉特征的纹理和风格统计信息,对空间位置不敏感。
锚定:作为一种约束, likely 是要求模型在输出特征时,其Gram矩阵与某个“干净”的参考目标(可能是教师网络的输出)保持一致。
效果:
清洁特征图:极大地清除了特征图中的噪声。
优异的相似性图谱:使得特征图能清晰地反映出图像内容的相似区域。
全面提升密集任务性能:无论是在需要训练一个小头部的参数化任务(如语义分割),还是直接使用特征的非参数化任务(如图像匹配),性能都得到巨大提升。
这项贡献直接解决了规模化自监督学习的核心矛盾,是 DINOv3 既能“高瞻远瞩”(理解语义)又能“明察秋毫”(保留细节)的关键所在。
4)技术细节
1、学习目标
DINOv3 不依赖于单一的学习目标,而是采用了一种混合(Mix) 策略,结合了多个不同的自监督损失函数。这些损失函数有的关注全局图像信息(“这是什么?”),有的关注局部patch信息(“这部分细节是什么?”)。这种设计旨在让模型同时学习高级语义和低级细节,这是它成功的关键。
组成部分1:损失函数
①图像级目标,全局损失(来自于dinov2)
-
核心思想:知识蒸馏。模型同时处理一张图像的两个不同随机视图(例如,全局裁剪和局部裁剪)。
-
教师网络:处理“全局”视图,其权重是学生网络权重的指数移动平均(EMA)。教师提供“目标”。 简单说,它让同一张图像的不同裁剪(“视角”)在特征空间里更接近,而不同图像的特征相互远离。
-
学生网络:处理“局部”视图,努力让自己的输出分布与教师的输出分布相匹配。
-
作用:迫使模型对同一图像的不同增强视图产生一致的、高级的语义理解。这有助于模型学会不变性(例如,无论怎么看,一只猫都是一只猫)并形成良好的全局特征表示。
② 块级潜在重建目标,局部损失(来自于ibot)
-
核心思想:掩码自编码(MAE) 的思想,但在特征空间而非像素空间进行。要求模型能够根据一个块的特征,预测出同一图像中另一个块的 masked 特征。这迫使模型理解图像的局部细节和结构,这对密集预测任务至关重要。
-
过程:随机掩盖图像中的一些块(patches)。学生网络需要根据未被掩盖的上下文,预测被掩盖区域在教师网络特征空间中的特征表示。
-
作用:强制模型理解图像的局部结构和上下文关系。为了成功预测被掩盖部分的特征,模型必须深入地理解各个部分如何组合成一个整体。这极大地提升了模型产生高质量密集特征图(Dense Features) 的能力,对分割、深度估计等任务至关重要。
平衡(Balance):LDINO
和 LiBOT
这两个损失函数通过一个加权系数结合在一起(L_total = α * L_DINO + β * L_iBOT
)。找到正确的平衡点至关重要,以确保模型既不只关注全局而忽略局部,也不只沉迷于局部细节而失去大局观。
算法层面:DINOv3 改用 SwAV 论文中提出的 Sinkhorn-Knopp 算法。
工程细节与经验性收益
1. 专用输出头
模型的主干网络(Backbone)是共享的。但在主干网络之后,为 LDINO
和 LiBOT
这两个不同的损失函数分别接了两个独立的小型神经网络(头)。这允许特征在计算最终损失之前,根据任务的不同(全局vs局部)进行一定程度的“专门化”调整,比只用一个头效果更好。
2. 专用层归一化
这是一个重要的工程技巧。模型发现,对来自不同裁剪尺度(全局视图和局部视图)的主干网络输出,分别应用独立的 LayerNorm 参数进行处理,比共享同一个 LayerNorm 效果更好。这是因为不同尺度的视图所包含的信息分布可能存在差异
在大规模数据集上进行无监督训练
现在ai的共识为数据的数量增多,模型的效果会更好且数据的质量远大于数据的质量。
1)数据采集方法:
step1:原始数据: 从Instagram的公开帖子中收集的海量网络图片。
step2:基于聚类的自动平衡整理 (LVD-1689M)
采用平衡采样与k-means聚类,将图片进行五个层级的聚类,因为种类数量的不同,最终平衡采样样(例如猫狗数量远多于汽车数量)
step3:
这一部分的目的是补充模型在特定下游任务上的性能,确保数据集中包含与这些任务相关的视觉概念。
-
具体步骤:
-
准备种子数据集: 选择一些已有的、标注好的计算机视觉数据集(例如,包含各种复杂场景的数据集、细粒度分类数据集等)作为“种子”。
-
检索相似图片: 使用相似度计算(例如,基于DINOv2特征计算余弦相似度),从170亿的原始图片池中检索出与这些“种子”图片在视觉上相似的图片。
-
-
目的: 主动地让模型在预训练阶段就看到更多与未来要执行的任务(如分类、检测、分割)相关的图片,从而提升其在下游任务上的表现。
step4:融入原始的公开数据集
-
内容: 直接加入公开的经典计算机视觉数据集,如ImageNet-1K、ImageNet-22K 和 Mapillary(街景序列数据集)。
-
目的:
-
性能优化: 这些数据集是学术界的基准,包含高质量、精准标注的图片。加入它们可以明确地提升模型在这些基准任务上的性能。
-
覆盖特定领域: 例如,Mapillary街景数据可以增强模型对街景、道路、车辆、行人等概念的理解。
-
遵循成功经验: 文中提到“following Oquab et al. 2024”,表明这是借鉴了当前SOTA模型(如DINOv3)的成功实践
-
2)预训练阶段的采样策略:
baseline的采样策略:
同质批次(Homogeneous Batches)
做法: 在每一次训练迭代(iteration)中,随机选择某一个数据组件(例如,这次只选LVD数据,下次只选ImageNet数据),然后用这个组件的数据组成一个批次(batch)来训练模型。
优点: 简单。
缺点: 每个批次内的数据分布非常单一,可能不利于模型在同一时间学习不同概念间的关联。
异质批次(Heterogeneous Batches)
做法: 在每一个批次中,都按照预设的比例从所有数据组件中抽取一些数据,混合成一个批次。
优点: 每个批次的数据都很多样化,更接近真实世界的数据流。
缺点: 高质量小数据集(如ImageNet)在每个批次中占比可能很小,模型对其学习不充分。
dinov3的创新采样方法:
核心思路: Charton and Kempe 发现,使用来自小型高质量数据集的同质批次进行训练对模型非常有益。因为一个批次内的数据都非常高质量且相关,能给出非常强烈且一致的信号,帮助模型更有效地学习这些核心模式。
基于这个思路,本文的策略是:
在每一次迭代中,随机选择以下两种方式之一来组建一个训练批次:
选项A(10%的概率): 创建一个 “同质批次”,这个批次的数据全部来自ImageNet-1K 这一个组件。
选项B(90%的概率): 创建一个 “异质批次”,这个批次的数据按照一定比例从所有其他组件(即LVD-1689M、检索集、ImageNet-22K、Mapillary等)中抽取。注意:ImageNet-1K在这个选项中被排除在外。
Gram-anchor策略:
1)Gram策略简介
在大模型训练的任务中,核心问题在于长时间训练导致“块级特征丢失”
现象:随着训练时间的延长,分类任务显著提升,效果明显变好,但是语义分割任务(像素级任务)显著下降。
虽然采用了分层的策略,即libot与dino损失,但是随着时间推移,全局损失会占据主导地位,导致局部一致性(ibot)的退化。
解读: Gram矩阵是一个衡量不同特征之间关系的矩阵。对于一个由P个patch特征组成的矩阵X
(尺寸为P×d),其Gram矩阵 G = X · X⊤
是一个P×P的矩阵。
Gram矩阵的物理意义: 它的每个元素 G_ij
是第i
个patch和第j
个patch特征的余弦相似度(因为特征已L2归一化)。它捕获了一张图像内部所有块与块之间的相似性关系结构。
Gram Teacher: 选择一个在训练早期(例如20万次迭代时)的模型快照,此时它的密集任务性能最好,块级特征一致性高。这个模型作为“锚定点”或“榜样”。后续当训练迭代次数增加时,让学生学习老师的Gram矩阵。
损失函数的定义:
Xg为老师,Xs为学生
Gram损失只约束特征的相对关系,而不约束特征的绝对值,实验中,在100次过后采用Gram策略,并且每一万次进行迭代。更新Gram Teacher,最终损失定义为如下
2)在高分辨率下的更高效的Gram策略
思路为给出更高效的Gram模块供学生学习
LHRef方法:
step1:将图像以双倍分辨率传入到Gram Teacher模型中
step2:对第一步的特征图进行下采样,使用双三次插值得到与学生模型输出一致的特征图。 下采样操作本质上就是一种非常有效的加权平均。它聚合了相邻patch的信息,平滑了噪声和异常值,从而得到了更平滑、更连贯(smoother and more coherent) 的patch级表征。
step3:计算并应用损失:通过下采样的高质量特征来计算Gram矩阵从而让学生模型学习
文中提到,他们的模型可以无缝处理不同分辨率的图像,这得益于采用了RoPE(旋转位置编码)。传统的绝对位置编码在图像分辨率变化时表现不佳。RoPE是一种相对位置编码,其编码方式与序列长度(图像尺寸)无关,因此模型无需任何调整就能处理训练时未见过的分辨率,这是实现本方法的前提。
后训练部分:
1)高分辨率部分
传统视觉模型通常采用固定分辨率进行训练,但是在遥感医学领域高分辨率下包含了众多信息,dinov3在后训练部分通过自适应训练,让高分辨率的信息丢失程度降低。
高分辨率适应步骤:
高分辨率适应步骤通过在训练过程中引入多分辨率训练策略来解决上述问题。这个步骤的核心思想是让模型能够适应不同分辨率的图像,从而提高其泛化能力,尤其是在处理高分辨率图像时。
具体做法:
-
混合分辨率训练:在每个训练批次(mini-batch)中,使用多种不同分辨率的图像进行训练。具体来说,选择:
-
全局裁剪大小:全局裁剪是指对图像进行裁剪,保留图像的主要部分。裁剪的大小选取了 512 和 768 像素两个分辨率。这意味着每个训练批次的图像可能有不同的裁剪尺寸,帮助模型学习如何处理不同的输入分辨率。
-
局部裁剪大小:局部裁剪是指对图像的局部区域进行裁剪,裁剪的大小包括 {112, 168, 224, 336} 像素。局部裁剪帮助模型专注于图像的局部区域,捕捉更细致的空间信息。
-
-
多分辨率训练的意义:
-
通过使用不同的分辨率,模型能够在训练过程中同时处理局部和全局信息,增强其在不同分辨率下的表现。
-
模型不仅学习到低分辨率的特征,还能够适应高分辨率输入带来的更多空间细节。
-
2)模型蒸馏
教师模型的选择
-
ViT-7B 是该研究中的教师模型,具有非常强大的表示能力。论文中提到,在蒸馏过程中,ViT-7B 模型被固定,并且没有使用传统的指数移动平均(EMA)技术来更新教师模型的权重,而是直接使用 ViT-7B 作为教师模型。这意味着,教师模型在蒸馏过程中不发生变化,而是为学生模型提供稳定的学习信号。
学生模型的选择
-
论文中将 ViT-7B 蒸馏成了多个不同尺寸的 Vision Transformer(ViT)模型,涵盖了不同的计算预算。这些学生模型包括:
-
ViT-S (21M 参数):较小的模型,适用于低计算资源环境。
-
ViT-B (86M 参数):标准尺寸模型,性能和效率之间有较好的平衡。
-
ViT-L (0.3B 参数):较大的模型,具有较强的表示能力。
-
自定义 ViT-S+ (29M 参数) 和 ViT-H+ (0.8B 参数):这些是为了填补 ViT-7B 和其他较小模型之间的性能差距而定制的模型。
-
蒸馏策略
-
在蒸馏过程中,目标函数与第一阶段训练中的目标相同,即保持训练信号的一致性。这确保了学生模型的学习过程与教师模型的行为保持一致。
-
Gram Anchoring 的省略:与高分辨率适应步骤中的策略不同,这里没有使用 Gram Anchoring 技术。研究者发现,由于学生模型的规模较小,并且采用的是固定的教师模型,因此不会出现“patch-level”一致性问题。因此,省略了这一步骤,简化了蒸馏过程。
蒸馏的效果
-
通过这种蒸馏方法,学生模型继承了教师模型的强大表示能力,同时更具可管理性和效率,适合实际部署和实验。
-
在 DINOv2 中的实验表明,小模型经过蒸馏后,能够在性能上接近教师模型,并且在计算资源上更加高效,尤其在有限计算预算的场景下,能够获得较好的性能和效率平衡。
3)多学生蒸馏(并行蒸馏)
1. 背景
-
教师模型的推理开销:教师模型(如 ViT-7B)的推理开销通常非常高,远高于学生模型(较小模型)。对于大规模教师模型,推理成本可能会比学生模型的训练成本高出多个数量级。
-
为了提高训练效率并降低计算成本,论文提出了一种**并行蒸馏(parallel distillation)**管道,允许在同一时间训练多个学生模型,同时共享教师模型的推理结果,避免重复计算,从而提升整体训练速度。
2. 并行蒸馏管道设计
基本假设:
-
假设:
-
CT 是教师模型推理单个样本的成本。
-
CS 是学生模型训练单个样本的成本。
-
B 是批次大小。
-
N 是参与训练的 GPU 数量。
-
-
在单教师单学生蒸馏的情况下,假设每个 GPU 处理一个批次中的 B/N 个样本,教师推理的成本为 B/N × CT,学生训练的成本为 B/N × CS。
多学生蒸馏流程:
在多学生蒸馏中,整个蒸馏管道按以下步骤进行:
-
教师推理:首先在全球推理组(global inference group)上进行教师模型的推理。这个推理组包含了所有的 GPU,推理的计算成本为 B/NT × CT(其中 NT 是所有参与推理的 GPU 数量)。
-
数据和推理结果共享:完成推理后,使用all-gather collective operation(一种集体操作,用于将数据在所有 GPU 之间共享)将教师推理的输入数据和推理结果共享给所有计算节点(即所有 GPU)。
-
学生训练:然后,每个学生模型的训练在各自分配的 GPU 上进行。假设每个学生模型 Si 被分配 NSi 个 GPU,那么每个学生的训练成本为 B/NSi × CSi。
并行蒸馏的优势
-
减少每个 GPU 的计算负担:
-
在多学生蒸馏中,由于所有学生共享同一个教师推理结果,因此教师推理的成本是固定的,不会随着学生数量的增加而增加。这意味着,加入额外的学生并不会增加教师推理的成本,反而可以通过并行化来减少每个 GPU 的计算负担,提高整体蒸馏速度。
-
-
只增加学生训练的计算成本:
-
每当一个新的学生加入蒸馏管道时,教师推理的计算成本保持不变,而学生训练的计算成本才是唯一增加的部分。这就意味着,增加一个学生模型会显著降低每个 GPU 的推理计算成本,并且整体计算量只增加新学生模型的训练开销。
-
更多推荐
所有评论(0)