DINO 自监督算法简介

news/2024/11/20 1:39:41/

Emerging Properties in Self-Supervised Vision Transformers

[Ref: https://arxiv.org/abs/2104.14294]

DINO 的初衷是质疑自监督学习相较于 CNN 是否为 Transformer(ViT) 提供了新的属性,但是在过程中,发现:

  • 自监督 ViT 的特征在图像的语义分割中包含的显式信息,这是之前监督学习下无论 ViT 还是 CNN 都没有出现的情况。
  • 这个架构用一个很小的 ViT 提取出来的特征用 k-NN 来对 ImageNet 图像数据集进行分类可以达到 78.3% top-1

论文将这个自监督结构命名为 DINO 🦖 ,这种**没有引入标签的“自蒸馏”**形式在结合各种 ViTs 以后可以达到 80.1% top-1.

下面的这幅 GIF 很简洁地表示了 DINO 的结构:Alt

DINO 的结构

在这里插入图片描述

其中 Student 模型和 Teacher 模型是完全一样的

在训练中,Teacher 模型是没有训练的,它的权重更新是通过对 Student 模型权重的 EMA(exponential moving average )
来更新 Teacher 模型的。下面的图是 EMA 的举例,可以感受一下。

还有值得注意的是两个模型的输入是完全独立的数据增强

具体的表示可以参考 [Ref: https://en.wikipedia.org/wiki/Moving_average]

在这里插入图片描述

Pseudocode

在这里插入图片描述

下载源码

下面就是代码层面的一些展示了。

!git clone https://github.com/facebookresearch/dino.git /home/featurize/dino

目录准备以及下载图片样例

!mkdir /home/featurize/dino/input
!mkdir /home/featurize/dino/output
!wget https://www.snowskool.com/uploads/images/ski_and_snowboard_snowsport12.jpg -O /home/featurize/dino/input/ski.jpgimport matplotlib.pyplot as plt
import cv2plt.axis('off')
plt.imshow(cv2.cvtColor(cv2.imread('/home/featurize/dino/input/ski.jpg'), cv2.COLOR_BGR2RGB));

在这里插入图片描述

对图片进行推理

!python /home/featurize/dino/visualize_attention.py  \
--image_path /home/featurize/dino/input/ski.jpg  \
--output_dir /home/featurize/dino/outputf, axs = plt.subplots(2,3, figsize=(12,8))
for i, ax in enumerate(axs.reshape(-1)):ax.axis('off')ax.imshow(cv2.cvtColor(cv2.imread(f'/home/featurize/dino/output/attn-head{i}.png'), cv2.COLOR_BGR2RGB));

在这里插入图片描述

下面试一下视频

下载测试视频

!unset http_proxy;unset https_proxy;unset all_proxy
!wget https://featurize.oss-cn-chengdu.aliyuncs.com/input.mp4 -O /home/featurize/dino/input/input.mp4

Jupyter里可视化一下

from IPython.display import Video
Video('/home/featurize/dino/input/input.mp4', embed=True, width=800, height=600)

在这里插入图片描述

DINO 进行推理

!python /home/featurize/dino/video_generation.py  \
--pretrained_weights dino_deitsmall8_pretrain.pth  \
--input_path /home/featurize/dino/input/input.mp4  \
--output_path /home/featurize/dino/output \
--video_format mp4 \
--fps 25

这是 Dave 之前推理的视频

在这里插入图片描述

drawing

Dave 觉得自监督学习在并未输入人类的理解信息的情况下,模型能够给出语义级别的解释并且能够超过监督学习,这就十分符合我对智能体的期望。

原文链接
点击👆原文链接可以运行代码
在这里插入图片描述

image


http://www.ppmy.cn/news/894669.html

相关文章

论文导读:DINO -自监督视觉Transformers

在本篇文章中我们将探讨DINO 论文的工作原理以及分析它是如何工作的。 我试图让文章保持简单,这样即使是先验知识很少的读者也能够看懂。 一般来说ViT 并不像某些人预期的那样有吸引力:因为它们需要很多的计算资源,并且需要更多的训练数据&a…

DINO 论文精度,并解析其模型结构 DETR 的变体

截止2022年7月25日,DINO是目标检测的SOTA。 本人根据源码的复现感受和DINO论文的精读心得,撰写本篇博客,希望对你有所帮助。 目录 一、摘要 二、结论 三、解析DINO模型 (1)概述DINO模型借鉴了前人的那些工作 &…

威盛实习生招聘要求

要求: (1) 熟悉ARM架构 (2) 熟悉各外设接口(I2C,UART,SPI,CAN等) (3) 熟练掌握C语言 (4) 对底层硬件驱动编写有一定经验,应用过MCU,DSP等 (5) 有较强的动手能力及创新能力 (6)…

威盛电子- via ASIC 笔试题

威盛电子- via ASIC 笔试题 2007-05-22 1 、用给出的一些门电路,搭出表达式outputen_try? en&nomask : en这一表达式 entry,en,nomask是输入 2、给出电路,将时钟域1的脉冲传到时钟域2,两个时钟域的关系未知 3、给出三分频…

(简单)剑指Offer 21. 调整数组顺序使奇数位于偶数前面 Java

记数组nums的长度为n。从先nums左侧开始遍历,如果遇到的是奇数,就表示这个元素已经调整完成,继续从左往右遍历,直到遇到一个偶数。然后从nums右侧开始遍历,如果遇到的是偶数,就表示这个元素已经调整完成了&…

威盛在线更换IO通道---步骤

在线更换IO通道---步骤 1.运行“IO配置”软件(开始→程序→ControlX 软件包→FB3000MCS 控制策略→IO配置); 2.打开该工程目录下的IO组态配置文件(*.ioc){如C:\XXX工程\IO配置}; 3.选中需要更换IO通道的过程控制站名…

在威盛学习计划

写道 每天都要学习,现有知识储备太少.每天必须工作9个小时 1. 英语学习 1个小时[个人必备技能] 2. js CSS 学习 1个小时[web开发技能] 3. PHP MYSQL 项目实现 5个小时以上 [web应用开发] 4. javame 学习 1个小时 [移动应用开发] 5. C# 学习 1个小时 [桌面应用开发,非web方面…

2017.11-上海威盛电子有限公司面试

日期:2017.11.27号 地点:上海浦东新区张江高科技园区金科路2537号B栋 中国芯科技园 岗位:嵌入式开发 笔试: 时间:9:00 题目记得的如下: 1、考察C语言的知识,指针,数组&#xf…