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)1∥yM−xM∥1
其 中 x , y ∈ R 3 H W × 1 x,y ∈ R^{3HW}×1 x,y∈R3HW×1 分 别 为 输 入 的RGB值和预测值;M表示掩码像素的集合;Ω(·)是元素的数量。
在实验中,还考虑了 L 2 L_2 L2和 s m o o t h − L 1 smooth-L_1 smooth−L1损失函数,它们的表现相似,默认采用 L 1 L_1 L1损失函数。
5、其他细节
在代码中,其实我还发现了有一个分类头。与BERT一样,在下游任务(比如图像分类)的时候,我们可以那他来作分类微调等等(非必须)。
另外还有一些,就是训练的细节了。那一部分很简单,就是一些超参数的配置等等。我也不可能一一全部列举出来,大家可以看论文,或者看代码里面就知道了。
6、结束
好了,本篇文章到此为止,如有问题,还望指出。阿里嘎多!
相关文章:
SimMIM:一个类BERT的计算机视觉的预训练框架
1、前言 呃…好久没有写博客了,主要是最近时间比较少。今天来做一期视频博客的内容。本文主要讲SimMIM,它是一个将计算机视觉(图像)进行自监督训练的框架。 原论文:SimMIM:用于掩码图像建模的简单框架 (a…...
数据精度丢失
js数据精度丢失 最近看面试题想到了之前在开发钟遇到过的问题,现总结一下 在开发过程中,发现从后台返回的数据结构中的id字段在前端显示为不正确的值。经过排查,怀疑是JavaScript中Number类型精度丢失的问题。通过将id字段的类型从Number改为…...
Element UI DatePicker选择日期范围区间默认显示前一个月和本月
要求:点击el-date-picker选择时间范围时,默认展开当月和上个月。 但是Element UI的组件默认展开的是本月和下一个月,如下图所示: 改为 <span click"changeInitCalendarRange"><el-date-picker v-model"r…...
C++:聚合类、嵌套类、局部类、union类详细介绍与分析
聚合类 (1)What(什么是聚合类) 本质是一个自定义类型的数据结构(结构体或类),但聚合类有以下特性: 所有的成员都是public没有任何构造函数没有基类类内部没有初始值 (2)Why(聚合类的作用&…...
MKS流量计软件MFC通讯驱动使用于C和P系列MFC控制USB接口W10系统
MKS流量计软件MFC通讯驱动使用于C和P系列MFC控制USB接口W10系统...
C++:左值/右值引用、移动语义/std::move、万能引用/完美转发std::forward 详解
你能学到 左值 与 右值左值引用 与 右值引用 基本用法与作用拷贝构造函数 与 移动构造函数移动语义 与 std::move万能引用 与 引用折叠完美转发:std::forward 前言 本文代码片段中变量命名规则如下: 小写字母:一般类型的变量(非…...
蜂窝物联云平台:一站式服务,智能生活从此开始!
蜂窝云平台 一、PC端展示与管理 GIS地图整合 在GIS地图上精确展示地块,轻松点选查看详细设备信息、实时监控和控制功能,以及基地的全方位介绍。 个性化定制界面 界面布局与功能展示均可按需求定制,打造独一无二的用户体验。 数据集中看板 将…...
【中项】系统集成项目管理工程师-第3章 信息技术服务-3.3服务生命周期
前言:系统集成项目管理工程师专业,现分享一些教材知识点。觉得文章还不错的喜欢点赞收藏的同时帮忙点点关注。 软考同样是国家人社部和工信部组织的国家级考试,全称为“全国计算机与软件专业技术资格(水平)考试”&…...
【iOS】——消息传递底层实现
消息传递是什么 Objective-C是一种动态类型语言,这意味着在编译时并不确定对象的具体类型,而是在运行时决定。消息传递机制允许程序在运行时向对象发送消息,对象再决定如何响应这些消息。 当你通过对象调用方法时,例如像这样[ob…...
PostgreSQL数据库从入门到精通系列之十:表空间、索引表空间、创建表空间、创建索引空间、创建分区表、创建分区表的分区、创建指定表空间、索引表空间的分区表
PostgreSQL数据库从入门到精通系列之十:表空间、索引表空间、创建表空间、创建索引空间、创建分区表、创建分区表的分区、创建指定表空间、索引表空间的分区表 一、数据库表空间和数据库之间的关系二、索引表空间和数据库之间的关系三、创建角色四、创建表空间目录五、创建表空…...
恶补,先验分布,后验分布 ,似然估计
恶补,打一遍增加印象 先验分布后验分布,似然估计 声明:仅记录个人学习,并无其他用途。 先验分布 后验分布, 似然估计 隔壁小哥的故事: 隔壁小哥要去15公里外的一个公园里玩,小哥可以选择步行…...
JS之数组中的reduce方法
文章目录 基本语法:callbackFn 的参数:例子1. 数组求和2. 数组求积3. 扁平化数组4. 数组元素计数5. 使用对象解构和展开运算符合并数组中的对象6. 求最大值和最小值 函数组合异步操作中的 reduce总结 reduce 是 JavaScript 中 Array 对象的一个方法,非常…...
在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(list) 2.array数据类型 查看形状 3.tuple 取出元组 t (1, 2, 3, 4, 5) # 取出第一个元素 2first_element t[0] 3print(first_element) # 输出:1 4 5# 取出第三个元素 6third_element t[2] 7pr…...
CentOS Mysql8 数据库安装
添加mysql yum仓库 这里安装的是8.0版本,如需其他版本在此查看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中,递归函数是指一个函数调用自身的过程。递归函数一般包括两个部分:基本情况和递归情况。 基本情况是指在递归过程中终止递归的条件。如果不满足基本情况,递归函数将进入递归情况,调用自身,并缩…...
Windows tasklist命令详解,Windows查看进程
「作者简介」:冬奥会网络安全中国代表队,CSDN Top100,就职奇安信多年,以实战工作为基础著作 《网络安全自学教程》,适合基础薄弱的同学系统化的学习网络安全,用最短的时间掌握最核心的技术。 tasklist 可以…...
数据结构——线性表(循环链表)
一、循环链表定义 将单链表中终端结点的指针端由空指针改为指向头结点,就使整个单链表形成一 个环,这种头尾相接的单链表称为单循环链表,简称循环链表(circular linked list)。 循环链表解决了一个很麻烦的问题。如何从当中一 个结点出发&am…...
深度剖析机构号矩阵系统:如何根据业务需求做出明智选择
在数字化营销的浪潮中,短视频平台如抖音、快手等已成为品牌传播和用户互动的重要渠道。为了更高效地管理这些平台的账号,机构号矩阵系统应运而生。本文将深度剖析机构号矩阵系统,并探讨如何根据业务需求做出明智的选择。 机构号矩阵系统概述…...
go语言的基础语法
基础语法 与python、vue等类似,go语言也分常量和变量等,常量用const(不可变)和变量var(可变)定义 常量 常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型,值不可更改,表达式只支…...
Modbus转Ethernet/IP网关模块与汇川PLC通讯案例
Modbus转Ethernet/IP网关模块(XD-MDEP100)是一种用于将Modbus协议转换为Ethernet/IP协议的设备。它可以将Modbus RTU和Modbus TCP两种不同格式的Modbus数据包转换为Ethernet/IP协议的数据包,实现不同厂家的设备之间的数据交换和共享。在汇川P…...
【玩转python】入门篇day11-位运算
1、位运算语法 计算机中所有的数据都是以二进制的形式存储在设备中。即 0、1 两种状态,计算机对二进制数据进行的运算(、-、、/)都是叫位运算,相比在代码中直接使用(、-、、/)运算符,合理的运用位运算更能显著提高代码在机器上的执行效率。 …...
【Gitlab】记一次升级 Gitlab 后 API 失效的问题
背景 前段时间,因内部使用的 Gitlab 版本存在漏洞,需要进行升级,于是乎,将 Gitlab 从 16.6.0 升级到 16.11.3。而我们项目有个接口是用于获取 Gitlab 上的开发人员。 然后,今天,突然发现这个接口获取不到…...
2024.7.19 作业
1.链表的排序 int list_sort(NodePtr L) {if(NULLL || L->len<1){printf("排序失败");return -1;}int lenL->len1;NodePtr p;int i,j;for( i1;i<len;i){for( j0,pL;j<len-i;j,pp->next){if( p->data > p->next->data ){datatype tp-&…...
python如何创建SQLite 数据库连接,如何将数据库存储在内存中?
嗨,大家好,我是兰若姐姐。今天给大家说下如何创建SQLite 数据库连接,并将数据库存储在内存中,这是一种临时的、私有的数据存储空间,一般用于以下情形: 什么都不说,先上代码: import sqlite3创建数据库连接…...
机器学习-20-基于交互式web应用框架streamlit的基础使用教程
参考简洁而优雅地展示你的算法和数据——streamlit教程(一) 原理介绍与布局控制 参考Streamlit 讲解专栏(二):搭建第一个应用 Streamlit 讲解专栏(三):两种方案构建多页面 Streamlit 讲解专栏(五):探索强大而灵活的 st.write() 函数 1 streamlit 1.1 运行原理 im…...
基于luckysheet实现在线电子表格和Excel在线预览
概述 本文基于luckysheet实现在线的电子表格,并基于luckyexcel实现excel文件的导入和在线预览。 效果 实现 1. luckysheet介绍 Luckysheet ,一款纯前端类似excel的在线表格,功能强大、配置简单、完全开源。 官方文档在线Demo 2. 实现 …...
【学习笔记】无人机系统(UAS)的连接、识别和跟踪(一)-3GPP TS 23.256 技术规范概述
3GPP TS 23.256 技术规范,主要定义了3GPP系统对无人机(UAV)的连接性、身份识别、跟踪及A2X(Aircraft-to-Everything)服务的支持。 3GPP TS 23.256 技术规范: 以下是文档的核心内容总结: UAV系…...
sqlalchemy_dm
1、参考文档: https://blog.csdn.net/njcwwddcz/article/details/126554118 https://eco.dameng.com/document/dm/zh-cn/pm/dmpython-dialect-package.html 2、生成工具 sqlalchemy2.0.0.zip 3、安装步骤 conda create --name kes --clone kes1 rz unzip sql…...
基于springboot+vue+uniapp的驾校预约平台小程序
开发语言:Java框架:springbootuniappJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包&#…...
做系统之前的网站收藏在哪/360优化大师官方最新
package org.rui.pattern;import junit.framework.*;/*** 为了使同一个方法调用能够产生不同的行为,State 模式在代理(surrogate)的* 生命周期内切换它所相应的实现(implementation)。当你发现,在决定怎样实…...
网站定做/百度外链查询工具
解决循环引用的问题,参考学习了ibireme大神的YYFPSLabel的实现,整理以备用 // 如果直接用 self 或者 weakSelf,都不能解决循环引用问题_link [CADisplayLink displayLinkWithTarget:[YYWeakProxy proxyWithTarget:self] selector:selector(t…...
毕业设计网站代做多少钱/爱站
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid4902 题目的意思很是简单,一系列的数。 两种操作:1.[l,r]内变为x。2.[l,r]内大于x的变为gcd(a[i],x)。时限15000mm,很有暴力的诱惑力。 不过纯暴力肯定会TLE的。但是&#…...
做网站的去哪找客户/百度seo排名教程
化到这一步,我们就将原来一个数据会非常大的A^B,变成了很多项的乘积。编程实现的时候,我们只需走一遍B的二进制位,并用一个变量a记录当前二进制位的权值,判断当前bi的值,然后将结果乘起来取模即可。快速幂取模通过将指…...
长春市长春网站建设哪家好/如何进行网络推广
---恢复内容开始--- 2019春第十一周作业 这个作业属于那个课程C语言程序设计II这个作业要求在哪里https://edu.cnblogs.com/campus/zswxy/software-engineering-class2-2018/homework/3201我在这个课程的目标是熟悉经典数论这个作业在那个具体方面帮助我实现目标递归函数及数论…...
苏州建设工程招标在哪个网站/网站模板商城
最近两天都在处理这个问题 使用mysql 的时候用到了load data infile 的命令,为什么用这个命令和命令怎么用不解释,参考手册已经很详细了,之说出现的问题。 1.被处理的文件需要严谨的文件格式。 2.路径问题,注意windows 下\\和lin…...