谷歌AI秀神技:大脸畸变一键还原,拍照无需抢C位,实时运行毫无PS痕迹

合照的时候,没有谁喜欢站在最边上。
因为脸会被镜头无情地拉扯,不止变得宽广,还会有些歪斜:

△97°视场角
不过,谷歌刚刚推出了一门法术,可以让广角照片里的人脸,不用再扭曲变形:

左一的妹子,右一的妹子,脸型都显得更加对称自然了。
那么,增加一波难度。
带上墨镜,带上帽子,拉长的脸依然可以复原:

△103°视场角
用手挡住半张脸,AI还是没有被迷惑:

△103°视场角
不止是这样,AI把人脸调正的同时,也不会扭曲了背景。
比如下图,中间是DxO Viewpoint的人脸修正,后面的栏杆被挤成了一条弧线;而右边是谷歌算法,修好了人脸,栏杆依然直挺:

团队说,整个修复过程都是AI自动完成,并且在移动端也可以运行。
这只善良又聪颖的AI,登上了顶会SIGGRAPH 2019。
也在Reddit论坛收获了1.9k的热度:

有人说,Pixel的广角前置镜头已经用上了这个算法,拍完之后点开照片预览,发现自己的脸已经收窄了。
现在就来看看,人物和背景,到底是怎样兼顾的吧。
01.互补才是完美
谷歌说,从前想要纠正镜头畸变,总是需要职业的修图士。
因为,让机器自动完成的话,常常是修好了一处扭曲,又制造了另一处新的扭曲。
不过,团队也正是从这些不完美的算法之间,发现了新世界的大门:
先看透视投影(Perspective Projection) 。从一个投射中心出发,把一个3D物体投在2D表面上。忠于透视原理,近大远小。

这种投影一定有失真,比如站在边上的人,离投射中心比较远,脸就大了起来。不过,它拉伸的主要是人脸,背景并不容易发生扭曲。
而球极平面投影(Stereographic Projection) 就不同了。把一个球面投射到平面上,并不忠实反映距离,却十分忠实地反映角度。就像这张地图。

这种投影也一定有失真,但对一张照片来说,主要是背景里的直线会变弯,而人脸不易被拉伸。
如此说来,两种投影愉快地互补了。

观察到这个美丽的现实,研究人员当然要把它们的优点,用优雅的方式结合起来。
一句话概括,就是让透视投影去处理背景,球极平面投影去处理局部 (人脸) 。
当然,要让两种原本冲突的投影方式和平共处,并不是一句话的事。具体说来:

△97°视场角
输入的照片如上,已经先用透视投影处理过。
第一步,找出目标区域:人脸,包括头发。
这里,要用人物分割算法,给输入图像里的人类做个Mask;再用人脸检测器,标出脸部的边界框。最后,把Mask和边界框的交集,用绿色标注出来。

第二步,为输入的 (透视投影) 照片,算出一个球极平面投影。
如果把这个投影可视化,会发现边角的人脸已经修好,只是背景里,左边的窗棱和右边的墙弯了(下图) 。

所以就有了关键的下一步:
第三步,用上前两步的数据,算出一个网格 (Mesh)。这个网格依然是做球极平面投影,但只要调整人脸区域,背景尽量保持原样。
为了不影响背景,这里用到了能量最小化(Energy Minimization) 方法,来平息两种投影之间的冲突,促成更加平滑的过渡。
这样,就有了一个兼顾人脸和背景的、优化过的网格:

第四步,用这个网格来捏那张输入的照片,得到的就是最终答案:

右下角的人脸自然了,背景里的直线也还是直线。
团队说,这个方法可以胜任70°-120°的视场角。
并且,几乎不受场景的限制:
单人自拍可以,多人合照可以。

△103°视场角

△97°视场角
室内户外都表现稳定;光线明暗也不影响AI的发挥。

△114°视场角

△104°视场角
除了开头提到的帽子、墨镜、手遮脸,这些没有难倒AI的因素之外,脸朝侧面也不会给算法造成困惑。

△103°视场角
还要注意的是,团队是为了移动端的应用,才开发了这只AI。它的运行速度,足以支持手机上相机App的正常交互:即时修图,即时分享。
如果说有什么缺憾,大概就是在捏脸的同时,还不能把身体一起捏好。
而人在角落,身体也可能被拉伸,如果只把脸修到正常的形状和大小,身体有时候就显得太大:

即便这样,AI也已经满足了广角人像拍摄的大部分需求。
大家一起自拍的时候,就算拿着手机的那个人是你,也不用再担心自己的脸被拉宽拉长了。
02.三个少年
AI的爸爸,三位谷歌少年,全部来自宝岛。

一作名叫施易昌(YiChang Shih) ,本科念台大,硕博都在麻省理工,实习经历遍布Adobe、谷歌研究院、微软研究院等等。
2015年,从闪耀的CSAIL实验室拿到博士学位,如今已是谷歌的高级软件工程师 (Senior Software Engineer) ,主攻移动设备上的计算摄影。

二作是赖威昇(Wei-Sheng Lai) ,本科硕士都在台大,现在是加州大学默塞德分校博四的学生。曾经在Adobe和英伟达实习,不久前刚刚结束在谷歌作为学生研究员的历程。

三作叫梁家恺(Chia-Kai Liang) ,本科和博士都在台大。2008年博士毕业,现在是谷歌的高级专家软件工程师 (Senior Staff Software Engineer) 。
03.One More Thing
虽然,三位作者里有两位都曾经在Adobe实习。
但这支团队孕育的AI,画风温柔善解人意。
比起一周前Adobe发布的“反向PS”利器,那只能把P过的美照打回原形的AI (如下) ,这广角人像的修复师AI,大概算得上爱的奉献了。

论文传送门:https://people.csail.mit.edu/yichangshih/wide_angle_portrait/shih_sig19_lowres.pdf
项目主页:https://people.csail.mit.edu/yichangshih/wide_angle_portrait/
包含网格的效果展示:https://people.csail.mit.edu/yichangshih/wide_angle_portrait/webpage/main-results/index.html
与前人算法比较:https://people.csail.mit.edu/yichangshih/wide_angle_portrait/webpage/academic-results/index.html
与市面产品比较:https://people.csail.mit.edu/yichangshih/wide_angle_portrait/webpage/manual-results/index.html