自监督学习系列(四):基于蒸馏的图片掩码学习

news2024/11/25 6:32:06

前文

好久不见!自监督系列文章继续更新啦!在前几期的文章我们介绍了基于辅助任务,对比学习,和图片掩码学习的自监督学习范式

(对比学习,图片掩码学习其实也可以归属于基于辅助任务的自监督学习,由于这两类是目前最流行的研究方向,所以我们在此进行这样的区分)。

有感兴趣的读者可以查看前几期的文章:

https://zhuanlan.zhihu.com/p/470914640

https://zhuanlan.zhihu.com/p/474847821

https://zhuanlan.zhihu.com/p/475952825

由于 BEiT 和 MAE 的推出,目前自监督预训练领域的发展仍然是:改进现有的图片掩码学习模型。从前一期的文章可以知道,很多掩码学习的工作都以纯 RGB 像素值作为预测的目标,这些方法的具体操作步骤为:

  1. 将一张图片划分为多个 patch;
  1. 随机覆盖掉其中的一部分 patch, 并将剩余的 patch 送入网络;
  1. 用网络预测的被覆盖掉的 patch 去拟合这些 patch 的真实的像素值。

这些方法以 MAE 为代表,这样做的好处是整个模型的结构简单,计算量小。但是纯 RGB 像素作为预测目标也有两个明显的劣势:

  1. 纯像素值是 low-level 的特征,模型往往需要预训练更长的迭代次数才能够达到一个不错的效果;
  1. 模型容易通过训练一些捷径,例如像素插值,来完成这样一个重建的任务,所以采用纯 RGB 像素作为预测目标的模型往往需要一个非常大的 mask ratio,例如,MAE 采用了 0.75,SimMIM 采用了 0.6。

目前大多数方法主要是针对下面两个方面进行优化:

  1. 重建目标,将 RGB 像素替换为具有丰富语义信息的模型输出的特征,例如,CLIP 输出特征;
  1. 引入额外的任务,例如,CMAE 除了重建任务以外,引入了一个对比学习的任务。

今天这篇文章就主要围绕重建目标介绍几篇典型的文章:MILAN、BEiT-v2、MASKDISTILL。下表展示了这几个算法的概要。

MethodBackboneDecoderTargetlinftseg
MILANViT-BPrompt-decoderCLIP78.985.452.7
MASKDISTILLViT-BFCCLIP-85.554.3
BEiT-v2ViT-BFCVQ-KD80.185.052.7

MASKDISTILL

TL;DR: 图片掩码学习的统一范式

MASKDISTILL 站在一个更高角度审视现有的图片掩码模型算法,将其抽象为下图的结构,简而言之就是,一张图片经过 mask 送入一个 encoder,这些 encoder 的选择多种多样,例如 ViT 和 Swin;然后将 encoder 输出的特征送入一个 head,这个 head 可能是一个线性层,也有可能是一个具有多层的 decoder。

图 1

而对于 target 特征,也存在多种选择,例如纯像素、CLIP 之类的,然后 target 经过一个 normalization 层,最终输出,并完成和预测特征的匹配。

基于这个统一的框架,MASKDISTILL 使用 CLIP 作为 target,以及使用 smooth-l1 loss,在没有其他额外技术的加持下,也可以取得不错的效果。下表展现了 MASKDISTILL 与目前大多数主流自监督学习方法的一个比较:

MILAN

划重点:CLIP target, Prompting Decoder, Semantic Aware Sampling

另外 MMSelfSup 现已支持 MILAN,欢迎体验

https://github.com/open-mmlab/mmselfsup/tree/dev-1.x/configs/selfsup/milan

从下图可以看出 MILAN 具有三个重要部分:

  • CLIP target
  • Prompting Decoder
  • Semantic Aware Sampling

图 2

CLIP target

CLIP 为 OpenAI 推出的多模态大规模预训练模型。其通过在大量的图文对上进行大规模的对比学习,使得 image encoder 分支具有捕捉图片高维语义的能力,其训练范式如下图所示:

图 3

使用 CLIP 特征作为预测 target 可以极大地提升模型的性能,从下表第 1 和第 2 组消融实验可以看出。同时,相较于其他的 target,例如 SLIP,CLIP 具有明显的优势,这一点从下表的第 8 组和第 9 组实验可以看出。

其实,相较于这些模型,之前的模型例如 BEiT 也采用了预训练模型(DALLE)输出的特征作为预测的,但是由于这些预训练模型本身性能的问题,使得最终模型的性能也是不尽人意。

Prompt Decoder

相较于 MAE 采用的使用自注意力机制作为 decoder 的基础模块,MILAN 采用的是一种类似于 CAE 所使用的 cross attention 机制。

这种机制最主要的特征是在解码阶段只会去更新 mask token 的特征,而保持 encoder 输出的可见 token 的特征不变。

这样做的一个明显的好处就是可以降低解码阶段的计算量。同时在与 CLIP target 配合使用的时候,可以进一步提升模型的精度。

Semantic Aware Sampling

目前大多数图片掩码学习的算法都是使用的随机掩码策略,这种策略虽然简单,但是对需要 mask 的区域进行无差别的对待,可能使得很多具有更多语义信息的地方被 mask 掉(如,前景物体)。

所以 MILAN 采用了一个 semantic aware 的 mask 策略。具体而言就是,通过 CLIP 输出的特征,计算各个地方被 mask 的概率,依赖这种概率去 mask 图片,使得具有丰富语义信息的地方得以保留。

由于 CLIP 的特征具有提取图片语义的能力,所以这种策略是合理的。通过上表的第 4 组实验也可以看出,这种策略也是有效的。

BEiT-v2

TL;DR: VQ-KD 训练, Class Token Pretraining

MMSelfSup 现已支持 BEiT( https://github.com/open-mmlab/mmselfsup/tree/dev-1.x/configs/selfsup/beit ), 同时 BEiT-v2 也在加速支持中

BEiT-v2 是 BEiT 的拓展,两者主要的差距在于以下两点:

  1. BEiT-v2 使用 CLIP 作为 teacher,自己设计了一套范式蒸馏得到了一个具有更好性能的目标提取器;
  1. 为了使得 class token 具有整张图的全局表达能力,将 encoder 最后一层的 cls token 连同其中某一层的特征一起送入了一个比较轻量的 decoder,从而引入另外一个重建损失。

VQ-KD

VQ-KD 的训练方式如下图所示,对于每一张图片,encoder 吐出的特征去一个预先定义好的 Codebook 寻找一个离当前特征最近的一个特征,然后将这个找到的特征喂入后面的 decoder 重建 CLIP 输出的特征。当训练结束之后,只有图中的 tokenizer encoder 被用于后面预训练中的目标特征提取。

图 4

Class Token Pretraining

如图 5 的右侧所示,Class Token Pretraining 的具体做法是将 encoder 最后一层的 class token 连接到encoder 的其中某一层输出的 token,这新组成的一组输入喂入额外的一个 encoder 中进行解码,最终完成整张图特征的重建。这样做的目的是为了改善 class token 的全局特征表达能力。

图 5

这样做,本人认为基于的一个假设应该是:只有最后一层的 class token 具有良好的全局表达能力,其才可能在解码阶段将图片的全局语义传递给其他 token,从而完成整张图的重建。通过下表的消融实验也可以发现,class token pretraining 可以极大地改善模型的 linear probing 精度。

总结

今天我们讲了目前几种基于 CLIP 的图片掩码学习算法,总结一下,采用 CLIP 的特征作为目标特征,由于这种特征包含丰富的语义信息,相较于使用纯像素的方法,其收敛更快(例如,MILAN 预训练 400 epoch 也能够达到不错的效果), 下游表现更好。

但是,采用这种方式也会让整个预训练的 pipeline 变得更加复杂,同时引入额外的计算量。

目前,MMSelfSup 已经支持了目前主流的图片掩码学习算法,如 MAE, SimMIM, CAE,以及上面提到的 MILAN, 对于上文提到的其他几种蒸馏类型的图片掩码学习算法也在积极支持中, 欢迎大家使用 MMSelfSup,如果发现不错,也希望大家多多 Star、Issue 和 PR!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/84295.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

百度安全怎么查询,怎么彻底解决百度安全弹出的风险提示

当我们在百度搜索自己的网站时,搜索结果中出现各种风险提示,比如安全联盟提醒您:该网站可能存在安全风险,请谨慎访问! 别慌!今天我们就来解决百度安全弹出的风险提示的问题。 第一步:查询网站…

Python 自动化测试框架unittest与pytest的区别

这篇文章主要讲unittest与pytest的区别,pytest相对unittest而言,代码简洁,使用便捷灵活,并且插件很丰富。 Unittest vs Pytest 主要从用例编写规则、用例的前置和后置、参数化、断言、用例执行、失败重运行和报告这几个方面比较…

传奇GOM引擎微端架设教程

传奇GOM引擎微端架设教程 GOM引擎架设微端需要准备好微端程序,用网站下载在服务器的版本 (注:本文章图有打码处因平台GZ原因需打码望读者理解) Mirserver文件一般都是自带微端程序的,偶尔也有版本没有微端程序那我们…

基于多目标遗传算法(NSGA-II)和多目标粒子群算法(MOPSO)的分布式仿真系统双目标负载平衡模型【Matlab代码实现】

💥💥💥💞💞💞欢迎来到本博客❤️❤️❤️💥💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清…

Oracle单机部署:GI安装

Oracle单机部署:GI安装存储配置ASM磁盘空间评估GI单机安装配置GI图形化安装流程安装后测试🐬 使用grid用户来安装GI。 存储配置 Oracle存储支持Oracle ASM、Oracle ACFS、本地文件系统、网络文件系统(NFS/NAS)、Oracle Memory S…

RK3588平台开发系列讲解(RTC篇)RTC的使用

平台内核版本安卓版本RK3588Linux 5.10Android 12文章目录 一、RTC简介二、HYM8563驱动配置2.1、设备树配置2.1、驱动代码三、RTC的使用3.1、SYSFS接口3.2、PROCFS接口3.3、IOCTL接口沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍RK3588平台RTC驱动及使用方…

玩以太坊链上项目的必备技能(基本类型转换以及推断-Solidity之旅六)

基本类型之间的转换 熟悉过其他编程语言的您,对基本类型之间的转换并不陌生吧!当然,这基本类型进行转换可分为隐式转换和显示转换。 隐式转换 Solidity 支持隐式转换,通过编译器自动进行转换,而不要开发人员的干涉&…

信道估计算法误码率仿真,对比不同导频长度,对比不同信道估计算法包括CS-OMP,LS,MMSE

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 所谓信道估计,就是从接收数据中将假定的某个信道模型的模型参数出来的过程。如果信道是线性的话,那么信道估计就是对系统冲激响应进行估计。 CS-OMP 正则正交匹配追踪(Re…

分布式操作系统 - 5.分布式命名管理

文章目录1.基本概念2.非结构化命名管理2.1 简单的实体定位方法:广播和多播方法(1)广播方法(broadcast)(2)多播方法(multicast)(3)问题&#xff1a…

图形API学习工程(30):尝试使用panorama来代替Cubemap作为全景图

工程GIT地址:https://gitee.com/yaksue/yaksue-graphics 前言 为了能得到全方位的光照数据,我之前学习了使用CubeMap作为全景图。CubeMap包含六张贴图对应了上下左右前后六个方向的数据。但是最近在下载全景图的资源时,看到很多并非是CubeM…

Python基于Django的毕业设计论文提交过程管理系统

项目介绍 在各学校的教学过程中,django过程管理系统是一项非常重要的事情。随着计算机多媒体技术的发展和网络的普及。采用当前流行的B/S模式以及3层架构的设计思想通过Python技术来开发此系统的目的是建立一个配合网络环境的django过程管理系统的平台,这…

c#入门-访问基类成员

调用基类构造器 在构建派生类前,会首先构建出完整的基类。 即便是派生类无权访问的成员,也会存在。 因此才能保证派生类能完全地当作基类来使用。 因此,在执行派生类的构造器前,首先需要先调用基类的构造器。 而如果基类没有&am…

017 | 精准扶贫视野下非遗传承的研究与启示——以三峡皮影为例 | 大学生创新训练项目申请书 | 极致技术工厂

(一)研究目的 百年党建视域下,全面建成小康社会的历史目标已成功达成,但东西部经济发展的不平衡、不平均依旧是新时代发展中亟需解决的问题。坚持党的领导,响应西部大开发的战略号召,本团队深入探访于2018…

S2SH药膳馆会员管理系统计算机专业毕业论文java毕业设计开题报告

💖💖更多项目资源,最下方联系我们✨✨✨✨✨✨ 目录 Java项目介绍 资料获取 Java项目介绍 计算机毕业设计java毕设之S2SH药膳馆会员管理系统-IT实战营_哔哩哔哩_bilibili项目资料网址: http://itzygogogo.com软件下载地址:http://itzygog…

基于jsp+mysql+ssm足球新闻发布网站-计算机毕业设计

项目介绍 同完成整个足球新闻发布系统的设计开发。系统实现的功能主要包括:前台浏览足球新闻的功能;后台用户在成功登录该系统的后台时,可以对用户、足球新闻类别、足球新闻、留言进行添加、修改和删除等功能;以及对用户名密码等…

Arthas(Java 应用诊断利器)

文章目录Arthas使用背景Arthas(阿尔萨斯)能做什么?Arthas Spring Boot StarterArthas Arthas 是由Alibaba开源的Java监控诊断工具,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情…

Pytorch中的损失函数

L1损失函数:又称,L1 范数损失、最小绝对值偏差(LAD)、最小绝对值误差(LAE) MAE也是指L1损失函数。 把目标值 yi 与模型输出(估计值) f(xi) 做绝对值得到的误差。 通常用于回归任务、…

uniapp实战仿写网易云音乐(二)—promise接口请求的封装和主页功能的实现,组件封装

文章目录前言promise请求接口的封装主入口功能的实现:推荐歌单模块新碟新歌模块精选视频模块最后前言 本篇文章继续完成上篇文章的部分,主要实现prromise接口的封装和首页主入口的实现 promise请求接口的封装 在上篇文章中请求我们是这样写的&#xf…

(详细及解决方法)关于Vue.prototype中定义的变量不是响应式

目录 一、背景 二、原因 三、解决方法 四、扩展 当时第一眼看到下面的图,就想这个不会是写错了吧,咋还能这样写,在这里我承认,我以前说话确实很大声了 一、背景 在项目中需要将全局变量存放到Vue的实例对象上面 Vue.protot…

【历史上的今天】12 月 13 日:时代杂志将“你”评为年度人物;苹果发布 AirPods;互联网传出欧洲

整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来。 今天是 2022 年 12 月 13 日,国家公祭日。从 2014 年开始,12 月 13 日被定为缅怀先烈的国家公祭日,网站也会在这一天变为全灰色&#xff0c…