PixMIM论文笔记

论文名称:PixMIM: Rethinking Pixel Reconstruction in Masked Image Modeling
发表时间:2023 年 3 月 4 日
作者及组织:上海人工智能实验室、西蒙菲莎大学、香港中文大学
GitHub:https://github.com/open-mmlab/mmselfsup/tree/dev-1.x/configs/selfsup/pixmim

问题与贡献

在MIM(Maksed Image Modeling)任务中,随着Maked Autoencoders(MAE)和BEiT的提出,已经取得很大进步。但是,后续的工作研究要么通过添加新的辅助任务或者额外预训练模型,造成了框架的复杂性,并且引入了额外的计算成本。
本文从pixel重建的角度对MIM进行了详尽的分析,研究了输入图像patchs和重构目标,揭示了两个重要但是之前被忽视的难点bottlenecks。基于上述的分析,本文提出了一个简单且有效的方法,PixMIM,主要包含如下两个策略:

  • filtering the high-frequency components from the reconstruction target to de-emphasize the network’s focus on texture-rich details
  • 从重构目标中过滤高频分量,来弱化网络对纹理丰富细节的关注
  • adopting a conservative data transform strategy to alleviate the problem of missing foreground in MIM training.
  • 采用保守的数据转换策略来缓解MIM训练中前景丢失的问题

PixMIM可以简单嵌入到pixel-based MIM方法中,其增加的计算成本可以忽略不计。
本文通过对MAE算法进行详尽的分析,揭示两个重要问题:

  • 重建目标

现阶段,大多数MIM方法与MAE一样,将原始的像素值作为重建目标,这使得网络需要对masked patchs有优秀的重建能力,包括复杂的细节纹理。这种重建目标使得网络浪费建模能力来关注短期依赖和高频细节。而本文认为在 MIM 任务中,模型应该更关注浅层特征,即形状偏置。
image.png

  • 输入patchs

MAE中使用Random Resized Crop作为数据增强手段,但是,当结合RRC和高掩码率技巧时,MAE输入的patchs平均只占整体目标的17.1%。语义丰富的前景对于模型学习到好的特征是至关重要的。在训练过程中,较低的前景模型收敛会阻碍模型学习形状偏差。
image.png

前置概念和理论

MAE and most pixel-based MIM methods enforce the model to reconstruct intricate details of raw images. These complicated details contain textures with repeated patterns and belong to the high-frequency components in the frequency domain, which are usually independent of object shapes or scene structures.

vision models with stronger shape biases behave more like human visual perception, demonstrating better robustness and performing better when transferred to downstream tasks than those with stronger texture biases.

现在的MIM模型的重建目标,不可避免地会引入texture biases,偏离了之前工作地初衷,可能损害representation质量。与之对应的是,模型应该在重建目标中弱化high-frequency分量
如下图所示,作者为了评估MIM算法中输入patchs中包含目标的百分比,提出了以下的重叠面积计算公式。图中A1为原图中目标的区域,A2为裁剪后图像中目标的区域,A2和A1的比值可以得出占比。
image.png
作者发现,在MAE算法中,当使用RRC数据增强后,比值为68.3%,RRC结合掩码之后,占比只有17.1%,说明MAE的输入中缺乏有效的前景信息。如DeiT Ⅲ中提出的:前景相对于背景能编码更多语义信息,缺乏前景信息会导致在下游任务中优化欠佳。因此,需要一个简单的方法来保留更多的前景信息

模型、理论和方法

针对MAE,或者MIM系列算法中,存在的两个问题,提出了两个解决方案:

  • 生成low-frequency重建目标
  • 使用更加保守的数据增强方法替代RR

image.png

生成Low-frequency重建目标

为了削弱模型学习到texture为主导的high-frequency细节信息,提出了一个新的目标生成器decoder,生成的目标依旧是RGB像素值,但是过滤掉了high-frequency分量。
具体而言,生成low-frequency目标分为如下三步:

  1. domain conversion from spatial to frequency(空间域到频率域的转换);

对于输入的图像,使用2D的离散傅里叶变换,将内容从空间域转换到频域,公式如下:
F D F T ( I i ) ( u , v ) = ∑ h = 0 H − 1 ∑ w = 0 W − 1 I i ( h , w ) e − i 2 π ( u h H + v w W ) F_{DFT}(I_i)(u,v)=\sum_{h=0}^{H-1}\sum_{w=0}^{W-1}I_i(h, w)e^{-i2\pi(\frac{uh}{H}+\frac{vw}{W})} FDFT(Ii)(u,v)=h=0H1w=0W1Ii(h,w)ei2π(Huh+Wvw)

  1. low-frequency components extraction(低频成分提取);

为了只获取图像的低频信息,使用如下公式对图像的频域。

  1. reconstruction target generation from frequency domain(频域重建目标生成).

更加保守的数据增强方案

为了更好的保留输入前景信息,没有修改高掩码方式,而是提出了一个更加保守的数据增强方案。
image.png
Simple Resized Crop(SRC),最先在AlexNet中被使用,具体做法是先讲最短边resize到输入大小,然后在两侧应用 4 像素的反射填充,最后随机裁剪一个输入大小的区域。
CenterCrop(CC),就是从图像中间裁剪一个固定大小的区域。
最后可以看到SRC的前景占比为22.1%,非常接近25%(掩码率为75%)。

实验与结论

方法应用

将PixMIM应用到MAE、ConvMAE和LSMAE上,比较它们之间的结果。在linear probe、object detection和semantic segmentation上取得了极佳的效果。
image.png
此外,为了更好可视化地查看模型之间的差异,对不同epoch下模型的性能进行了绘图,可以看到PixMIM的曲线都在原方法之上。
image.png

鲁棒性评估

通过在ImageNet的变体:ImageNet-Corruption,ImageNet-Adversarial,ImageNet-Rendition和ImageNet-Sketch上的测试结果来评估预训练模型的鲁棒性,因为这些数据集相对于ImageNet都引入了domain shifts。
image.png

形状偏差分析

image.png

消融实验

过滤高频分量

低频带宽 r r r对于结果的影响,可以看到,当bandwidth为40时,PixMIM相对于baseline在linear probe和segmentic上分别提升了1.2%和1.7%。较小的bandwidth会抛弃到图像中比较重要的信息,而较大的bandwidth无法有效地移除不重要地texture。
image.png

使用SRC

下图比较了不同数据增强方式下模型的表现。在MAE上,SRC相对于RRC在linear probe和semantic上都取得较好的提升。然而,在DeiTⅢ上,用 SRC 替换 RRC 会降低性能,因为它会降低裁剪图像的多样性并削弱模型的泛化能力。
在MIM,RRC会导致前景的丢失,通过后续CC(centercrop)的实验可以进一步验证这个结论。
image.png
下图展示了PixMIM中两个组件一起之后的效果。
image.png

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。在编写C程序时,需要注意变量的声明和定义、指针的使用、内存的分配与释放等问题。C语言中常用的数据结构包括: 1. 数组:一种存储同类型数据的结构,可以进行索引访问和修改。 2. 链表:一种存储不同类型数据的结构,每个节点包含数据和指向下一个节点的指针。 3. 栈:一种后进先出(LIFO)的数据结构,可以通过压入(push)和弹出(pop)操作进行数据的存储和取出。 4. 队列:一种先进先出(FIFO)的数据结构,可以通过入队(enqueue)和出队(dequeue)操作进行数据的存储和取出。 5. 树:一种存储具有父子关系的数据结构,可以通过中序遍历、前序遍历和后序遍历等方式进行数据的访问和修改。 6. 图:一种存储具有节点和边关系的数据结构,可以通过广度优先搜索、深度优先搜索等方式进行数据的访问和修改。 这些数据结构在C语言中都有相应的实现方式,可以应用于各种不同的场景。C语言中的各种数据结构都有其优缺点,下面列举一些常见的数据结构的优缺点: 数组: 优点:访问和修改元素的速度非常快,适用于需要频繁读取和修改数据的场合。 缺点:数组的长度是固定的,不适合存储大小不固定的动态数据,另外数组在内存中是连续分配的,当数组较大时可能会导致内存碎片化。 链表: 优点:可以方便地插入和删除元素,适用于需要频繁插入和删除数据的场合。 缺点:访问和修改元素的速度相对较慢,因为需要遍历链表找到指定的节点。 栈: 优点:后进先出(LIFO)的特性使得栈在处理递归和括号匹配等问题时非常方便。 缺点:栈的空间有限,当数据量较大时可能会导致栈溢出。 队列: 优点:先进先出(FIFO)的特性使得
Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),可运行高分资源 Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。在编写C程序时,需要注意变量的声明和定义、指针的使用、内存的分配与释放等问题。C语言中常用的数据结构包括: 1. 数组:一种存储同类型数据的结构,可以进行索引访问和修改。 2. 链表:一种存储不同类型数据的结构,每个节点包含数据和指向下一个节点的指针。 3. 栈:一种后进先出(LIFO)的数据结构,可以通过压入(push)和弹出(pop)操作进行数据的存储和取出。 4. 队列:一种先进先出(FIFO)的数据结构,可以通过入队(enqueue)和出队(dequeue)操作进行数据的存储和取出。 5. 树:一种存储具有父子关系的数据结构,可以通过中序遍历、前序遍历和后序遍历等方式进行数据的访问和修改。 6. 图:一种存储具有节点和边关系的数据结构,可以通过广度优先搜索、深度优先搜索等方式进行数据的访问和修改。 这些数据结构在C语言中都有相应的实现方式,可以应用于各种不同的场景。C语言中的各种数据结构都有其优缺点,下面列举一些常见的数据结构的优缺点: 数组: 优点:访问和修改元素的速度非常快,适用于需要频繁读取和修改数据的场合。 缺点:数组的长度是固定的,不适合存储大小不固定的动态数据,另外数组在内存中是连续分配的,当数组较大时可能会导致内存碎片化。 链表: 优点:可以方便地插入和删除元素,适用于需要频繁插入和删除数据的场合。 缺点:访问和修改元素的速度相对较慢,因为需要遍历链表找到指定的节点。 栈: 优点:后进先出(LIFO)的特性使得栈在处理递归和括号匹配等问题时非常方便。 缺点:栈的空间有限,当数据量较大时可能会导致栈溢出。 队列: 优点:先进先出(FIFO)的特性使得

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值