程序员的魔法——用Masking GAN让100,000人都露出灿烂笑容

简介: 本文使用Masking GAN来对静态的图像中的人物图像进行处理,使其都露出灿烂笑容,堪称魔法。每个程序员都是一个魔法师,你玩过的魔法是什么呢?欢迎留言秀出各自的魔法。

64e1583235d1cc54121d5212b58b0e7203fed78a

继卷积神经网络(CNN)掀起深度学习的浪潮后,生成对抗网络(GAN)逐渐成为了计算机视觉领域的另一重点关注的神经网络。本文作者于一年前开始第一次尝试使用GAN来完成一些实验,但都会存在一个问题,那就是模型很难训练以及模型的结果不好评估。尽管存在上述的这些问题,GAN仍然在深度学习领域中占据一席之地,这是因为GAN不同于经典的机器学习任务,它能够给许多问题提供新的解决思路。

操作人脸属性(年龄、性别、表情)是一个最著名的语义处理问题。目前市面上有许多这样的应用客户端,大都能够在拍照后更改面部表情。实现这一操作的方法多种多样,但在我看来,GAN是表现最优的方法。

81efd219c499e843eb5c545ac971b19a8e110da9

上图选择的这些例子强调了一个问题——GAN也会改变无关的对象。如果你想裁剪一个图像部分,然后对部分图像进行修改后再粘贴回来,那样可能会与周围的背景无法很好地融合,此外这样操作起来也很困难。本文将针对这个问题,探讨解决方法和相关细节。

如何操作?

一种方法是训练另外一个分割模型,可以使用这个模型来生成一个分割掩码,并与生成图像块匹配(比如这篇文献)。当然,收集这样的标签是困难的,此外还必须假设应用语义变化后对象的形状不会发生改变。

另外的一种潜在方法是使用恒等损失函数约束生成器,迫使生成器减少变化。

本文尝试结合上述两种思想来设计一个实验模型,该模型具有以下特点:

  • 使用内置分段的生成器结构;
  • 通过分割掩码将原始图像与新的图像块混合;
  • 整个网络的训练过程是个端到端的过程;
  • 使用L1恒等损失约束生成器并减少改变;

aae4af211ef6ccab71a6b6001afe2306e89fb729

上图是方案框图,期待看到该模型制作出完美的掩膜。

工作情况如何?

97db4ee2dcb96c785b9f33ce3cb50c624f90628f

上图是挑选出来的一些结果样本,可以看到表现都还不错。在总的数据集中,超过80%及以上的图像表现都足够好。

此外,实验过程中还注意到了一些问题:

  • 如果图像中一个人已经是微笑时,那么它就不需要做出任何的改变;
  • 模型在处理一些极端的头角度时候表现较差;
  • 模型有时候对一些不相关部分仍进行了操作;

2a3c4ef8984ebf95ce0e1993ba0efd222ed6047e

从上图可以看到,随着训练的进行,生成器能产生更多的变化。

在最初的迭代周期里,生成器会绘制出越来越逼真的图像。起初,脸部分割掩码近乎完美,但经过一段时间后,模型的结果开始产生显著变化,比如在上图中,模型改变了头发。

一些想法

对上述这种行为的直接感受是一旦生成器开始生成真实的面孔,它就迫使判别器忽略表情并集中于其他区域(微笑停止是主要特征)。

另外一种解释可能是判别器过拟合了(尽管训练集含有十万左右的图像),使用更强的正则化实验可能有助于更好地理解它。

在其它数据集(如马对斑马)上的实验表明了同样的注意力转移现象,生成器最终改变了整幅图像。

实现注意事项

本文实验中应该注意以下几点:

  • 使用CycleGAN方式训练模型;
  • 使用校准后的CelebA数据集;
  • 使用PyTorch框架

使用3GB内存的GPU训练4到5天就可以重现本文实验结果(时间评估是基于GPU为GTX1080),本文项目地址:https://github.com/tgeorgy/mgan

作者信息

Georgiy Trofimov,机器学习工程师。

Linkedin: https://www.linkedin.com/in/georgtrof/

本文由北邮@爱可可-爱生活老师推荐,阿里云云栖社区组织翻译。

文章原标题《How to make 100,000 people smile?》,作者:Georgiy Trofimov,译者:海棠,审阅:。

文章为简译,更为详细的内容,请查看原文

 

相关文章
|
物联网 机器人 Swift
Java 将Map的toString格式字符串转为 Map
Java 将Map的toString格式字符串转为 Map
1825 0
Java 将Map的toString格式字符串转为 Map
|
7月前
|
人工智能 安全 Java
先收藏|OWASP Top10 第二坑:Java开发踩过的配置漏洞
OWASP 2025榜单显示,“安全配置错误”高居第二,100%被测Java应用中招,漏洞超71.9万次!本文揭露6大典型配置风险:默认账户未改、Swagger未禁用、报错信息裸奔、云服务权限失控、安全头缺失、密钥硬编码,并附真实案例与修复指南。(239字)
|
6月前
|
人工智能 自然语言处理 安全
【详细版教程】OpenClaw 2.6.2 Windows10 部署完整教程
OpenClaw(小龙虾)是专为Windows10优化的本地AI智能体框架,支持一键部署、零代码配置,可跨软件自动执行文件整理、邮件发送、浏览器操作等任务。数据完全本地运行,保障隐私安全,10分钟即可搭建属于你的AI数字员工。
|
存储 JSON Java
淘宝店铺全量商品接口实现:从店铺解析到批量采集技术方案
本文介绍了淘宝店铺商品数据采集的技术实现方案,涵盖店铺页面解析、商品分页遍历及反爬策略应对。内容聚焦于合规性要求与核心技术难点,提供基于Python的实战代码,实现高效、稳定且符合平台规则的商品数据批量获取,适用于电商分析与竞品监控场景。
|
SQL 安全 前端开发
如何开发一套EHS健康安全环境管理系统中的绩效管理板块?(附架构图+流程图+代码参考)
本文探讨了如何将EHS(环境、健康与安全)工作转化为可量化、可持续改进的绩效管理体系。许多企业将EHS视为被动合规任务,但通过绩效管理,可将其升级为驱动企业长期价值的工具。文章详细介绍了EHS绩效管理的核心模块、系统架构设计、数据模型、评分算法、前端展示、开发技巧及落地建议,涵盖了从业务流程设计到技术实现的完整路径。同时,还提供了业务指标定义、规则引擎配置、数据采集与分析、可视化看板展示等内容,并结合示例代码与架构图,帮助开发者与管理者理解如何构建一个闭环的EHS绩效管理系统。
|
XML 数据库 数据安全/隐私保护
QQ卡片XML消息生成工具,qq卡片代码生成器,网址一键生成QQ卡片
这个QQ卡片生成工具包含完整的XML生成逻辑、工具类、Web服务和配置模块。主模块QQCardGenerator.py实
|
弹性计算 JSON 安全
阿里云服务器产品评测报告
阿里云服务器安全体检与漏洞修复
|
数据采集 存储 JavaScript
网页爬虫技术全解析:从基础到实战
在信息爆炸的时代,网页爬虫作为数据采集的重要工具,已成为数据科学家、研究人员和开发者不可或缺的技术。本文全面解析网页爬虫的基础概念、工作原理、技术栈与工具,以及实战案例,探讨其合法性与道德问题,分享爬虫设计与实现的详细步骤,介绍优化与维护的方法,应对反爬虫机制、动态内容加载等挑战,旨在帮助读者深入理解并合理运用网页爬虫技术。

热门文章

最新文章