在前不久荣耀9X的发布会上,一个名叫绿幕侠的App亮相了。
现场的展示中,这个App能让手机拍摄的视频,产生电影绿幕一般的效果,实时从视频中去掉背景,只保留主角人物,并把背景换成用户设定好的特效。
想要实时的进行视频处理,还能实现精细的“抠图”效果,无论对于算法还是算力来说,恐怕都不是一件容易的事。
绿幕侠背后的公司,正是此前风靡一时的手机P图应用马卡龙玩图所属的AI公司Versa。
一帧一帧做语义分割
Versa CTO赵维杰介绍说,绿幕侠背后用到的视频人景分离技术,就相当于把视频拆成一帧一帧,实现每一帧的语义分割。
语义分割并不难,难点在于连续应用在每一帧上。
首先,必须保证对每一帧的语义分割处理时间低于30毫秒,时间一到,就要开始处理下一帧了,否则视频就会变卡;
其次,因为是将语义分割应用在视频中,因此必须保证分割出来的精确度,一方面不能把边缘处理的太粗糙,一方面要保证每一帧内容的连续性,不能上一帧人物手里还有个包包,下一帧包包就被抠掉了,制造出一种“薛定谔的包包”状态;
最后,模型需要在手机本地运行,因此不能太大,只能有1~2M的空间。
通过自研“概念网络”的优化,提升了当前帧的分割精确度,又将时间空间信息嵌入到更紧凑的维度上,降低backbone的复杂度,赵维杰他们花了半年多完成了绿幕侠算法的研究,将每一帧的处理时间降到30毫秒以下,模型也被压缩到了1M左右。
寻找适配芯片
但是,模型虽然做好了,新的问题却出现了。
Versa技术团队找了许多主流手机芯片运行这个模型,发现这些芯片跑出来效果都不够好。要么算力不够,导致卡顿,必须把模型压缩才能运行,但这样效果就会变差;要么功耗太高,发热太严重,用一会儿手机就卡了。
直到他们尝试在荣耀9X的SoC麒麟810上运行模型,发现不仅算力和功耗达到了要求,而且还有了另外一个好处:I/O的设计更好,数据搬移效率高。
“其实手机小模型运行所耗的时间很多不是在运算上的,而是耗在了数据搬运上”,赵维杰这样对量子位解释。
当他们在麒麟810上测试手机小模型时,输入了1080P的高分辨率视频,跑出结果后惊奇的发现:
麒麟810和GTX1070的运行结果在一个量级,手机上跑60ms的模型,在PC上(加上I/O)大概是20ms。
为什么一个手机芯片能跑的跟GTX1070这种电脑GPU的运行结果相提并论?
赵维杰的解释是,对视频小模型来说,桌面GPU虽然算力强,但是小模型根本用不上这么大的算力,反而视频数据显存搬移的I/O是瓶颈,时间都花在数据搬运上了。麒麟810的I/O设计比较出色,省了不少时间。另外,桌面GPU是32bit浮点,810是16bit浮点。GPU是通用芯片,NPU是专门用于神经网络计算,对算子可以特别优化。最终的总时间上跟手机上可比。
因此,Versa也决定,这个新的App将在荣耀9X手机上首发,月底上线应用商店。
算力和算法的博弈
到这里,你可能看出来了一个问题:
如果AI模型必须要在足够新、足够强的芯片上运行,那便宜的手机怎么办呢?
一种思路是模型压缩。不过赵维杰觉得,模型从设计起就应当是一个小的东西,而不是从一个巨大的模型逐渐压缩到小,毕竟,模型总要拿出来用的,并不能只用在最顶尖的硬件上。
“AI公司和硬件公司都在追求一个中间地带,AI公司希望能在现在的硬件上就跑更好的算法,硬件公司在追求越来越厉害的硬件平台,让越来越大的算法在体积小的移动的硬件上跑得起来。”赵维杰这样说。
针对不同的平台,Versa也提供了不同的算法。比如此前已有的产品马卡龙玩图,赵维杰提到,需要在在最优秀的硬件上跑出最优秀的效果,在普通硬件商做出最大覆盖,最低端手机可以上云端跑,“提供差异化的算法,是任何一个AI公司追求的本质。”
“