成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

使用 DINOv2 做可視化對比學習與圖像分類

開發
本文我們將了解如何將預訓練的 DINOv2 編碼器用于圖像分類。為此,訓練一個線性分類器來預測 ImageNet 1K 中的任何類別。

DINOv2 是由 M. Oquab 等人于 2023 年提出的一種利用視覺特征進行自監督學習的可擴展方法。Meta 團隊借鑒了文本數據整理流程(Wenzek 等人,2019 年)的思路,將未整理的圖像嵌入聚類到一個有標簽的源數據上。最終得到的模型是一個視覺變換器(ViT),可作為視覺任務的多功能編碼器。

數據整理與對比學習

無標簽自蒸餾(DINO)最初由 Caron 等人于 2021 年提出,用于通過在線蒸餾進行對比學習。DINO 在 ImageNet 上進行預訓練,采用交叉熵損失,將其構建為相同的教師模型和學生模型之間的知識蒸餾。DINO 使用自監督學習,在訓練過程中,每個模型接收輸入圖像的不同隨機增強版本。Zhou 等人于 2022 年通過隨機屏蔽提供給學生模型而非教師模型的輸入圖像塊,利用圖像塊級別的 iBOT 損失擴展了對比學習。

DINOv2 在 Meta 內部的自定義數據集上結合 DINO 和 iBOT 損失進行訓練。簡而言之,LVD - 142M 數據集從 ImageNet、谷歌地標數據和其他來源收集而來,同時從互聯網上收集未經過濾的圖像,最終總共得到 12 億張圖像。通過在 ImageNet 上預訓練的 ViT 生成嵌入,然后進行相似圖像檢索。通過這種方式,每個有標簽的圖像都用于從未整理的數據集中檢索額外的圖像。

DINOv2 的發布版本包括基礎架構,即一個擁有 11 億參數的 ViT - g/14 模型,以及幾個通過知識蒸餾訓練的較小模型。還包含在凍結的 DINOv2 模型之上訓練的線性分類器,用于圖像分類、分割和深度估計任務。更多詳細信息和模型基準測試可在 DINOv2 的 GitHub 頁面上找到。

可視化對比學習

首先,讓我們使用主成分分析(PCA)來可視化 DINOv2 的圖像塊級編碼。PCA 是一種降維方法,它能將重要信息提取到一組更小的特征中。我們將通過 PCA 展示一組相關圖像的編碼之間的關系,以此探究 DINOv2 學到了什么。

為了清晰可視化,建議選擇前景和背景有明顯區分的圖像。將這些圖像調整大小并進行中心裁剪至 560x560(14 的倍數)。然后將張量格式的圖像用于評估。我使用的是蒸餾模型 ViT - L/14 和 Google Colaboratory 提供的 L4 GPU。

import torch
from PIL import Image
from torchvision.transforms import v2


transform = v2.Compose([
              v2.Resize(560, interpolation=v2.InterpolationMode.BICUBIC),
              v2.CenterCrop(560),
              v2.ToTensor(),
              v2.Normalize(mean=(0.485, 0.456, 0.406), std=(0.229, 0.224, 0.225)),])


batch_size = len(file_list)
imgs_tensor = torch.zeros(batch_size, 3, 560, 560)


for i in range(batch_size):
    img = Image.open(file_list[i])
    imgs_tensor[i] = transform(img)


#load large DinoV2 model
dino = torch.hub.load('facebookresearch/dinov2', 'dinov2_vitl14')
dino.cuda()


#inference
with torch.no_grad():
  features_dict = dino.forward_features(imgs_tensor.cuda())
  features = features_dict['x_norm_patchtokens']

PCA 進行兩次操作;第一次是分離前景和背景,第二次是為前景中的主體著色。首先進行單成分的第一次 PCA,然后選擇一個閾值。接著,將背景置為零,對前景進行三成分的第二次 PCA。

import sklearn
from sklearn.decomposition import PCA
from sklearn.preprocessing import MinMaxScaler


features = features.cpu()
pca = PCA(n_components=1)
scaler = MinMaxScaler()
pca.fit(features)
pca_features = pca.transform(features)
norm_features = scaler.fit_transform(pca_features)


#threshold background
threshold = 0.5 #adjust the threshold based on your images
background = norm_features > threshold


#set background of features to zero
bg_features = features.clone() #make a copy of features
for i in range(bg_features.shape[-1]):
  bg_features[:,i][background[:,0]] = 0


#fit 3 components
pca3 = PCA(n_components=3)
pca3.fit(bg_features)
features_foreground = pca3.transform(bg_features)
norm_features_foreground = scaler.fit_transform(features_foreground)

以下是從維基媒體圖像庫收集的幾張狗的圖片。所有結果如下所示:

經過調整大小和中心裁剪后的四張來自維基媒體的狗的圖片

展示了one component 第一次 PCA 的結果

展示了 three component 且背景置零的第二次 PCA 的結果

DINOv2 通過對扭曲或屏蔽的單個圖像進行對比學習,學習到重要的圖像特征。這些結果直觀地展示了 DINOv2 如何用作圖像編碼器。例如,識別狗以及如雪或草地等背景地形,接著識別狗的臉部、腿部和尾巴的細節。完整代碼已分享在我的 GitHub 頁面上。

分類

接下來,我們將了解如何將預訓練的 DINOv2 編碼器用于圖像分類。為此,訓練一個線性分類器來預測 ImageNet 1K 中的任何類別。我們將使用 Hugging Face Transformers 庫來加載模型并預處理上述狗的圖像。

from PIL import Image
import torch
from transformers import AutoImageProcessor, AutoModelForImageClassification


processor = AutoImageProcessor.from_pretrained('facebook/dinov2-large-imagenet1k-1-layer')
model = AutoModelForImageClassification.from_pretrained('facebook/dinov2-large-imagenet1k-1-layer')


img = Image.open(file_list[i])
inputs = processor(images=img, return_tensors="pt")
outputs = model(**inputs)
logits = outputs.logits
value = torch.topk(logits, 3)
dog_label = []
for item in value[1].squeeze().numpy():
    dog_label.append(model.config.id2label[item])


print("Top three predicted labels, ", dog_label)

根據維基媒體頁面,我為上述每只狗找到了以下標簽或說明:

  • 家犬(Canis lupus familiaris)
  • 豺(亞洲野犬)
  • 雄性博洛尼亞犬
  • 哈士奇雪橇犬

配備線性類器的 DINOv2 按順序為每張圖像預測了以下前三個標簽。三個預測結果用單引號分隔。

  • [' 剛毛獵狐梗 ', ' 西藏梗犬,菊花犬 ', ' 丹迪丁蒙梗犬 ']
  • [' 豺,亞洲豺犬 ', ' 紅狼,鬃狼,北美紅狼,黑狼 ', ' 澳洲野犬,袋狼,澳洲犬 ']
  • [' 玩具貴賓犬 ', ' 迷你貴賓犬 ', ' 馬爾濟斯犬,馬爾濟斯梗犬,馬爾濟斯 ']
  • [' 狗拉雪橇 ', ' 愛斯基摩犬,哈士奇 ', ' 西伯利亞哈士奇 ']

配備線性分類器的 DINOv2 準確地預測出了豺和哈士奇。對于其他狗的圖片,雖然預測結果并非完全匹配,但找到了外觀相似的狗的類別標簽。我們可以得出結論,基于視覺相似度,DINOv2 在預測圖像類別標簽方面表現良好。

完整代碼:https://github.com/eriktaylor/Transformer-introduction?source=post_page-----9e6d8f87acf6

責任編輯:趙寧寧 來源: 小白玩轉Python
相關推薦

2023-11-21 16:06:04

計算機視覺人工智能

2018-03-13 15:01:12

神經網絡卷積網絡圖像

2020-03-11 14:39:26

數據可視化地圖可視化地理信息

2025-02-18 16:00:00

代碼Python架構

2015-08-20 10:00:45

可視化

2017-09-11 13:33:44

大數據數據可視化決策樹

2023-04-25 17:06:38

視覺任務

2014-05-28 15:23:55

Rave

2017-10-14 13:54:26

數據可視化數據信息可視化

2020-05-08 13:44:26

Spark架構RDD

2009-04-21 14:26:41

可視化監控IT管理摩卡

2022-08-26 09:15:58

Python可視化plotly

2017-02-07 15:54:14

數據可視化數據分析

2023-03-27 23:42:29

樹狀圖開發可視化

2024-12-24 07:30:00

Seaborn可視化Python

2021-04-09 10:42:03

數據可視化框架大數據

2021-04-28 08:38:37

Jenkins Dashboard可視化部署

2024-12-24 12:00:00

Matplotlib可視化分析Python

2024-04-01 11:53:42

PlotlyPython數據可視化

2017-08-10 11:30:23

可視化TensorFlowPython
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产一区2区 | 日韩精品久久久久 | 国产wwwcom| 久久精品久久精品 | 国产小视频在线看 | 欧美区日韩区 | 91精品久久久久久久久久入口 | 国产精品一区在线 | 久草在线在线精品观看 | av在线成人 | 精品欧美黑人一区二区三区 | 毛片区 | 精品国产乱码久久久久久丨区2区 | 精精国产视频 | 成人综合视频在线观看 | 一区二区av | 国产日韩欧美中文 | 免费一级大片 | 91麻豆精品国产91久久久资源速度 | 成人在线精品 | 亚洲91av| 一区二区三区免费看 | 日日综合 | 中文字幕一区二区三区四区 | 精品久久久久久国产 | 久久久久久久久久性 | 欧美日韩高清免费 | 男女网站免费 | 在线不卡一区 | 久久久久久国产精品三区 | 伊人精品视频 | 亚洲精品黑人 | 欧美www在线 | 一级黄色片一级黄色片 | 国产激情视频 | a成人| 狠狠操av| 韩日精品在线观看 | 久久久久久久久久毛片 | 成人免费一区二区三区视频网站 | 国产精品综合色区在线观看 |