当前位置: 首页 > news >正文

SimMIM:一个类BERT的计算机视觉的预训练框架

1、前言

呃…好久没有写博客了,主要是最近时间比较少。今天来做一期视频+博客的内容。本文主要讲SimMIM,它是一个将计算机视觉(图像)进行自监督训练的框架。

原论文:SimMIM:用于掩码图像建模的简单框架 (arxiv.org)

代码实现:https://github.com/microsoft/SimMIM

视频:【SimMIM:计算机视觉的随机掩码预训练-哔哩哔哩】

Demo:

在这里插入图片描述

2、引入

2.1、NLP自然语言处理

我们之前讲过了各种各样的NLP语言处理的模型框架,比如BERT,GPT(没有做相关的博文,只有视频)。它们都是基于在一大堆没有标签的文本上进行训练。然后才进行下游微调(GPT2及以后没有微调)。

为什么需要做预训练?在互联网上,大多数的文本数据都是没有标签的。而有标签的文本则相对较少。为了能够充分利用这些无标签文本,我们可以在这些文本上进行预训练,然后学习得到文字的表征。进而才执行各种下游任务

2.2、图像视觉

那人们就想,是否在图像视觉领域,也可以在无标签的图像上进行预训练呢?毕竟互联网上,也存在大量的无标签图像。不能把这些图像充分利用起来,实在可惜。而SimMIM,就是一个在无标签图像上预训练的框架

3、方法

同BERT一样,最直观的做法,当燃是使用随机掩码,我们只需要掩码掉其中一些像素值。然后,把它送进网络。最后预测出那些被掩码掉的部分,再把他们做损失即可。然后进行优化更新。

然而,这种做法,却存在几个很重要的问题:

3.1、问题

① 在图像领域,图像往往具有很强的局部性。也就是说,彼此接近的像素点之间,往往是高度相关的。这样的话,模型及其未必需要学习到像素的语义信息。它只需要复制旁边的没有被掩码的像素点,填充到被掩码的部分。就可以实现预测(彼此接近的像素点之间具有高度的相关性)

② 文字是人类生成的高级概念,而视觉信号,是相对原始、低级的。那么就有这么一个问题,低级信号的预测是否对高级视觉识别任务有用?

③ 文本是离散的,而视觉信号是连续的。目前还不清楚基于分类的掩码语言建模方法如何能够很好地处理连续的视觉信号。

3.2、问题解决

对于问题①:

我们可以使用较高的掩码比例以及较大的patch(此处指掩码块的大小,不是图像分块),让模型能够找到附近可见像素点的可能性减少。从而让模型无法直接从附近像素复制来填充被掩码的值。

作者经过实验,发现当掩码块大小为32时,掩码比例为10%~70%,就可以取得相对较好的性能;对于一个大小为8的掩码块,就需要80%的掩码比例才能达到良好的效果。

②: 使用原始像素回归任务。回归任务很好地符合视觉信号的连续特性,具有可排序性。

③: 采用了一个轻量级的预测头(如线性层)。使用轻量级的预测头带来了预训练的显著加速。虽然较重的头或较高的分辨率通常会导致更大的生成能力,但这种更大的能力不一定有利于下游的微调任务。

4、SimMIM

总的来说,模型图可以表达成这样

在这里插入图片描述

首先,将一张图像按照一定掩码块大小,按比例随机掩码掉一些块。然后送给一个编码器(比如ViT,Swin Transformer)。然后再加上一个预测头(one-layer prediction Head)。得到输出结果后。把预测的结果与真实的结果作损失(比如 L 1 L_1 L1损失)。

4.1、掩码

在论文里面提到,不论是将ViT还是Swin作为编码器结构,他们都采用32x32的掩码块。

论文采用了各种掩码规则进行消融对比。最后发现,采用随机掩码,块大小为32,掩码比例为0.5。取得的效果最好

在这里插入图片描述

实验对比

在这里插入图片描述

4.2、预测头

预测头的作用,就是把维度信息,重新映射成图像大小。

以Swin Transformer为例,我们最后的输出维度是 H 32 × W 32 × 8 C \frac{H}{32}\times\frac{W}{32}\times8C 32H×32W×8C

那么最后的预测头,就可以使用一个1x1的卷积层。把通道数从8C转化成32x32x3=3072维度。

这样一来,我们就得到维度为 H 32 × W 32 × 32 × 32 × 3 \frac{H}{32}\times\frac{W}{32}\times 32\times 32\times 3 32H×32W×32×32×3。就可以把它reshape成 H × W × 3 H\times W\times 3 H×W×3。也就是图像的大小。然后,把它与真实的图像作损失
L = 1 Ω ( x M ) ∥ y M − x M ∥ 1 L=\frac{1}{\Omega(x_M)}\Vert y_M-x_M \Vert_1 L=Ω(xM)1yMxM1
其 中 x , y ∈ R 3 H W × 1 x,y ∈ R^{3HW}×1 x,yR3HW×1 分 别 为 输 入 的RGB值和预测值;M表示掩码像素的集合;Ω(·)是元素的数量。

在实验中,还考虑了 L 2 L_2 L2 s m o o t h − L 1 smooth-L_1 smoothL1损失函数,它们的表现相似,默认采用 L 1 L_1 L1损失函数。

5、其他细节

在代码中,其实我还发现了有一个分类头。与BERT一样,在下游任务(比如图像分类)的时候,我们可以那他来作分类微调等等(非必须)。

另外还有一些,就是训练的细节了。那一部分很简单,就是一些超参数的配置等等。我也不可能一一全部列举出来,大家可以看论文,或者看代码里面就知道了。

6、结束

好了,本篇文章到此为止,如有问题,还望指出。阿里嘎多!

在这里插入图片描述

相关文章:

SimMIM:一个类BERT的计算机视觉的预训练框架

1、前言 呃…好久没有写博客了,主要是最近时间比较少。今天来做一期视频博客的内容。本文主要讲SimMIM,它是一个将计算机视觉(图像)进行自监督训练的框架。 原论文:SimMIM:用于掩码图像建模的简单框架 (a…...

数据精度丢失

js数据精度丢失 最近看面试题想到了之前在开发钟遇到过的问题,现总结一下 在开发过程中,发现从后台返回的数据结构中的id字段在前端显示为不正确的值。经过排查,怀疑是JavaScript中Number类型精度丢失的问题。通过将id字段的类型从Number改为…...

Element UI DatePicker选择日期范围区间默认显示前一个月和本月

要求&#xff1a;点击el-date-picker选择时间范围时&#xff0c;默认展开当月和上个月。 但是Element UI的组件默认展开的是本月和下一个月&#xff0c;如下图所示&#xff1a; 改为 <span click"changeInitCalendarRange"><el-date-picker v-model"r…...

C++:聚合类、嵌套类、局部类、union类详细介绍与分析

聚合类 (1)What&#xff08;什么是聚合类&#xff09; 本质是一个自定义类型的数据结构&#xff08;结构体或类&#xff09;&#xff0c;但聚合类有以下特性&#xff1a; 所有的成员都是public没有任何构造函数没有基类类内部没有初始值 (2)Why&#xff08;聚合类的作用&…...

MKS流量计软件MFC通讯驱动使用于C和P系列MFC控制USB接口W10系统

MKS流量计软件MFC通讯驱动使用于C和P系列MFC控制USB接口W10系统...

C++:左值/右值引用、移动语义/std::move、万能引用/完美转发std::forward 详解

你能学到 左值 与 右值左值引用 与 右值引用 基本用法与作用拷贝构造函数 与 移动构造函数移动语义 与 std::move万能引用 与 引用折叠完美转发&#xff1a;std::forward 前言 本文代码片段中变量命名规则如下&#xff1a; 小写字母&#xff1a;一般类型的变量&#xff08;非…...

蜂窝物联云平台:一站式服务,智能生活从此开始!

蜂窝云平台 一、PC端展示与管理 GIS地图整合 在GIS地图上精确展示地块&#xff0c;轻松点选查看详细设备信息、实时监控和控制功能&#xff0c;以及基地的全方位介绍。 个性化定制界面 界面布局与功能展示均可按需求定制&#xff0c;打造独一无二的用户体验。 数据集中看板 将…...

【中项】系统集成项目管理工程师-第3章 信息技术服务-3.3服务生命周期

前言&#xff1a;系统集成项目管理工程师专业&#xff0c;现分享一些教材知识点。觉得文章还不错的喜欢点赞收藏的同时帮忙点点关注。 软考同样是国家人社部和工信部组织的国家级考试&#xff0c;全称为“全国计算机与软件专业技术资格&#xff08;水平&#xff09;考试”&…...

【iOS】——消息传递底层实现

消息传递是什么 Objective-C是一种动态类型语言&#xff0c;这意味着在编译时并不确定对象的具体类型&#xff0c;而是在运行时决定。消息传递机制允许程序在运行时向对象发送消息&#xff0c;对象再决定如何响应这些消息。 当你通过对象调用方法时&#xff0c;例如像这样[ob…...

PostgreSQL数据库从入门到精通系列之十:表空间、索引表空间、创建表空间、创建索引空间、创建分区表、创建分区表的分区、创建指定表空间、索引表空间的分区表

PostgreSQL数据库从入门到精通系列之十:表空间、索引表空间、创建表空间、创建索引空间、创建分区表、创建分区表的分区、创建指定表空间、索引表空间的分区表 一、数据库表空间和数据库之间的关系二、索引表空间和数据库之间的关系三、创建角色四、创建表空间目录五、创建表空…...

恶补,先验分布,后验分布 ,似然估计

恶补&#xff0c;打一遍增加印象 先验分布后验分布&#xff0c;似然估计 声明&#xff1a;仅记录个人学习&#xff0c;并无其他用途。 先验分布 后验分布&#xff0c; 似然估计 隔壁小哥的故事&#xff1a; 隔壁小哥要去15公里外的一个公园里玩&#xff0c;小哥可以选择步行…...

JS之数组中的reduce方法

文章目录 基本语法&#xff1a;callbackFn 的参数:例子1. 数组求和2. 数组求积3. 扁平化数组4. 数组元素计数5. 使用对象解构和展开运算符合并数组中的对象6. 求最大值和最小值 函数组合异步操作中的 reduce总结 reduce 是 JavaScript 中 Array 对象的一个方法&#xff0c;非常…...

在win10上通过WSL和docker安装Ubuntu子系统,并配置Ubuntu可成功使用宿主机GPU

本文主要记录win10系统上,通过WSL的Ubuntu系统以及Docker使用GPU的全部过程。 文章目录 1、 启用hyper-v2、 安装docker3、 安装WSL3.1 安装WSL23.1.1 检查是否安装了WSL23.1.1 安装和配置 WSL 23.2 安装Ubuntu 子系统3.3 检查并修改WSL版本4、docker配置ubuntu20.04 LTS5、下…...

python需要掌握那些语法

1-list数据类型 内置方法查看长度len&#xff08;list&#xff09; 2.array数据类型 查看形状 3.tuple 取出元组 t (1, 2, 3, 4, 5) # 取出第一个元素 2first_element t[0] 3print(first_element) # 输出&#xff1a;1 4 5# 取出第三个元素 6third_element t[2] 7pr…...

CentOS Mysql8 数据库安装

添加mysql yum仓库 这里安装的是8.0版本&#xff0c;如需其他版本在此查看mysql版本列表 wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm sudo rpm -Uvh mysql80-community-release-el7-3.noarch.rpm安装mysql sudo yum install mysql-server …...

新手教程---python-函数(新添加)

一、递归函数 在Python中&#xff0c;递归函数是指一个函数调用自身的过程。递归函数一般包括两个部分&#xff1a;基本情况和递归情况。 基本情况是指在递归过程中终止递归的条件。如果不满足基本情况&#xff0c;递归函数将进入递归情况&#xff0c;调用自身&#xff0c;并缩…...

Windows tasklist命令详解,Windows查看进程

「作者简介」&#xff1a;冬奥会网络安全中国代表队&#xff0c;CSDN Top100&#xff0c;就职奇安信多年&#xff0c;以实战工作为基础著作 《网络安全自学教程》&#xff0c;适合基础薄弱的同学系统化的学习网络安全&#xff0c;用最短的时间掌握最核心的技术。 tasklist 可以…...

数据结构——线性表(循环链表)

一、循环链表定义 将单链表中终端结点的指针端由空指针改为指向头结点&#xff0c;就使整个单链表形成一 个环&#xff0c;这种头尾相接的单链表称为单循环链表&#xff0c;简称循环链表(circular linked list)。 循环链表解决了一个很麻烦的问题。如何从当中一 个结点出发&am…...

深度剖析机构号矩阵系统:如何根据业务需求做出明智选择

在数字化营销的浪潮中&#xff0c;短视频平台如抖音、快手等已成为品牌传播和用户互动的重要渠道。为了更高效地管理这些平台的账号&#xff0c;机构号矩阵系统应运而生。本文将深度剖析机构号矩阵系统&#xff0c;并探讨如何根据业务需求做出明智的选择。 机构号矩阵系统概述…...

go语言的基础语法

基础语法 与python、vue等类似&#xff0c;go语言也分常量和变量等&#xff0c;常量用const(不可变)和变量var(可变)定义 常量 常量中的数据类型只可以是布尔型、数字型&#xff08;整数型、浮点型和复数&#xff09;和字符串型&#xff0c;值不可更改&#xff0c;表达式只支…...

7.4.分块查找

一.分块查找的算法思想&#xff1a; 1.实例&#xff1a; 以上述图片的顺序表为例&#xff0c; 该顺序表的数据元素从整体来看是乱序的&#xff0c;但如果把这些数据元素分成一块一块的小区间&#xff0c; 第一个区间[0,1]索引上的数据元素都是小于等于10的&#xff0c; 第二…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机&#xff08;无人驾驶飞行器&#xff0c;UAV&#xff09;技术的快速发展&#xff0c;其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统&#xff0c;无人机的“黑飞”&…...