【研究生】英伟达又火了一篇图像转换论文,我们竟然用来吸猫

2023-11-08 18:10

本文主要是介绍【研究生】英伟达又火了一篇图像转换论文,我们竟然用来吸猫,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

转载于 机器之心

英伟达又出 GAN 新研究了。小编拿出珍藏猫片试了试,于是好好的一篇新研究报道变成了大型吸猫现场……快来吸猫!

借助图像数据集,无监督图像到图像转换方法可以将给定类的图像映射到另一类的模拟图像,例如 CycleGAN 将马转换为斑马。虽然这种模型非常成功,但在训练时需要大量源类和目标类的图像,也就是说需要大量马和斑马的图像。而这样训练出来的模型只能转换斑马与马,作者认为这极大限制了这些方法的应用。

因为人类能够从少量样本中抓住新事物的本质,并「想象」出它们在不同情况下的状态。作者从中获得启发,探索一种 few-shot 无监督的图像到图像迁移算法,这种算法适用于测试时仅由少量样本图像指定的以前没见过的目标类。

通过对抗训练方案和新网络设计的结合,该模型能够实现 few-shot 图像生成。此外,在经过大量实验验证以及与基准数据集上的几种基线方法比较后,作者证实了所提出框架的有效性。

试用效果

既然效果这么棒,小编忍不住拿出了家崽的百天照试试效果。

  • Demo 试用地址:https://nvlabs.github.io/FUNIT/petswap.html 

下面这张照片展示了我家小溪溪的日常——丧。(微笑脸)

我把这张照片上传到 demo 页面,经过后台系统的一系列神操作之后,嗯,我看到了一堆丧丧的动物。(苦笑脸)

第 2 张的小狗狗是溪溪的犬版吗?表情一毛一样!我的天呐~

再试一下,下面这张照片也是溪溪的经典表情——严肃脸,严肃中带着一点惊讶,惊讶中还有一点彷徨……(此处省略表情描述 500 字)。

嗯哼,系统生成的图如下,一堆目瞪口呆.jpg。宝宝们为啥不开心呀?

突然想起来,溪溪还有一张 wink 照呢,老母亲私以为神似刘昊然(请迷妹们不要打我)……

不知道是不是因为背景太复杂(溪溪害羞钻进了被子里),生成的图效果似乎不太好。看第 15 张,小猫有一只眼完全闭上了,但是溪溪可没有闭眼哦。不过溪溪小警长的小白爪在生成的每张图中都有体现,虽然看不太出是爪子还是耳朵还是别的什么……

图像到图像的转换到底怎么了?

上面英伟达的 FUNIT 已经非常强了,那么一般的图像转换又有什么问题呢?说到图像到图像的转换(image-to-image translation),我们最熟悉的可能就是 CycleGAN,它可以将某种图像转换为另一种,例如将马转换为斑马。

这样看起来非常有意思,但却有一个很大的限制。如果我们希望完成马和斑马之间的转换,那么要弄一堆马的照片和一堆斑马的照片,再训练 CycleGAN 模型就能获得两类图像之间的转换关系。虽然马和斑马之间的图像不需要成对匹配,但这样是不是还有一些复杂?感觉不能像人那样自由「想象」?

其实人类拥有出色的泛化能力,当看到从未见过的动物照片时,我们可以轻易想象出该动物不同姿态的样子,尤其是当我们还记得该姿态下的其它动物长什么样子。这是一种很强的泛化能力,那么机器学习也能做到这一点吗?

虽然当前无监督图像到图像转换算法在很多方面都非常成功,尤其是跨图像类别的复杂外观转换,但根据先验知识从新一类少量样本中进行泛化的能力依然无法做到。具体来说,如果模型需要在某些类别上执行图像转换,那么这些算法需要所有类别的大量图像作为训练集。也就是说,它们不支持 few-shot 泛化。

虽然无监督图像到图像方法取得了显著成功,但总体而言有以下两方面的限制:

  • 其一,这些方法通常需要在训练时看到目标类的大量图像;

  • 其二,用于一个转换任务的训练模型在测试时无法应用于另一个转换任务。

为了解决这些限制,作为缩小人类和机器想象能力之间差距的一种尝试,英伟达的研究者提出一种 Few-shot 无监督图像到图像转换(FUNIT)框架。该框架旨在学习一种新颖的图像到图像转换模型,从而利用目标类的少量图像将源类图像映射到目标类图像。也就是说,该模型在训练阶段从未看过目标类图像,却被要求在测试时生成一些目标类图像。

为了更好地理解这种新颖的图像转换,作者在下图展示了动物面部的 few-shot 转换结果:

如上所示,其中 y_1 和 y_2 是测试阶段可用的目标类 few-shot 样本图像、x 是源类输入图像,而 x bar 就是源类到目标类的转换结果了。我们可以看出来,x 和 x bar 之间的「神态」都非常相似。

英伟达的 Few-Shot 解决方案

接着,研究者假设人们的 few-shot 生成能力是由过去的视觉体验发展而来—如果一个人过去看过很多不同对象类的图像,则能够更好地想象出新对象类的图像。基于此假设,他们使用包含众多不同对象类图像的数据集来训练 FUNIT 数据集,以模拟过去的视觉体验。具体来说,他们训练该模型,从而将其中一类的图像转换为另一类(利用该类的少量样本图像)。

他们假设通过学习提取用于转换任务的少量样本图像的外观模式,该模型得到了一个可泛化的外观模式提取器,在测试时,该提取器可以在 few-shot 图像到图像转换任务中应用于未见过类别的图像。

在实验部分,他们给出了实验性证据,即 few-shot 转换性能会随着训练集中类的增加而提升。

研究者提出的框架基于生成对抗网络(GAN)。通过对抗训练方案和新网络设计的结合,他们实现了预期的 few-shot 图像到图像转换能力。

此外,在经过三个数据集的实验验证以及与其他基线方法在一些不同的性能指标上进行比较之后,他们证实了所提框架的有效性,并且该框架可应用于 few-shot 图像分类任务。通过在 few-shot 类图像模型生成的图像上训练分类器,FUNIT 框架性能优于当前基于特征错觉(feature hallucination)的最佳 few-shot 分类方法。

FUNIT 框架

为了训练 FUNIT,研究者使用一组对象类图像(如不同动物的图像)并将其称为源类。他们不假设任何两类之间都存在可以配对的图像(也就是说没有两种不同物种的动物是完全相同的姿态)。他们使用源类图像训练多类无监督图像到图像转换模型。在测试阶段,他们为模型提供少量新对象类(称为目标类)图像。该模型利用非常少的新目标类图像将任何源类图像转换成目标类的模拟图像。当他们为同一模型提供少量新的不同目标类图像时,该模型必须将任何源类图像转换成这一新的不同目标类的模拟图像。

FUNIT 框架包含一个条件式图像生成器 G 和一个多任务对抗判别器 D。与现有无监督图像到图像转换框架中输入一个图像的条件式图像生成器不同,研究者提出的生成器 G 能够同时输入内容图像 x 和一组 K 个类别的图像 {y_1, ..., y_K},并通过

输出图像 x bar。

研究者假设内容图像属于对象类 c_x,而每一个 K 类图像属于对象类 c_y。一般来说,K 值很小,对象类 c_x 区别于 c_y。他们将 G 称为 few-shot 图像转换器。

图 1:训练。训练集包含来自几种对象类别(源类别)的图像。研究者训练一个模型在这些源对象类别图像之间进行转换。

部署。研究者向训练得到的模型展示极少的目标类别图像,尽管模型在训练期间从未见过来自目标类别的任何图像,但这已经足够使其将源类别图像转换为目标类别的类似图像。注意,FUNIT 生成器接收两个输入:1)一幅内容图像和 2)一组目标类别图像。它的目标是生成与目标类别图像类似的输入图像的转换。

如图 1 所示,G 将一个输入内容图像 x 映射到一个输出图像 x bar,这样一来,x bar 看起来就会像是一幅属于源类别 c_y 的图像,x bar 和 x 结构相似。让 S 和 T 分别表示源类集和目标类集。在训练期间,G 学习在两个任意采样的源类别 c_x, c_y∈ S(c_x ≠ c_y)之间进行图像转换。测试期间,G 从一个未见过的目标类别 c ∈ T 中提取几幅图像作为类别图像,并将从任何一个源类采样的图像映射到目标类别 c 的类似图像。

FUNIT 的学习过程

如果想要了解 FUNIT 的学习过程,那么了解它的目标函数及组成模块是最好不过了。如前所述,整个 FUNIT 框架主要包含 Few-shot 图像转换器和多任务对抗判别器。其中 Few-shot 图像转换器 G 又包含内容编码器 E_x、类别编码器 E_y 和解码器 F_x,通过这些模块,前面方程 (1) 就可以改写为:

其中 X bar 就是我们希望生成的图像。如果构建了转换器 G 和判别器 D,那么整个 FUNIT 框架就能通过类似 GAN 的方法得到训练,即解极小极大最优化问题:

其中 L_GAN、L_R 和 L_F 分别是 GAN 的损失函数、图像内容重构损失和特征匹配损失,它们共同构建了整个模型的目标函数。下面简要地展示了这三种损失函数的计算公式,当然在原论文中,这三个损失函数都有详细的解释,读者可参考原论文理解。

如上在 GAN 的损失函数中,D 的上标表示不同的目标类别。整个损失函数仅使用对应类别的二元预测分进行计算。

如上很容易看出来,重构损失 L_R 主要会帮助 G 学习转换模型,原始图像要和转换的图像相近一点比较好。

最后是特征匹配损失,它会为整个训练提供正则化效果。其中 D_f 为特征抽取器,它会从输出图像与图像类别中抽取特征。

实验

根据目标类别中的图像在训练过程中是否可用,研究者将基线模型分为两类:公平(不可用)和不公平(可用)。

如表 1 所示,本文中提出的 FUNIT 框架在 Animal Faces 和 North American Birds 数据集上的所有性能指标上都优于 few-shot 无监督图像到图像转换任务基线。

表 1:与「公平」和「非公平」基线的性能比较结果。↑表示值越大越好,↓表示值越小越好。

从表中还可以看出,FUNIT 模型的性能与测试时可用目标图像 K 的数量呈正相关。

研究人员可视化了 FUNIT-5 few-shot 无监督图像到图像转换方法得到的结果(如下图 2 所示)。结果显示,FUNIT 模型可以成功地将源类图像转换为新类的类似图像,输出的图像非常逼真。

图 2:利用本文中的 few-shot 无监督图像到图像转换方法得到的结果。

该结果利用 FUNIT-5 模型计算得到的。从上到下依次是动物面部、鸟、花和食物数据集得到的结果。研究者为每个数据集训练一个模型。y_1、y_2 是 5 个随机采样类别图像中的两个,x 是输入内容图像,x¯表示转换输出。结果显示,尽管在训练过程中没有见过任何来自目标类的图像,但 FUNIT 能够在困难的 few-shot 设置下生成可信的转换输出。从图中可以看出,输出图像中的对象与输入中的对象姿态类似。

下图 3 提供了几种基线模型与 FUNIT 在 few-shot 图像到图像转换任务中的性能比较。由于基线模型不是为 few-shot 图像转换任务设计的,它们在如此具有挑战性的任务中表现无法令人满意。

图 3:Few-shot 图像到图像转换性能的可视化比较。上图中的 6 列图像从左到右依次是输入内容图像 x、两个输入目标类图像 y_1、y_2、从「不公平」及「公平」StarGAN 基线得到的转换结果及本文中的框架得到的结果。

研究人员还让人类受试者参与了生成图像的评价,受试者偏好得分如下图所示(表中数字为喜欢 FUNIT 生成结果的用户所占百分比)。

表 2:受试者用户偏好得分。

结果表明,无论是与「公平」还是「不公平」的基线相比,受试者都认为 FUNIT-5 生成的结果更加可信。

研究人员还分析了在训练时见到的对象类别数发生变化时模型性能的变化(设定为一个样本,即 FUNIT-1)。如图所示,在转换准确率方面,性能与对象类别数呈正相关。这表明,在训练中看到的对象类别数越多,FUNIT 模型在测试中表现越好。

图 4:Few-shot 图像转换性能 vs. 在动物面部数据集上训练时见到的对象类别数。性能与训练期间见到的源对象类别数成正比。

研究者使用动物和鸟类数据集对 FUNIT 的 few-shot 分类性能进行了评估(结果如下图)。更确切地说,他们利用训练得到的 FUNIT 模型为每个 few-shot 类别生成 N 个图像,然后利用生成的图像训练分类器。

他们发现,与 Hariharan 等人提出的 few-shot 分类方法相比,利用 FUNIT 所生成图像训练得到的分类器性能更好。

表 3:在 5 种类别上的 few-shot 分类平均准确率。

最后,想要搞点事情的小伙伴们可以看看论文与实现呀。

论文:Few-Shot Unsupervised Image-to-Image Translation

  • 论文地址:https://arxiv.org/pdf/1905.01723.pdf

  • 实现地址:https://github.com/NVlabs/FUNIT


您还可以在以下平台找到我们

你点的每个在看,我都认真当成了喜欢

这篇关于【研究生】英伟达又火了一篇图像转换论文,我们竟然用来吸猫的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/csseky/article/details/106285273
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/371606

相关文章

Python使用FFmpeg实现高效音频格式转换工具

《Python使用FFmpeg实现高效音频格式转换工具》在数字音频处理领域,音频格式转换是一项基础但至关重要的功能,本文主要为大家介绍了Python如何使用FFmpeg实现强大功能的图形化音频转换工具... 目录概述功能详解软件效果展示主界面布局转换过程截图完成提示开发步骤详解1. 环境准备2. 项目功能结

使用Python实现网页表格转换为markdown

《使用Python实现网页表格转换为markdown》在日常工作中,我们经常需要从网页上复制表格数据,并将其转换成Markdown格式,本文将使用Python编写一个网页表格转Markdown工具,需... 在日常工作中,我们经常需要从网页上复制表格数据,并将其转换成Markdown格式,以便在文档、邮件或

Python将字符串转换为小写字母的几种常用方法

《Python将字符串转换为小写字母的几种常用方法》:本文主要介绍Python中将字符串大写字母转小写的四种方法:lower()方法简洁高效,手动ASCII转换灵活可控,str.translate... 目录一、使用内置方法 lower()(最简单)二、手动遍历 + ASCII 码转换三、使用 str.tr

Java如何将文件内容转换为MD5哈希值

《Java如何将文件内容转换为MD5哈希值》:本文主要介绍Java如何将文件内容转换为MD5哈希值的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java文件内容转换为MD5哈希值一个完整的Java示例代码代码解释注意事项总结Java文件内容转换为MD5

使用Java将实体类转换为JSON并输出到控制台的完整过程

《使用Java将实体类转换为JSON并输出到控制台的完整过程》在软件开发的过程中,Java是一种广泛使用的编程语言,而在众多应用中,数据的传输和存储经常需要使用JSON格式,用Java将实体类转换为J... 在软件开发的过程中,Java是一种广泛使用的编程语言,而在众多应用中,数据的传输和存储经常需要使用j

Java实现视频格式转换的完整指南

《Java实现视频格式转换的完整指南》在Java中实现视频格式的转换,通常需要借助第三方工具或库,因为视频的编解码操作复杂且性能需求较高,以下是实现视频格式转换的常用方法和步骤,需要的朋友可以参考下... 目录核心思路方法一:通过调用 FFmpeg 命令步骤示例代码说明优点方法二:使用 Jaffree(FF

C语言中的常见进制转换详解(从二进制到十六进制)

《C语言中的常见进制转换详解(从二进制到十六进制)》进制转换是计算机编程中的一个常见任务,特别是在处理低级别的数据操作时,C语言作为一门底层编程语言,在进制转换方面提供了灵活的操作方式,今天,我们将深... 目录1、进制基础2、C语言中的进制转换2.1 从十进制转换为其他进制十进制转二进制十进制转八进制十进

如何在Ubuntu上安装NVIDIA显卡驱动? Ubuntu安装英伟达显卡驱动教程

《如何在Ubuntu上安装NVIDIA显卡驱动?Ubuntu安装英伟达显卡驱动教程》Windows系统不同,Linux系统通常不会自动安装专有显卡驱动,今天我们就来看看Ubuntu系统安装英伟达显卡... 对于使用NVIDIA显卡的Ubuntu用户来说,正确安装显卡驱动是获得最佳图形性能的关键。与Windo

Pandas进行周期与时间戳转换的方法

《Pandas进行周期与时间戳转换的方法》本教程将深入讲解如何在pandas中使用to_period()和to_timestamp()方法,完成时间戳与周期之间的转换,并结合实际应用场景展示这些方法的... 目录to_period() 时间戳转周期基本操作应用示例to_timestamp() 周期转时间戳基

Python+wxPython构建图像编辑器

《Python+wxPython构建图像编辑器》图像编辑应用是学习GUI编程和图像处理的绝佳项目,本教程中,我们将使用wxPython,一个跨平台的PythonGUI工具包,构建一个简单的... 目录引言环境设置创建主窗口加载和显示图像实现绘制工具矩形绘制箭头绘制文字绘制临时绘制处理缩放和旋转缩放旋转保存编