100张图训练1小时,照片风格随意变,文末有Demo试玩|SIGGRAPH 2021

AgileGAN是一种新技术,能将普通照片转换成各种风格的艺术作品,包括卡通、手绘、雕塑等,且仅需少量训练数据即可达到高清晰度的效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

照片变画像,现在已经有了最新的技术。

正常的人物照片:

可以自动变成卡通电影里的角色,眼睛大大的、皮肤看上去滑滑的,还保留了不少原本的人物特征:

也可以变成武侠游戏风格,女生下巴尖尖,男生头发飘逸,仿佛下一秒就要去修仙了:

或者变成油画里的人物,面部轮廓依旧饱满,但光影线条和质感却传达了一种文艺复兴的气质:

更特别的风格也不成问题,比如先看这两张人物照片:

可以变成手绘,睫毛、嘴唇、头发,每个细节的笔触都异常真实:

变成雕塑,看上去就像在博物馆拍的照片一样:

或者素描,看上去仿佛走进了美术学院的教室,连右图人物的镂空耳坠都可以翔实地刻画出来:

变身人偶娃娃,立体感相当强,简直像网店的精修商品图:

无论男女老幼、肤色发型相貌特征如何,都能实现非常好的效果:

创造这些变化的模型,名叫AgileGAN,字节跳动海外技术团队与新加坡南洋理工大学联合出品,已经中选图形学顶会SIGGRAPH 2021

让模型生成如此精美、高清的图片,是不是要堆海量的数据和算力?

非也。

训练一个新的风格,仅仅需要男女各100张左右的图片做训练集,在英伟达Tesla V100上训练一个小时,就可以获得生成1024×1024高清晰度图片的模型。

甚至借此模型,你可以实现丰富的照片编辑功能。比如这样的原图:

可以修改生成照片的光影效果,拍照时逆光也可以拯救:

甚至修改生成照片的角度:

这项技术的研发团队也正在计划将其应用到抖音、飞书等产品上,或许不久的将来,你就可以在这些App上获得更有趣的互动体验了。

不过一个好消息是,现在,AgileGAN已放出了Demo(链接见文末),你也可以用自己的、亲朋的、idol 的照片来试试啦。

怎样的GAN才能「画出」如此逼真的效果?

生成这些效果的模型由两个部分组成:

前端是分层变分自编码器映射(hVAE)输入图片到StyleGAN2隐空间;后端是解码的风格化生成器。

两部分都基于预训练的StyleGAN2——一种可以生成各种人脸的GAN模型。

StyleGAN2生成的各种人脸

StyleGAN2的图像生成有两个隐空间,一个是具有标准高斯分布的Z空间;另一个是通过一系列非线性映射得到W空间,W空间是解耦的,但是分布非常复杂。通常,业界研发人员在用StyleGAN2重建一张用户输入的图片时,一般会选用W空间。

但这次,研究团队发现如果能让图片影射的隐空间的分布,符合原始的StyleGAN2隐空间的高斯分布,在生成各种风格图片时,就可以减少噪声,生成更好看的图片。

为了到达这样的目的,团队舍弃了常用的W空间,从而选择具有标准高斯分布的Z空间;并且增加了它的分层维度去表达更加复杂的图片。

之后,他们又利用变分表达去模拟分布,然后训练这样的前端分层变分自编码器,这个编码器的后端则是预训练的StyleGAN2的生成器。

为了更好地生成用户属性特征,他们还提出了一种属性感知生成器,在StyleGAN2的预训练模型基础上,微调了生成器,让它能够生成卡通、手绘等各种不同的风格。并采用了一种动态停止策略,以避免过度拟合小型训练数据集。

这两个训练阶段是可以独立执行的,可以并行训练。

这里引入的分层变分自动编码器,结构如图:

最后,如何衡量AgileGAN的生成效果?

从两个角度来评价,一是「美不美」,是否是能满足用户的偏好;二是「像不像」,生成的图片需要像美术风格。

为了判断「美不美」,研究团队找到了100名吃瓜群众,为每人展示随机的10张生成的图片,生成他们的模型包括AgileGAN及此前几个知名模型生成的图片,让他们选出效果最好的图片。

结果,正如下表中间一列所示,57.9%的选票都投给本作AgileGAN。

而为了验证「像不像」,他们评估了几个GAN模型的Fréchet Inception Distance(FID)——一种常见的给GAN打分的方法,比较美术风格和生成图像的神经网络特征分布,分数越低,图像越「保真」,AgileGAN仍然是最高保真的模型。

字节跳动智能创作北美团队出品

这项成果的研究者来自字节跳动和新加坡南洋理工大学,其中几位字节跳动研发同学来自base在北美山景城的智能创作团队——就是那个在抖音、TikTok创作各种爆款特效的技术团队。

AgileGAN的实现经历了长达8个月的过程,他们最初的灵感来源于在社交网站看到的一组绘画作品,一位艺术家将各种人像画成了卡通画。这些作品不仅具有卡通画的夸张表达,有圆圆的脑袋、大大的眼睛和飘逸的头发,而且恰到好处地保留了原本人像的面部特征,有的鼻梁高挺,有的眼窝深邃。

他们想到,如果让算法来生成类似的效果,就可以为用户提供更好、更有趣的互动体验。

因此,他们尝试了SEANCycleGANMUNIT以及3D warpping等多种不同的方案,在每种不同思路上做了大量优化和调试,不断寻求业界最先进、最实用的解决方案,在核心的效果问题上攻坚克难,最终选择了Toonify与StyleGAN相结合的思路,并发现了其中的一些核心的局限性,创造性的解决了问题,让模型产出最极致的效果。今年8月,AgileGAN也会在图形学顶会SIGGRAPH 2021上进行展示。

除了AgileGAN之外,base在山景城和洛杉矶两座城市的字节跳动智能创作团队成员们还做过包括3D、虚拟人、图像生成在内的各种与人物形象相关的技术。

比如,变身油画框里的蒙娜丽莎:

或者给人物戴上虚拟的假发,如果你仔细看,会发现这些动态的假发不仅造型逼真,还能契合场景中真实的光线与阴影。

还有「变身美女」特效道具,让用户看到性转的自己长什么样子:

换个造型,「光头挑战」:

「动态老照片」道具,让多年前的你也可以动起来:

让静态的照片动起来,就像霍格沃兹墙上的画像一样,还能随着人的动作一起舞蹈:

这些多种多样的效果都会应用在抖音、TikTok等应用上,为用户带来更丰富与新奇的体验。


 相关链接 

(长按复制到浏览器打开)

论文地址:

https://guoxiansong.github.io/homepage/paper/AgileGAN.pdf

项目官方网站:

https://guoxiansong.github.io/homepage/agilegan.html

在线Demo:

http://www.agilegan.com/

### 下载ImageNet数据集子集 为了获取包含100图片的ImageNet数据集子集,可以按照以下方式操作: 访问ImageNet官方网站提供的URL下载功能[^1]。无需账号登录即可免费下载所需像。具体步骤如下: - 访问[ImageNet官方网址](http://www.image-net.org/)。 - 使用网站上的SEARCH框来查找所需的类别(例如,“tree”),这会显示一系列属于该类别的像链接列表。 - 或者依据特定的WordNet ID直接定位到某个具体的类别页面进行批量下载。 由于单次请求可能无法精确限定为正好100图片的数量,建议先选取一个小范围内的synsets作为目标对象,再从中筛选出符合条件的具体实例直到满足数量需求为止。另外需要注意的是部分URL可能存在失效情况,因此在实际收集过程中应当验证每个链接的有效性并适当补充缺失项以确保最终样本量达到预期标准。 对于程序化自动化的实现方案,则可以通过编写脚本来完成上述过程中的重复劳动环节。下面给出一段Python代码片段用于示范如何利用requests库抓取指定数目图片链接地址,并保存至本地文件夹内: ```python import requests from bs4 import BeautifulSoup import os def fetch_image_urls(query, num_images=100): base_url = "http://www.image-net.org/search?q=" search_url = f"{base_url}{query}" response = requests.get(search_url) soup = BeautifulSoup(response.text, 'html.parser') img_tags = soup.find_all('img', limit=num_images) urls = [img['src'] for img in img_tags] while len(urls) < num_images: # 如果初次未能获得足够的有效链接,则尝试其他策略或扩大查询范围 pass return urls[:num_images] def download_images(image_urls, output_dir='./images'): if not os.path.exists(output_dir): os.makedirs(output_dir) for i, url in enumerate(image_urls): try: resp = requests.get(url, stream=True) ext = '.jpg' filename = f'{output_dir}/{i+1:03d}{ext}' with open(filename, 'wb') as out_file: shutil.copyfileobj(resp.raw, out_file) del resp except Exception as e: print(f"Failed to download {url}. Error: ", str(e)) if __name__ == '__main__': query_term = input("Enter your desired category name:") image_links = fetch_image_urls(query=query_term) download_images(image_links) ``` 这段代码实现了两个主要的功能函数:`fetch_image_urls()`负责从网页源码解析得到一定数量的目标图片链接;而`download_images()`则接收这些链接并将对应的二进制流写入磁盘形成实体文件。注意这里简化处理了一些细节问题比如异常捕获机制以及当首次检索结果不足时应采取何种措施继续寻找剩余资源等复杂情形下的应对逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值