【自监督-MIM】系列方法学习二

news2024/10/6 8:35:23

Masked image modeling 是一种训练深度学习模型的技术,尤其是在视觉领域,类似于自然语言处理中的掩码语言建模(Masked Language Modeling)。它通过在输入图像中随机遮挡(或称为掩码)部分区域,然后训练模型来预测这些被遮挡部分的内容,从而提高模型的视觉理解能力。

Masked image modeling 主要用于视觉自监督学习(Visual Self-Supervised Learning)任务,帮助模型学习图像的内在结构和表示,而无需依赖大量的标注数据。

BEIT: BERT Pre-Training of Image Transformers

具体来说,在我们的预训练中,每个图像都有两个视图,即patch image(如16×16像素)和visual token(即离散标记)。我们首先将原始图像“tokenizer”为视觉标记。然后,我们随机mask some image patches,并将它们输入Transformer。预训练的目标是基于corrupted image 恢复原始视觉标记。在预训练BEIT之后,我们通过在预训练的编码器上附加任务层来直接微调下游任务的模型参数。

注:模型学习恢复原始图像的视觉标记,而不是掩码块的原始像素。
请添加图片描述

对于重建目标,BEiT 并没有使用原始的像素,而是通过一个 “image tokenizer” 进行离散化,遵循的是 dVAE 的思路,在 BEiT 预训练之前,先构建 “tokenizer” 和 “decoder” 进行 dVAE 的训练,并构建视觉词汇表,词表大小为8192。在 BEiT 中是直接采用 Zero-shot text-to-image generation 文章开源的代码进行训练。论文中掩码比例为40%,直接使用pixel-level auto-encoding像素级的自动编码(recovering the pixels of masked patches)进行视觉预训练,促使模型关注short-range dependencies和 high-frequency details。

实验

请添加图片描述
在这里插入图片描述


MAE:Masked Autoencoders Are Scalable Vision Learners

任务:对输入图像的随机mask image patch,并重建丢失的像素。

MAE 基于两大主要设计:一是采用了非对称结构的编码-解码器,其中编码器只计算非掩码图像块,同时采用了轻量化的解码器设计;二是mask大部分的图像块,如掩码概率为 75%,可以获得更加具有意义的自监督训练任务。
在这里插入图片描述
去噪自动编码器(DAE)[58]是一类破坏输入信号并学习重建原始未破坏信号的自动编码器。

Reconstruction target.
我们的MAE通过预测每个掩码补丁的像素值来重建输入。解码器输出中的每个元素都是表示补丁的像素值的矢量。解码器的最后一层是一个线性投影,其输出通道的数量等于补丁中像素值的数量。解码器的输出被重新整形以形成重建的图像。我们的损失函数计算像素空间中重构图像和原始图像之间的均方误差(MSE)。我们只计算mask patch的损失,类似于BERT[14]。

我们还研究了一种变体,其重建目标是每个masked patch的归一化像素值。具体来说,我们计算一个patch中所有像素的平均值和标准偏差,并使用它们来规范化这个patch。在我们的实验中,使用归一化像素作为重建目标提高了表示质量。

Simple Implementation.
image --> randomly shuffle the list of tokens remove the last portion of the list,based on the masking ratio.首先,我们为每个输入补丁生成一个令牌(通过添加位置嵌入的线性投影)。接下来,我们随机打乱令牌列表,并根据掩码比率删除列表的最后一部分。

在这里插入图片描述

消融实验
在这里插入图片描述
Mask token.
我们的MAE的一个重要设计是跳过编码器中的掩码令牌[M],稍后将其应用于轻量级解码器。如果编码器使用掩码标记,其性能会更差:在linear probing中,其精度会下降14%。

Data augmentation.
我们的MAE使用only-crop增强效果良好,无论是固定大小还是随机大小(均具有随机水平翻转)。添加颜色抖动会降低结果,因此我们不会在其他实验中使用它。

没有证据表明对比学习可以在没有增强的情况下工作:图像的两个视图是相同的,并且可以很容易解决。

在这里插入图片描述

请添加图片描述

代码实现

MAE-Pytorch核心思想随机生成一个NXL的nosie,然后对齐进行排序选取其中百分之75%的patch个数,同时维护一个ids_restore用于在decoder重新排序patch。

# Copyright (c) Meta Platforms, Inc. and affiliates.
# All rights reserved.

# This source code is licensed under the license found in the
# LICENSE file in the root directory of this source tree.
# --------------------------------------------------------
# References:
# timm: https://github.com/rwightman/pytorch-image-models/tree/master/timm
# DeiT: https://github.com/facebookresearch/deit
# --------------------------------------------------------

from functools import partial

import torch
import torch.nn as nn

from timm.models.vision_transformer import PatchEmbed, Block

from util.pos_embed import get_2d_sincos_pos_embed


class MaskedAutoencoderViT(nn.Module):
    """ Masked Autoencoder with VisionTransformer backbone
    """
    def __init__(self, img_size=224, patch_size=16, in_chans=3,
                 embed_dim=1024, depth=24, num_heads=16,
                 decoder_embed_dim=512, decoder_depth=8, decoder_num_heads=16,
                 mlp_ratio=4., norm_layer=nn.LayerNorm, norm_pix_loss=False):
        super().__init__()

        # --------------------------------------------------------------------------
        # MAE encoder specifics
        self.patch_embed = PatchEmbed(img_size, patch_size, in_chans, embed_dim)
        num_patches = self.patch_embed.num_patches

        self.cls_token = nn.Parameter(torch.zeros(1, 1, embed_dim))
        self.pos_embed = nn.Parameter(torch.zeros(1, num_patches + 1, embed_dim), requires_grad=False)  # fixed sin-cos embedding

        self.blocks = nn.ModuleList([
            Block(embed_dim, num_heads, mlp_ratio, qkv_bias=True, qk_scale=None, norm_layer=norm_layer)
            for i in range(depth)])
        self.norm = norm_layer(embed_dim)
        # --------------------------------------------------------------------------

        # -------------------------------------------------------

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

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

相关文章

常见的字符串函数(包含头文件string.h)和字符函数(2)

八. strstr函数 1.strstr的定义 char *strstr( const char *str1, const char *str2 ); ->1. strstr查找子串(str2)在字符串(str2)中第一次出现的位置,记录并返回该位置的指针,如果找不到,则返回NULL ->2. str1:查找字符…

Java毕业设计 基于SSM vue药店管理系统小程序 微信小程序

Java毕业设计 基于SSM vue药店管理系统小程序 微信小程序 SSM 药店管理系统小程序 功能介绍 用户 登录 注册 首页 药品信息 药品详情 加入购物车 立即购买 收藏 购物车 立即下单 新增收货地址 我的收藏管理 用户充值 我的订单 留言板 管理员 登录 个人中心 修改密码 个人信息…

【深度学习】python之人工智能应用篇--跨模态生成技术

跨模态生成技术概述 跨模态生成技术是一种将不同模态的数据(如文本、图像、音频、视频等)进行融合和转换的技术。其目标是通过将一个模态的数据作为输入,生成与之对应的另一个模态的输出。这种技术对于突破单一模态的局限性,提高…

【九】【QT开发应用】WebRTC的sigslot源码和使用WebRTC的sigslot使用编写信号槽

WebRTC(Web Real-Time Communication) 是一个开源项目,提供实时通信能力,广泛应用于视频、音频和数据传输。在WebRTC的实现中,sigslot库用于信号和槽机制,以实现事件驱动的编程模型。 WebRTC的sigslot部分…

如何精准分析人形机器人运动数据?

全球“机器换人”进程加速,人形机器人有望成为AI下一个重要落地应用场景;EtherCAT-Analyzer具备分析人形机器人所有关节和电池与主站的通讯信息,快速掌握节点网络状态! 前言 随着人形机器人行业的发展及《中国制造2025》的全面实施,传统的脉冲模式控制很大程度上制约了机…

一个例子理解傅里叶变换的计算过程

假设我们有一个简单的信号,由两个不同频率的正弦波组成,我们希望通过傅里叶变换来分析其频谱。 示例信号 假设我们有一个信号 : 这个信号由两个频率成分组成:一个50 Hz的正弦波和一个120 Hz的正弦波,后者的振幅是前者…

用一个实例看如何分享大量照片 续篇二,关于Exif (Exchangeable Image File) - 可交换图像文件

续篇二:说说关于照片隐含的 Exif (Exchangeable Image File) 可交换图像文件 数码照片的Exif 参数有很多,重要的Exif信息:拍摄日期、时间、拍摄器材、GPS信息。 当然这主要对自己的档案有意义,如果放到网上还是建议抹去这些信息。…

微服务框架中的Eureka和Ribbon的个人理解

微服务框架需要学习的东西很多,基本上我把它分为了五个模块: 第一:微服务技术模块 分为三个常用小模块: 1.微服务治理: 注册发现 远程调用 配置管理 网关路由 2.微服务保护: 流量控制 系统保护 熔断降级 服…

数据转换 | Matlab基于R对称点模式(symmetric dot pattern, SDP)一维序列信号转二维时频图象

目录 效果分析基本介绍程序设计参考资料获取方式 效果分析 基本介绍 数据转换 | Matlab基于R对称点模式(symmetric dot pattern, SDP)一维序列信号转二维时频图象 SDP常被用于信号分析和深度学习模式识别。 SDP是一种基于极坐标系的图像表示方法,可以直接将原始信…

ECMAScript6介绍及环境搭建

这实际上说明,对象的解构赋值是下面形式的简写。 let { foo: foo, bar: bar } { foo: ‘aaa’, bar: ‘bbb’ }; 也就是说,对象的解构赋值的内部机制,是先找到同名属性,然后再赋给对应的变量。真正被赋值的是后者,而…

基于sivaco设计仿真PT型IGBT和NPT型IGBT结构

本项目基于使用仿真软件SIVACO来仿真研究PT型和NPT型的IGBT结构特点,并且通过仿真研究对于不同的掺杂浓度、沟道宽度等对器件的特性产生不同的影响。 资料获取到咸🐟:xy591215295250 \\\或者联系wechat 号:comprehensivable &…

IND83081芯片介绍(二)

七、典型应用 上面显示了独立的CAN收发器,而下面则显示了多个iND83081可以共享同一个CAN收发器的应用场景。通过这些连接,iND83081可以实现对多个LED的驱动和控制,同时与外部MCU进行通信 。 八、ELINS接口 1.ELINS简介 ELINS是一种从接口&a…

PHP 网络通信底层原理分析

大家好,我是码农先森。 引言 我们日常的程序开发大多数都是以业务为主,很少会接触到底层逻辑。对于我们程序员来说,了解程序的底层运行逻辑,更有助于提升我们对程序的理解。我相信大多数的人,每天基本上都是完成业务…

利用labelme制作自己的coco数据集(labelme转coco数据集)

最近刚接触学习mmdetection,需要用到coco格式的数据集。 1.安装labelme 建议在conda(base)环境下安装(前提是需要下载anaconda),下面是我已经装过的情况。 2.进入labelme环境下 中间可能会提示安装其它库,自行装上就行。 这里的…

5种u盘加密技巧分享,保护保护您的数据隐私

怎么给电脑U盘加密呢?U盘作为一种便携式存储设备,常常用于传输和存储敏感信息。由于U盘的易于丢失或被盗的特点,U盘加密显得尤为重要。今天教大家如何给电脑U盘加密,推荐3款优秀的U盘加密软件,并提供操作方法和注意事项…

51单片机看门狗定时器配置

测试环境 单片机型号:STC8G1K08-38I-TSSOP20,其他型号请自行测试; IDE:KEIL C51; 寄存器配置及主要代码 手册中关于看门狗的寄存器描述如下: 启动看门狗,需将B5位EN_WDT置1即可,…

数据结构与算法基础(王卓)--学习笔记

1 数据结构分类 1.1 逻辑结构分类 集合结构线性结构:线性表、栈、队列、串树形结构图形结构 1.2 物理结构分类 逻辑结构在计算机中的真正表示方式(又称为映射)称为物理结构,也可叫做存储结构 顺序存储结构:数组链…

嵌入式学习——数据结构(双向无头有环链表、内核链表、栈)——day48

1. 约瑟夫环问题——双向无头回环链表 1.1 问题描述 给定 ( n ) 个人(编号为 ( 1, 2, \ldots, n )),他们围成一个圈。从第一个人开始报数,每报到第 ( k ) 个人时,杀掉这个人,然后从下一个人重新开始报数。…

一些硬件知识(十二)

1、请说明一下滤波磁珠和滤波电感的区别。 因此磁珠通常用于模数地的连接。 磁珠由导线穿过铁氧体组成,直流电阻很小,在低频时阻抗也很小,对直流信号几乎没有影响。 在高频(几十兆赫兹以上)时磁珠阻抗比较大&#xff0…

事务处理概述

一、引言 1、决定数据库应用系统性能的DBMS的关键实现技术——事务处理技术 事务处理技术是为了解决早期的DBMS产品在应用过程中遇到的现实问题而在后续的DBMS产品中加以实现的技术 2、比如在银行系统中,账户转账是常见的业务,是金融学中的交易trans…