MobileNet在手机端上的速度评测:iPhone 8 Plus竟不如iPhone 7 Plus

如今,正在兴起一项有关手机应用和深度学习的新动向。

2017 年 4 月:谷歌发布 MobileNets,一个可在计算资源有限的环境中使用的轻量级神经网络。

2017 年 6 月:苹果推出 Core ML,允许机器学习模型在移动设备上运行。

此外,最新的高端移动设备已内置 GPU,它们在运行机器学习计算时比我的 Mac Book Pro 还要快。


表 1. 不同手机设备处理单元对比

深度学习在边缘设备上的应用正在扩展。

在本文中,我将介绍其实际应用情况,展示其工作效率。

MobileNets 应用

最近我们开发了一个叫作 MobileUNet 的新型深度神经网络,可用于解决语义分割问题。本文将不详述 MobileUNet 的细节,但是会提及它的一个非常棒的简洁设计。顾名思义,它是在 U-Net 上运行 MobileNets(图 1),更多信息请参见:https://github.com/akirasosa/mobile-semantic-segmentation。现在只需简单记住以下几点:

  • 它包含编码器部分和解码器部分,具备用于语义分割的深度神经网络的跳跃连接(skip)。
  • 编码器部分正是 MobileNets,它没有用于分类的全连接层。
  • 解码器部分使用卷积转置进行上采样。


图 1. U-Net 架构

当开始开发时,我们的主要担忧是推断速度。我们知道深度神经网络借助 GPU 只是稍快了一些,那么在手机端运行时又会怎样呢?

这就是我们采用 MobileNets 的原因。下面是 MobileNets 的 3 个关键点:

  • 它引入了深度卷积模块来加速推断。
  • 它展示了准确率与推断速度之间的高比率。
  • 它具备一些控制准确率与速度之间权衡的参数。

我们可以获得相当满意的结果,下面是一个实例:


图 2. MobileUNet 的预测结果。从左到右依次是输入图像、真值和预测结果。


手机端速度 vs 准确率

在讨论网络性能之前,我首先介绍一些背景信息。

每个卷积,比如 Conv2D、DepthwiseConv2D 和 Conv2DTranspose,在不同处理器上有着相似的速度趋势吗?

答案是否定的。如果处理器不同,一些运算可以非常快,另一些则很慢。CPU 和 GPU 之间的区别很明显,甚至在 GPU 中,它们被优化的方式也各不相同。

图 3 展示了一般卷积模块和深度卷积模块的速度,Gist 地址:https://gist.github.com/akirasosa/b31c3096d9cc1959cbbd8af40993c92d。


图 3. 不同处理单元条件下,卷积模块和深度卷积模块的性能对比。


和理论一样,CPU 条件下深度卷积块的速度比卷积块要快得多,但是这种区别在 GPU 条件下没有这么明显。

那么,如果你想在移动设备中使用深度学习发布应用,强烈推荐使用多种主流设备评估速度。下面,我将分享 MobileUNet 的评估结果。

我在以下几种设备上进行了评估。

  • iPhone 6 plus
  • iPhone 7 plus
  • iPhone 8 plus
  • Sony Xperia XZ(骁龙 820)

如上所述,MobileNet 有一个参数,叫作 alpha,可以控制速度和准确率之间的权衡(trade-off)。它可以轻松应用到 MobileUNet。我选择了四种 alpha 值(1、0.75、0.5 和 0.25)和 4 种图像大小(224、192、160、128)。

以下是每种条件下的整体速度。


令人惊讶的是,iPhone 7 plus 获胜了。iPhone 7 plus 真的很快,它在任何条件下对于实时应用都没有问题。但是 iPhone 6 plus 和骁龙 820 没有那么快,尤其是当 alpha 值比较大的时候。因此,我们在选择最佳条件时必须认真地考虑准确率。

以下是每种条件下的准确率。


图 5. MobileUNet 在不同条件下的准确率。


alpha 为 0.25 时,准确率显著下降。在其他条件下,准确率根据大小和 alpha 逐渐下降。因此,alpha 0.25 被排除。

下图展示了骁龙 820 上模型的速度 vs 准确率。


图 6. MobileUNet 准确率 vs 速度(骁龙 820)

上图提示了一些选项。如果对我们的应用来说速度比较重要,那就选择左上:在大小 128、alpha 为 0.5 的条件下它的准确率为 0.875 IoU。如果准确率更重要,则选择另一个可能的条件,如大小 192、alpha 为 0.5。

每个设备也可以使用不同的模型,不过我不建议,因为这样复杂度太高。

最后,我们来看一下为什么 iPhone 7 plus 比 iPhone 8 plus 速度快。

如上所述,运行快慢取决于每个处理器,即 iPhone 7 plus 的 GPU 更加适合我们的网络。为了确定,我做了一个简单的实验。

我在编码器和解码器中配置 MobileUNet,然后评估 iPhone 7 plus 和 iPhone 8 plus 的性能。


图 7. iPhone 7 Plus 和 iPhone 8 Plus 上的速度对比。

很明显,解码器是 iPhone 8 Plus 的性能瓶颈,只使用了 Conv2DTranspose。因此,Conv2DTranspose 应该是造成速度差别的原因。iPhone 7 Plus 的 GPU 能够优化 Conv2DTranspose,而 iPhone 8 Plus 的 GPU 不具备此功能。在这种情况下,其他上采样方法可以作为改善性能的方法,不过我还没有试。

Gist 上有 Android 和 iOS 的基准脚本。

  • 安卓中的基准 TensorFlow 模型(https://gist.github.com/akirasosa/812e81f14f300323df98e42ca5825604)
  • iOS 中的基准机器学习模型(https://gist.github.com/akirasosa/0fe78b4c173aeb49d96076db20aa9dd2)

结论

在移动设备中使用深度学习将得到广泛应用。因此,在不久的将来深度学习将会变得更加便捷。

不过,并非所有设备都具备高性能 GPU,因此可能需要一些性能调整。使用真正的设备度量性能非常重要,因为每个处理器具备不同的特性。只有 Multi-Add 的理论数字是不够的。

性能度量本身并不是很难,无需训练模型。你可以使用非训练模型,轻松找到性能的瓶颈。

原文链接:https://medium.com/vitalify-asia/real-time-deep-learning-in-mobile-application-25cf601a8976

产业MobileNet计算机视觉产业移动端
1
返回顶部