CVPR 2023 | 超越MAE!谷歌提出MAGE:图像分类和生成达到SOTA!

CVPR 2023 | 超越MAE!谷歌提出MAGE:图像分类和生成达到SOTA!

CVPR 2023 | 超越MAE!谷歌提出MAGE:图像分类和生成达到SOTA!

转载自:机器之心

在一篇 CVPR 2023 论文中,来自 MIT 和谷歌的研究人员提出了一种全新的框架MAGE,同时在图像识别和生成两大任务上实现了 SOTA。

识别和生成是人工智能领域中的两大核心任务,如果能将二者合并到一个统一的系统中,这两个任务应该能实现互补。事实上,在自然语言处理中,像 BERT [1] 这样的模型不仅能够生成高质量的文本,还能够提取文本中的特征。

然而,在计算机视觉领域,目前的图像生成模型和识别模型大多是分开进行训练,没有充分利用这两个任务的协同作用。这主要是由于图像生成和图像识别的模型通常具有本质上的结构差异:图像生成的输入是低维度的特征或噪声,而输出是高维度的原始图像;与之相反,图像识别的输入是高维度的原始图像,而输出是低维度的特征。

最近,来自 MIT 和 Google Research 的研究人员提出了一种基于图像语义符掩码的表征学习方法,首次在一个统一的框架中实现了图像生成和表征学习,并在多个数据集上取得了 SOTA 表现。研究论文已被 CVPR 2023 接收,相关代码与预训练模型已开源。

www.zeeklog.com  - CVPR 2023 | 超越MAE!谷歌提出MAGE:图像分类和生成达到SOTA!

MAGE: MAsked Generative Encoder to Unify Representation Learning and Image Synthesis

论文地址:https://arxiv.org/abs/2211.09117

代码地址:https://github.com/LTH14/mage

在 CVPR 2022 上,MAE [2] 提出了一种基于图像掩码(MIM)的表征学习方法,并在多个子任务上取得了非常好的效果。在高达 75% 的掩码率下,MAE 可以重构出与原图语义十分贴合的图像,并借此让网络能够自监督地学习图像中的特征。然而,如图 1 所示, MAE 重建的图像虽然具有与原始图像相似的语义信息,但会出现严重的模糊与失真问题。类似的问题也出现在所有基于 MIM 的表征学习方法中。同时,目前的生成模型,不管是扩散模型还是 GAN,都缺乏提取高质量图像特征的能力。

www.zeeklog.com  - CVPR 2023 | 超越MAE!谷歌提出MAGE:图像分类和生成达到SOTA!

图 1:MAE 与 MAGE 重构对比

方法概述

针对上述问题,本文作者提出了 MAGE(Masked Generative Encoder),首次实现了统一的图像生成和特征提取模型。与MIM直接作用于图像的掩码方法不同,MAGE 提出了基于图像语义符的 masked image token modeling 方法。如图所示,MAGE 首先使用 VQGAN [3] 编码器将原始图像转换为离散的语义符。之后,MAGE 对其进行随机掩码,并使用基于 transformer 的 encoder-decoder 结构对掩码进行重构,重构后的语义符可以通过 VQGAN 解码器生成原始图像。通过在训练中使用不同的掩码率,MAGE 可以同时进行生成模型(接近 100% 掩码率)和表征学习(50%-80% 掩码率)的训练。如图 1 所示,MAGE 重建出的图像不仅具有与原始图像一致的语义信息,还能够同时保证生成图像的多样性与真实性。

www.zeeklog.com  - CVPR 2023 | 超越MAE!谷歌提出MAGE:图像分类和生成达到SOTA!

图 2:MAGE 结构图

实验结果

MAGE 在多个图像生成与图像识别任务上都达到或超过了 SOTA。

www.zeeklog.com  - CVPR 2023 | 超越MAE!谷歌提出MAGE:图像分类和生成达到SOTA!

在 ImageNet 的无监督图像生成任务中,MAGE 的 FID 从之前的 > 20 降至 7.04,甚至达到了有监督图像生成的水准(有监督 Latent Diffusion 在 ImageNet 上的 FID 为 3.60):

www.zeeklog.com  - CVPR 2023 | 超越MAE!谷歌提出MAGE:图像分类和生成达到SOTA!
www.zeeklog.com  - CVPR 2023 | 超越MAE!谷歌提出MAGE:图像分类和生成达到SOTA!

图3:MAGE 无监督图像生成样例

MAGE 还能够进行各类图像编辑工作,包括 image inpainting、outpainting、uncropping:

www.zeeklog.com  - CVPR 2023 | 超越MAE!谷歌提出MAGE:图像分类和生成达到SOTA!
www.zeeklog.com  - CVPR 2023 | 超越MAE!谷歌提出MAGE:图像分类和生成达到SOTA!
www.zeeklog.com  - CVPR 2023 | 超越MAE!谷歌提出MAGE:图像分类和生成达到SOTA!
www.zeeklog.com  - CVPR 2023 | 超越MAE!谷歌提出MAGE:图像分类和生成达到SOTA!

图 4:MAGE 图像编辑样例

在表征学习方面,MAGE 在 ImageNet linear probing、少样本学习、迁移学习等任务中,相较于目前的 MIM 方法有了大幅提升,并且可以达到或超过目前最优的自监督学习方法的水平。

www.zeeklog.com  - CVPR 2023 | 超越MAE!谷歌提出MAGE:图像分类和生成达到SOTA!
www.zeeklog.com  - CVPR 2023 | 超越MAE!谷歌提出MAGE:图像分类和生成达到SOTA!

结语

本文旨在将图像生成与表征学习统一起来。为此,本文作者提出了 MAGE,一种基于图像语义符掩码的自监督学习框架。该框架简洁、高效,并首次在图像生成和表征学习上都达到或超越了 SOTA 的表现。感兴趣的读者可以查看论文原文,以了解更多研究细节。

参考文献:

[1] Jacob Devlin, Ming-Wei Chang, Kenton Lee, and Kristina Toutanova. Bert: Pre-training of deep bidirectional transformers for language understanding. arXiv preprint arXiv:1810.04805, 2018.

[2] Kaiming He, Xinlei Chen, Saining Xie, Yanghao Li, Piotr Dollar, and Ross Girshick. Masked autoencoders are scalable ´ vision learners. In Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition, pages 16000– 16009, 2022.

[3] Patrick Esser, Robin Rombach, and Bjorn Ommer. Taming transformers for high-resolution image synthesis. In Proceedings of the IEEE/CVF conference on computer vision and pattern recognition, pages 12873–12883, 2021.

Read more

ES6学习笔记13 Iterator 和 for...of 循环

ES6学习笔记13 Iterator 和 for...of 循环

Iterator接口简介 遍历器(Iterator)是一种接口,为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署 Iterator 接口,就可以完成遍历操作(即依次处理该数据结构的所有成员)。遍历器接口可供for...of使用,循环遍历某种数据结构 Iterator 的遍历过程: (1)创建一个指针对象,指向当前数据结构的起始位置。也就是说,遍历器对象本质上,就是一个指针对象。 (2)第一次调用指针对象的next方法,可以将指针指向数据结构的第一个成员。 (3)第二次调用指针对象的next方法,指针就指向数据结构的第二个成员。 (4)不断调用指针对象的next方法,直到它指向数据结构的结束位置。 每一次调用next方法,都会返回数据结构的当前成员的信息。具体来说,就是返回一个包含value和done两个属性的对象。其中,value属性是当前成员的值,done属性是一个布尔值,表示遍历是否结束。 下面是模拟next方法返回值的例子 var it = makeIterator(['a', 'b']); it.next(

By Ne0inhk
ES6学习笔记14 Generator 函数

ES6学习笔记14 Generator 函数

简介 Generator 函数有多种理解角度。语法上,首先可以把它理解成,Generator 函数是一个状态机,封装了多个内部状态。 执行 Generator 函数会返回一个遍历器对象,也就是说,Generator 函数除了状态机,还是一个遍历器对象生成函数。返回的遍历器对象,可以依次遍历 Generator 函数内部的每一个状态。 形式上,Generator 函数是一个普通函数,但是有两个特征。一是,function关键字与函数名之间有一个星号;二是,函数体内部使用yield表达式,定义不同的内部状态。 function* helloWorldGenerator() { yield 'hello'; yield 'world'; return 'ending'; } var hw = helloWorldGenerator(); 调用 Generator 函数后,该函数并不执行,返回的也不是函数运行结果,

By Ne0inhk
ES6学习笔记15 Generator 函数的异步应用

ES6学习笔记15 Generator 函数的异步应用

异步 所谓”异步”,简单说就是一个任务不是连续完成的,可以理解成该任务被人为分成两段,先执行第一段,然后转而执行其他任务,等做好了准备,再回过头执行第二段。 回调函数 JavaScript 语言对异步编程的实现,就是回调函数。所谓回调函数,就是把任务的第二段单独写在一个函数里面,等到重新执行这个任务的时候,就直接调用这个函数。回调函数的英语名字callback,直译过来就是”重新调用”。 fs.readFile('/etc/passwd', 'utf-8', function (err, data) { if (err) throw err; console.log(data); }); 上述读取文件的函数中,第三个参数就是回调函数,等到读取结果返回后,它才会执行 Generator函数 传统的编程语言使用”协程”来解决异步编程问题,所谓协程,意思是多个线程互相协作,完成异步任务。

By Ne0inhk
二分查找、插值查找、斐波那契查找

二分查找、插值查找、斐波那契查找

1 二分查找 在有序表中,取中间记录作为比较对象,将其与给定值相比较,若其等于给定值,则查找成功;若其小于给定值,则在中间记录的右半区继续查找;若其大于给定值,则在中间记录的左半区继续查找。不断重复以上过程,直到查找成功或无匹配记录。 使用该查找方法的前提条件在于,线性表中的数据必须有序,且必须采用顺序存储的方式。 var array = [1,2,3,4,5,6,7,8,9] function search(value){ let low = 0, high = array.length - 1; let mid; while (low <= high){ mid = parseInt((low + high)/2); if

By Ne0inhk