佛山市制作网站,网页界面设计ppt(完美版)百度文库,wordpress 微信 代码,外部网站链接怎么做1 DINOv2
1.1 DINOv2特点
前段时间#xff0c;Meta AI 高调发布了 Segment Anything#xff08;SAM#xff09;#xff0c;SAM 以交互式方式快速生成 Mask#xff0c;并可以对从未训练过的图片进行精准分割#xff0c;可以根据文字提示或使用者点击进而圈出图像中的特定…1 DINOv2
1.1 DINOv2特点
前段时间Meta AI 高调发布了 Segment AnythingSAMSAM 以交互式方式快速生成 Mask并可以对从未训练过的图片进行精准分割可以根据文字提示或使用者点击进而圈出图像中的特定物体其灵活性在图像分割领域内属首创。
但是归根到底 SAM 是一个promptable segmentation system主要应用于各种分割任务对其他的视觉任务e.g. Classification, Retrieval,VQA...的帮助没有那么直接。 于是在继[分割一切]Meta AI 再次发布重量级开源项目——DINOv2DINOv2 可以抽取到强大的图像特征且在下游任务上不需要微调这使得它适合作为许多不同的应用中新的 BackBone。
Meta开源DINOv2视觉大模型无需微调效果惊人在人工智能研究领域Meta再次引发了轰动DINOv2全称为”Dual-Stage Implicit Object-Oriented Network”是一种基于Transformer的视觉模型。它采用了全新的双阶段训练方法有效地将图像分类和对象检测任务结合起来。与以往的视觉模型相比DINOv2具有更高的准确性和更快的推理速度。
无需微调就能达到卓越性能使得DINOv2在易用性和灵活性方面具有巨大优势。在大多数情况下模型一经训练就能直接应用于各种实际场景。这不仅降低了模型的运行成本同时也大大缩短了开发周期。对于那些需要处理海量图像和视频的应用领域比如自动驾驶、智能监控和人脸识别等DINOv2无疑将成为强大的解决方案。
与之前发布的 Segment Anything 相比DINOv2 在应用领域和适用范围上更加广泛文中的实验也涵盖了多个 CV中经典的下游任务。
在 Meta AI 官方的Blog中将 DINOv2 的特性总结如下
DINOv2 是一种训练高性能计算机视觉模型的新方法。DINOv2 提供了强大的性能并且不需要微调。由于是自监督( self-supervision)DINOv2 可以从任何图像集合中学习。同时它还可以学习到当现有方法无法学习的某些特征例如深度估计。
DINOv2 是一种新的高性能计算机视觉模型训练方法使用自监督学习来实现与该领域中使用的标准方法相匹配或超越结果。与其他自监督系统一样使用 DINOv2 方法的模型可以在不需要任何相关元数据的情况下对任何图像集合进行训练。这意味着它可以从它所接收到的所有图像中学习而不仅仅是那些包含特定一组标签或 alt 文本或标题的图像。DINOv2 提供了可直接用作简单线性分类器输入的高性能特征。这种灵活性意味着 DINOv2 可用于创建许多不同计算机视觉任务的多用途骨干。 文中的实验展示了 DINOv2 在下游任务上的出色能力例如分类、分割和图像检索等应用领域。其中最令人惊讶的是在深度估计方面DINOv2 的结果明显优于 in-domain 与 out-of-domain 的 SOTA 的 pipeline。作者认为这种强大的域外表现是自监督特征学习和轻量级任务特定模块例如线性分类器相结合的结果。 最后由于不采用 fine-tuning骨干保持通用同一特征可以同时用于许多不同任务。
论文地址https://arxiv.org/pdf/2304.07193.pdf
代码地址https://github.com/facebookresearch/dinov2
Demo地址https://dinov2.metademolab.com/
1.2 DINOv2创建了一个新的高质量数据集
在如今的大模型时代为了进一步提高性能往往更大的模型需要更多的数据进行训练。由于没有足够大的高质量数据集来满足 DINOv2 的训练需求Meta AI 通过从大量未经整理的数据池中检索与几个经过整理的数据集中的图像相近的图像来组建一个新的数据集。具体流程如下所示 下面我们来具体看一看数据集构建的 pipeline主要有数据源Data sources.去重Deduplication.与自监督图像检索Self-supervised image retrieval.三个部分。
1.2.1 数据源Data sources.
首先LVD-142M 数据集的来源共包含两部分即公开数据集和网络数据集。
公开数据集
如下表所示包含 ImageNet-22k、ImageNet-1k、Google Landmarks 和几个细粒度数据集的训练拆分 网络数据集
网络数据集简单理解就是通过从公开可用的爬取网络数据存储库中收集原始未过滤的图像数据集再对这些数据分三步清洗
首先针对每个感兴趣的网页从标签中提取出图像的 URL 链接其次排除掉具有安全问题或受限于域名的 URL 链接最后对下载的图像进行后处理包括 PCA 哈希去重、NSFW 过滤和模糊可识别的人脸
由此就得到了 1.2 亿张独一无二的图像。 1.2.2 去重Deduplication.
为了进一步减少冗余并增加图像之间的多样性DINOv2 使用了《A self-supervised descriptor for image copy detection》论文提出的 copy detection pipeline 进行图像查重。这个方法基于深度学习计算图像之间的相似度。
论文链接 https://arxiv.org/abs/2202.10261 另外DINOv2 还删除了使用任何基准的测试或验证集中包含的重复图像以确保数据集的纯净度。
1.2.3 自监督图像检索Self-supervised image retrieval.
接下来是自监督图像检索的过程。为了从大量未标注的数据中检索出与经过精心整理的数据集中存在相似度很高的图像首先需要对这些未筛选图像进行聚类以便在检索时能快速找到与查询图像相似的图像。聚类算法会将视觉上非常相似的图像分组到同一组内。
为了顺利进行聚类过程需要先计算每个图像的嵌入Embeddings。DINOv2 使用了在 ImageNet-22k上 进行预训练过的 ViT-H/16 自监督神经网络来计算每个图像的嵌入。
计算出每个图像的嵌入向量后DINOv2 采用了 k-means 聚类算法将嵌入向量相似的图像放到同一聚类中。接下来给定一个查询图像DINOv2 从与查询图像所在的聚类中检索 N通常为 4个最相似的图像。如果查询图像所在的聚类太小DINOv2 会从聚类中抽样 M 张图像M 是由视觉检查结果后决定的。最后将这些相似的图像和查询图像一起用于预训练以获得一个更优质、精心筛选过的大规模预训练数据集。LVD-142M
通过上述流程Meta AI 从 12亿 张图片中得到了经过整理的 1.42 亿张图像命名为 LVD-142M 数据集。这一过程中通过采用自监督图像检索技术大大提高了数据集的质量和多样性为后面 DINOv2 的训练提供了更加丰富的数据资源。 1.3 训练方法与技术的改进
1.3.1 训练方法Discriminative Self-supervised Pre-training
DINOv2 采用了一种区分性自监督方法Discriminative Self-supervised Pre-training来学习特征这种方法可以看作是 DINO 和 iBOT 损失以及 SwAV 中心化的组合。
简单来说DINOv2 使用了两种目标函数来训练网络。第一种是 Image-level 的目标函数其使用 ViT 的 cls token 的特征通过比较从同一图像的不同部分得到的学生网络和教师网络的 cls token 输出来计算交叉熵损失。第二种是 Patch-level 的目标函数它通过随机屏蔽学生网络输入的一些 patch不是教师网络并对每个被屏蔽的 patch 的特征进行交叉熵损失的计算。这两种目标函数的权重需要单独调整以便在不同尺度上获得更好的性能。
同时为了更好地训练网络作者还采用了一些技巧。例如解除两个目标函数之间的权重绑定以解决模型在不同尺度下的欠拟合和过拟合问题。此外作者使用了 Sinkhorn-Knopp centering 来规范化数据并使用 KoLeo regularizer 鼓励批次内特征的均匀分布。最后为了提高像素级下游任务如分割或检测的准确性作者采用了逐步增加图像分辨率的技术进一步提高了模型的表现。
具体而言作者们实现了以下几种方法
Image-level objective利用一种交叉熵损失函数来比较从学生和教师网络中提取出的特征。这些特征都来自于ViT的cls token通过对同一图像的不同裁剪图像进行提取得到。作者们使用指数移动平均法EMA来构建教师模型学生模型的参数则通过训练得到。Patch-level objective随机遮盖一些输入patch然后对学生网络和教师网络在遮盖的 patch上的特征进行交叉熵损失函数的比较。这种损失函数与图像级别的损失函数相结合。Untying head weights between both objectives作者们发现将两种目标的权重绑定在一起会导致模型在 Patch-level 欠拟合在 Image-level 过拟合。分离这些权重可以解决这个问题并提高两种尺度上的性能。Sinkhorn-Knopp centering: 这个方法是对 DINO 和 iBOT 两种方法中的一些步骤进行改进具体可见这篇论文 Unsupervised Learning of Visual Features by Contrasting Cluster Assignments (arxiv.org)KoLeo regularizerKoLeo regularizer 是一种正则化方法它通过计算特征向量之间的差异来确保它们在批次内均匀分布其源自于 Kozachenko-Leonenko 微分熵估计器并鼓励批次内特征的均匀跨度。具体见 Spreading vectors for similarity search (arxiv.org)Adapting the resolution这一步主要是涉及在预训练的最后一段时间内将图像的分辨率提高到 518×518 便在下游任务中更好地处理像素级别的信息例如分割或检测任务。高分辨率的图像通常需要更多的计算资源和存储空间因此只在预训练的最后阶段使用这种方法以减少时间和资源成本。
1.3.2 训练技术的工程改进
同时DINOv2 也利用了一系列的工程化改进以便在更大的范围内训练模型。通过利用最新的 Pytorch 2.0 的数据并行、分布式训练、混合精度训练与 variable-length memory-efficient attention 等技术在同等硬件的情况下新的代码运行速度大约是之前的两倍而内存使用量只有原来的三分之一这可以帮助 DINOv2 在数据、模型大小和硬件方面进行更加高效的扩展。
1.3.3 蒸馏得到好的轻量模型
我们也要注意到大模型虽好但其硬件和算力的要求太高我们总是希望着出现门槛没那么高的 Strong, lightweight models 的出现。
因此Meta AI 通过模型蒸馏的方法将大模型的知识压缩到较小的模型中使后续跟进的研究者只需付出最小的准确性代价就能大大降低推理成本。同时得到的 ViT-Small、ViT-Base 和 ViT-Large 模型也在下游任务上展现出不错的泛化性能具体可见后面的实验结果。
1.4 预训练模型的评估结果
首先是必须要有的 ImageNet-1k 上的结果可以看到 DINOv2 在 linear evaluation 上比以前的 SOTA在 ImageNet-22k 上训练的 iBOT ViT-L/16有非常明显的改进4.2%。 其次是图像和视频分类与细粒度分类的结果 作为经典的 Downsteam task分割必不可少 还有不太常见的单目深度估计的结果 1.5 发布了一系列高性能的预训练模型
在这里Meta AI 也向社区发布了一系列 DINOv2 预训练模型。DINOv2 作为特征提取器可以开箱即用无需微调就能在多个下游任务上取得相当好的结果在 ImageNet-1k 上linear evaluation 比 Fine-tuning 只有 2% 内的差距如下图所示 1.6 效果展示
1.6.1 深度估计Depth Estimation
一般很少有预训练模型展示自己在深度估计方面的能力这也说明了 DINOv2 模型表现出强大的分布外泛化能力strong out-of-distribution performance。 这里特意选取了一直非自然光照条件下的夜景作为测试得到的结果还是非常惊艳的 1.6.2 语义分割Semantic Segmentation
DINOv2 的冻结特征frozen features可以很容易地用于语义分割任务。 这里就是简单的语义分割没有 SAM 在分割任务上的可玩性那么强。
1.6.3 实例检索Instance Retrieval
这是我认为很有意思的一个Demo它是从大量的艺术图片集合中找到与给定图片相似的艺术作品。这里上传了一张黄鹤楼的图片作为 Query 这是 Dinov2 给出的结果感觉在语义上还是十分接近的都有一个高耸的塔或楼 1.6.4 其他效果展示与比较 2 使用DINOv2实现图像的特征提取
DINOv2四种size的模型 small: dinov2_vits14,base: dinov2_vitb14,large: dinov2_vitl14,largest: dinov2_vitg14,
原始图片 import torch
import torchvision.transforms as T
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.image as mpimg
from PIL import Image
from sklearn.decomposition import PCA
import matplotlibpatch_h 28
patch_w 28
feat_dim 384 # vits14transform T.Compose([T.GaussianBlur(9, sigma(0.1, 2.0)),T.Resize((patch_h * 14, patch_w * 14)),T.CenterCrop((patch_h * 14, patch_w * 14)),T.ToTensor(),T.Normalize(mean(0.485, 0.456, 0.406), std(0.229, 0.224, 0.225)),
])dinov2_vits14 torch.hub.load(facebookresearch/dinov2, dinov2_vits14, sourcegithub)features torch.zeros(4, patch_h * patch_w, feat_dim)
imgs_tensor torch.zeros(4, 3, patch_h * 14, patch_w * 14)img_path f../data/cat_dog.jpg
img Image.open(img_path).convert(RGB)
imgs_tensor[0] transform(img)[:3]
with torch.no_grad():features_dict dinov2_vits14.forward_features(imgs_tensor)features features_dict[x_norm_patchtokens]features features.reshape(4 * patch_h * patch_w, feat_dim).cpu()
pca PCA(n_components3)
pca.fit(features)
pca_features pca.transform(features)
pca_features[:, 0] (pca_features[:, 0] - pca_features[:, 0].min()) / (pca_features[:, 0].max() - pca_features[:, 0].min())pca_features_fg pca_features[:, 0] 0.3
pca_features_bg ~pca_features_fgb np.where(pca_features_bg)## 前景
pca.fit(features[pca_features_fg])
pca_features_rem pca.transform(features[pca_features_fg])
for i in range(3):pca_features_rem[:, i] (pca_features_rem[:, i] - pca_features_rem[:, i].min()) / (pca_features_rem[:, i].max() - pca_features_rem[:, i].min())# 使用平均值和标准差进行变换个人发现这种变换可以提供更好的可视化效果# pca_features_rem[:, i] (pca_features_rem[:, i] - pca_features_rem[:, i].mean()) / (pca_features_rem[:, i].std() ** 2) 0.5pca_features_rgb pca_features.copy()
pca_features_rgb[pca_features_fg] pca_features_rem
pca_features_rgb[b] 0
pca_features_rgb pca_features_rgb.reshape(4, patch_h, patch_w, 3)
plt.imshow(pca_features_rgb[0][..., ::-1])
plt.savefig(features_s14.png)
plt.show()
plt.close()
运行结果显示 可以尝试不同的size模型模型越大效果越好。
3 总结
DINOv2的开源无疑将进一步推动人工智能领域的发展。借助这个工具科研人员可以更深入地研究图像和视频的理解机理开发出更为先进的AI应用。同时广大开发者和企业也将从这项技术中获益加速各类智能化应用的落地。
DINOv2 作为一种无需 fine-tuning 的自监督方法在提取图像特征方面表现出色适用于许多不同的视觉任务。它的开源也为广大研究者和工程师提供了一种新的选择有望为计算机视觉领域带来更多的突破可以期待更多基于 DINOv2 的研究工作出现。
值得注意的是DINOv2虽然在图像分类和对象检测方面取得了显著成果但还存在一些局限性。例如它对计算资源的消耗相对较大可能需要高配置的硬件设施才能实现最佳性能。此外对于某些复杂的应用场景可能仍需要进行一定的微调。
尽管如此DINOv2仍然为人工智能领域带来了巨大的进步。它的双阶段训练方法为解决视觉任务提供了新的思路其无需微调的特点也将大大降低开发成本。随着研究的深入我们有理由相信DINOv2在未来将不断得到优化和改进为各类智能化应用提供更强大、更灵活的支持。
总之Meta开源DINOv2视觉大模型是一项重磅举措。这不仅为全球AI研究者和开发人员提供了新的强大工具还有望推动人工智能领域的进一步发展。我们期待着DINOv2在未来的更多应用和突破为人类社会带来更多惊喜和可能性。