智能手机哪家强?实时人像分割大比拼!

本文为 AI 研习社编译的技术博客,原标题 :

Real-time Portrait Segmentation on Smartphones

翻译 | 康奈尔•斯摩、Dawin_Park

校对 | 酱番梨 整理 | 志豪

https://blog.prismalabs.ai/real-time-portrait-segmentation-on-smartphones-39c84f1b9e66

手机上实时人像分割

分割效果的演示:原始图像和散景效果。

近年来,各种图像效果越来越受到人们的关注。散景一个很受欢迎的例子是在图像的非聚焦范围进行虚化。这个效果由快速镜头大光圈实现。不幸的是,手机摄像头很难实现这种效果,因为它还没达到技术规格的要求。然而,如果每幅图像的像素可以分为人和背景两个类别,就可以达到只有背景被虚化的散景效果。每个像素被分类的过程叫做语义分割,并且可以应用到不同的地方,比如改变图像的背景或者分别对前景或者背景进行过滤。

一些设备或许会使用立体相机提取深度信息来对图像进行分割。然而本文的方法是建立一个分割系统,从单张的RGB图像得到想要的信息。这样人像分割效果可以应用于更多的相机。

这些年来,计算机视觉取得了巨大的进展,尤其是在语义分割领域。这个成果取决于卷积神经网络。这种神经网络从图像中提取信息并推断出质量,包括分割图。然而,大部分的架构需要大量的计算能力以及设备的并行能力。这个需求和神经网络的普及导致设备厂商制造出了新的框架。这个框架支持神经网络可以在手机GPU上进行评估。在大多数情况下,这些解决方案比基于CPU的性能更好。

尽管深度学习在计算机视觉中很流行,但是我们仍旧能在所有的分割模型中可以找到一些缺点。在大部分情况下,神经网络运行太慢,很难在手机上进行实时判别。另个复杂问题是与手机框架的兼容性——不是支持所有的层。由于这些原因,我们设计了一个特殊的架构,适应于所有的约束。

最后的挑战是训练数据集,为了达到最好的性能,我们为这个任务收集了数据集并且创建了一个特殊的增强管道。

数据集

神经网络需要训练,所以构建神经网络最主要的部分是训练,因此最重要的部分是数据集。我们需要尽可能正确的分割图,所以我们数据集中所有的图片都是用专业的编辑程序手工标注。另外,我们希望数据是多样的。缺乏多样性或许会导致算法造成结构性的错误。举个例子,如果一个模型不能处理一个特殊的姿势,这可能是数据集不够具有代表性。我们使用两个方法来提高数据的质量:增强和收集额外的图像。随着时间的推移,我们的数据集的图像数量逐渐增加。目前,我们训练数据集中大概有13000张图片,测试集有1000张图片。包括各种姿势、全身的、半身的以及自拍。

图片增强:原始图像和两个随机增强的例子。

结构

神经网络需要设计结构。有很多不同的层和方法来进行组合,每个方法都有自己的优点。在确定我们的网络之前,我们需要理解结构的哪些特征是我们最想要的。我们希望的特征是快,轻量级以及兼容大多数的移动框架。为了实现这个,我们牺牲了收敛速度并且跳过了正则化层,通过减小模型尺寸以及大量的增强来防止过拟合。

另外,使用与平台兼容性的层是至关重要的。每个框架都有自己的一系列操作实现,我们必须使用这些操作的交集。我们使用以下层:卷积层,转置卷积,ReLu,sigmoid和逐元素增加。

架构最后的挑战是效率。输入图像的形状是关键的一个参数。我们模型的输入是降低图像的分辨率,然后输出时放大为原始形状。输入图像越小,推理越快。然而,分辨率太低,在放大图像时,会导致语义分割的结果模糊。我们能够实时处理的最高的分别率为256x256。

最后的网络拓扑模型是基于U-Net编码解码结构。在我们的经验中,在分类数量少的情况下,这是最好的图像分割架构。然而,我们的结构包括了一些比较重要的变化。

为了改善算法的收敛性,使模型更加精确,我们使用逐元素增加替代了上采样后的串联特征。

下一个关键特征是深度分离卷积层。与普通卷积层相比较,它可以以较少的计算成本以及内存需求实现相同的质量。我们增加了一个具有深度可分离卷积层残差块作为基本块,而不是原来的卷积层+ReLU块。我们架构的另一个特点是不对称性。编码块多于解码块。这使得我们能够以相同的计算成本实现更好的精度。最后,为了实现实时推理,我们尽量减少层数和特征映射数量。

最后的结构如下图所示。

分割网络拓扑

训练技巧

训练是下一个重要的阶段,有一个两步的训练过程使得产生更好的质量效果。首先,模型对数据库里所有的图片进行预训练;接着,为自拍和肖像子集设计训练模型,该模型使用上一步的结果作为模型权重的初始值。为了在每一步中扩大数据集,本文大量使用数据增广,如图片翻转、曲线调整和阴影模拟。文本的增广渠道是基于两个主要概念:第一个是不过度污染图片——增广完毕后,图片应该显得真实;第二个是尝试掩盖数据集的缺陷,如在本文的实验中,动作模糊模仿对视频处理的稳定性造成重大的冲击。

本文的另外一个观点是输出人造物。神经网络倾向于生成棋盘——在应用背景提取后可以看到一张网格。这种类型的人造物不影响mIoU指标,但造成一个较差的视觉体验。为了解决这个问题,本文增加了额外的残差块在最后的形状中,以及给出额外的训练时间。

结果

分割的输出:原始图片、背景提取、前景提取

最后,我们得到了一个肖像分割模型,可以在质量和速度上有个很好的平衡。模型在fp32 onnx格式中只有3.7mb。我们的算法可以移植到大多数框架上,包括CoreML, MetalPerformanceShaders, SNPE, Huawei Kirin, OpenVINO。具体而言,在iPhone 7 和 Mi Mix 2S,模型可以成功的运行并且比30 fps快。这个过程包括从相机中获取像素缓存器,预处理,推断,后处理和在屏幕上渲染去除背景后的图像。

另一个分割的

散景模拟:有背景虚化的图像以及没有背景虚化的图像

备注

本文所提出的肖像分割系统是和我杰出的同事一起完成的。不幸的是,媒体上没有办法写合作者,但是在这里我要提到他们:

Lebedev Anton, Konstantin Semyanov, Artur Chakhvadze  -训练过程以及设计网络结构

Roman Kucev, Pavel Voropaev  -数据手机以及注释标注处理

Maxim Skorokhodov, Vyacheslav Tarasov - Android集成

Oleg Poyaganov, Andrey Volodin — iOS 集成

MR — 本文的审核

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181104A19X4O00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券