DINOv2 用于自定义数据集分割:一份全面的教程

DINOv2自定义数据集分割:一份全面教程

YOLOv8 和 SAM (Segment Anything Model) 之后,最受期待的计算机视觉模型是 DINOv2。我从这个 GitHub 仓库得到了这个教程的灵感:https://github.com/NielsRogge/Transformers-Tutorials/tree/master,在运行代码时,由于这个,我发现了 2 个错误,训练模型时遇到了一些烦人的错误(在他的教程中,他在一些步骤和训练的最后一步骤之间停止了训练,并且在其中出现了错误)。整个代码都是从他的笔记本中拿来的(除了一些更改 🙂 ),下面是攻击的计划:

攻击计划

  1. DINOv2 简介
  2. 库安装
  3. 加载数据集
  4. 创建 PyTorch 数据集
  5. 创建 PyTorch 数据加载器
  6. 定义模型
  7. 训练模型

DINOv2 简介

DINOv2 是一个完全自我监督训练的视觉 transformer,使用一个精心策划的包含 1.42 亿个图像的数据集进行训练。它提供了最佳的图像特征或嵌入,可用于图像分类、图像分割和深度估计等下游任务。

图1:该教程中的模型完全可用(模型只训练一个 epoch 时的输出图像)(作者提供的图像)

图1 描述了这种方法,本教程中,我只是在一个冻结的 DINOv2 骨干网络之上训练一个线性变换(1*1 的 CNN 层)。这个变换将把特征(patch embeddings)映射到 logits(神经网络输出的未归一化分数,表示模型的预测)。在语义分割的上下文中,logits 的形状将是 (batch_size, num_classes, height, width),对应于每个像素的预测类别。

库安装

下面是两个主要的库:

!pip install -q git+https://github.com/huggingface/transformers.git datasets!pip install -q evaluate

加载数据集

接下来,让我们加载一个图像分割数据集。在这个例子中,我们将使用 Foodseg 数据集。

from datasets import load_dataset#datasetdataset = load_dataset("EduardoPacheco/FoodSeg103")#lables…