新闻资讯

新闻资讯 媒体报道

快手上线AI新玩法「隐身魔法」

编辑:005     时间:2020-11-06

快手最近上线的AI新玩法——「隐身魔法」。这是结合单图图像修复和帧间图像对齐技术的视频修复算法,在短视频行业中的首次应用。

不仅能「凭空出现」,对着镜头比个「6」,你还能当场变身透明人,跟空气融为一体。

效果如此丝滑,难怪上线几天时间,快手用户就玩得飞起,迅速贡献了77.5w个相关作品。

一时成为年度短视频最热特效玩法。

移动端的实时视频修复技术

让视频里的人实时隐身,怎么个原理?

此前,其实介绍过类似的「隐身」算法,比如弗吉尼亚大学和Facebook联手打造的基于光流边缘引导的视频修复算法

虽然有学术领域的前例,但想要把这样的技术应用到移动端,仍然存在不小的挑战。

最主要的问题在于计算量,视频修复涉及到多帧计算,其深度学习模型普遍计算量较大,很难在移动端运行。

那么快手是怎么做到的?

其实道理很简单,想要把画面中的人抹掉,除了自动把人像抠出来之外,AI还得学会脑补人像遮挡住的真实背景。

这就涉及到两方面的问题:

  • 初始帧人像区域的背景修复

  • 后续相机、人物运动过程中人像区域的背景填充

为了解决这两个问题,快手的工程师们将算法整体分成了两个阶段:

首帧使用移动端脑补模型实现对人像区域的背景填充,后续帧使用帧间实时跟踪匹配投影,实现可见背景区域向人物遮挡区域的填充。

基于DeepFill的图像修复算法

首先来看首帧修复。具体到模型架构上,快手工程师主要基于开源的DeepFill模型,根据实际需求进行了定制化开发和优化。

DeepFill是一种基于GAN提出的图像修复方法,修复能力是酱婶的:

在此基础上,快手在整个模型设计中采用coarse to refine双阶段结构。

第一阶段,在小尺寸上进行初步修复,利用较少计算量的coarse网络得到缺失区域的大概轮廓。

第二阶段,将该初步结果融合到原图在大尺寸上利用refine网络生成缺失区域的细节。

而为了让模型能在移动端上更好地部署运行,工程师们还采用剪枝和蒸馏方法进一步压缩了模型结构。

在算法研发过程中,工程师还发现,缺失区域越大,图像修复结果越不可控,使用L1损失和GAN损失无法有效的约束修复区域的结构和语义的合理性。

针对此问题,一方面采用边界生成联合训练的方法,对边界这一结构信息进行直接约束,明显提高了大缺失区域情况下修复结果的合理性。另一方面采用多尺度预测的方式对模型中间层的特征进行了约束,有效提升了修复结果的清晰度。

损失函数方面,在训练中工程师采用了SSIM、Lpips感知损失、PatchGan损失和蒸馏损失,在小模型上也实现良好的图像修复结果。

训练数据方面,快手工程师构建了一个包含100W背景图和10W人像mask的通用图像修复数据集,包含居家、办公、建筑、风景、虚拟CG等常见环境。

并且,根据背景数据的纹理复杂度进行了分类,模型训练过程中随着网络逐步收敛,逐渐加大复杂纹理数据的比例,使得模型更好地完成从简单到复杂等多种背景的修复。

一套组合拳下来,测试的结果如下。从左到右,分别是输入图像、边界预测、脑补结果和实际背景。

实时跟踪投影匹配

而在后续帧的背景修复上,为了更好地利用已有的背景信息,需要将已经存在的背景投影到当前帧实现对人像遮挡区域的修复,即帧间图像映射。

目前对帧间图像映射关系的描述主要有三种方式:简单的全局单应变换,基于栅格的局部单应变换,以及复杂的逐像素的稠密光流。

其中,全局单应变换虽然计算量较小,但无法描述复杂的三维结构映射。

逐像素的稠密光流算法可以得到精确的图像间可见像素的映射关系,但对于人像区域内未知区域的修复无法实现,另外限于手机平台计算量的限制,该算法无法满足实时获取映射关系的需求。

因此,快手采用基于栅格的局部单应变换的图像对齐算法,来平衡计算量和精确度之间的关系。通过同时优化帧间特征点的光度误差和栅格的形变误差,在低计算量的情况下也能得到精准的帧间映射关系,有效地将历史帧的可见区域信息实时传播到当前画面。

并且,通过调节栅格数量,可以很方便的调节算法的计算量和映射的精度,实现多机型的算法适配。

中低端机型都能用,真正麻瓜的「魔法」

其实,对快手的工程师而言,仅仅实现效果是远远不够的。

更重要的一点,是要在移动端硬件种类繁多的情况下,覆盖高、中、低端各种手机型号,让每一个档次的机型的能力都发挥到最大。

一方面,是因为每一次的产品落地,都关系到4亿用户的实际体验,牵一发而动全身。

另一方面,快手的用户特性决定,用户手中的手机型号分布会很广,不同机型算力和内存资源差异很大。

而要做到这一点,快手依靠的是自研的YCNN深度学习推理引擎

拿CPU来说,无论是苹果、高通、华为还是联发科的芯片,无论是高端的骁龙865还是低端的骁龙450、430,YCNN引擎都能支持模型在上面运行。同样,GPU方面,YCNN引擎同时支持Mali、Adreno、Apple和英伟达等多种GPU。NPU方面,苹果Bionic,华为HiAI,高通SNPE和MTK的APU均在支持范围之内。

同时,YCNN引擎具有完备的模型结构与数值精度,支持常见的CNN, RNN结构,支持float32, float16,uint8等不同精度计算。

为了在更大程度上利用手机算力,YCNN引擎还提供了多种模型,既有针对高算力NPU设计的大模型,有针对高端CPU、GPU设计的级的不同的小模型,也有针对中低端CPU处理器设计的特定小模型。同时,通过模型下发的方式,将设备上的最好算力与相应的模型进行匹配,以期达到效果与性能的最佳平衡,给用户带来最好的体验。

在推理引擎的优化方面,针对不同的设备端,快手的工程师们分别设计了Metal算子、OpenCL算子以及Neon算子等等,有针对性地进行了算子的优化,以最大化利用设备性能,提升模型的运算速度。

此外,YCNN引擎具有完善的AI模型工具链,支持PyTorch, TF/TFlite模型直接转换为YCNN模型,并支持训练时模型量化与基于硬件的模型结构搜索。综合性能比业界引擎有10%左右的优势。

本内容属于网络转载,文中涉及图片等内容如有侵权,请联系编辑删除

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

回复列表

相关推荐