2017年,移动应用程序的深度学习取得了一些重大进展。2017年4月,谷歌发布轻量级神经网络MobileNets。2017年6月,Apple发布了CoreML,支持在移动设备上运行机器学习模型。除此之外,一些最近发布的高端设备配备了GPU,其运行机器学习的速度甚至比MacBookPro还要快。深度学习已经无处不在。在本文中,我将介绍深度学习的实际应用,看看它们有多快。MobileNets的应用我们最近开发了一种名为MobileUNet的新型深度神经网络来解决语义分割问题。它的设计极其简单,并且使用了U-Net中的MobileNets。这里只列出关键点。有关更多详细信息,请参阅其GitHub存储库。它由编码器和解码器组成。编码器使用MobileNets,它缺少用于分类的全连接层。解码器使用卷积转置进行上采样(upsample)。在开发这个项目时,我们主要关注它的推理速度。我们知道深度神经网络在GPU上运行速度更快,但是移动设备呢?这就是我们使用MobileNets的原因。它使用深度转换块来加速推理。它具有更高的准确率和推理速度。它提供了一些参数,用于在准确性和速度之间进行权衡。我们可以得到一个比较理想的结果,如下图所示。速度和准确性在介绍MobileUNet的性能之前,我想澄清几个通用概念。是否所有卷积(例如Conv2D、DepthwiseConv2D和Conv2DTranspose)在不同处理器上具有相同的速度性能?答案是不。在不同的处理器上,有些操作会很快,有些会很慢。CPU和GPU之间的区别很容易分辨,甚至不同的GPU之间也存在优化差异。下图显示了普通卷积块和深度卷积块之间的区别。depthwiseconvolutionalblocks和普通convolutionalblocks在CPU上的性能差别很大,但在GPU上的差别要小得多。因此,如果要发布基于移动设备的深度学习应用,最好先在主流设备上进行测试。接下来,我想分享一下MobileUNet的各项指标。我们主要使用以下设备。iPhone6PlusiPhone7PlusiPhone8PlusSonyXperiaXZ(Snapdragon820)MobileNets提供了一个叫做alpha的参数来控制速度和准确率之间的比例,所以我们在MobileUNet中也使用了这个参数。我们选择了4个alpha值(1、0.75、0.5和0.25)和4个尺寸的图像(224、192、160、128)。下图是速度对比。意外的是,速度最快的并不是iPhone8Plus,而是iPhone7Plus。iPhone7Plus的速度真的很快,实时应用绝对没有问题。iPhone6Plus和骁龙820没有那么快,尤其是当alpha值很大的时候。下图是精度对比。当alpha达到0.25时,准确率开始急剧下降。精度随alpha值和图像大小线性下降。所以,我们不使用alpha0.25的值。下图展示了在骁龙820上运行的速度和精度。如果速度对我们很重要,请考虑左上角的尺寸为128、精度为0.875IoU和alpha0.5的图形。如果精度更重要,那么你可以选择大小为192和alpha值为0.5的那个。当然,我们也可以针对不同的设备使用不同的模型,但这会增加复杂性。现在让我们看看为什么iPhone7Plus会比iPhone8Plus更快。之前说过,速度取决于每个处理器。iPhone7Plus的GPU比iPhone8Plus的GPU更适合我们的神经网络,所以我做了一个实验。我们将MobileUNet的编码器和解码器分成不同的部分并测试它们的性能。显然,解码器部分是iPhone8Plus的瓶颈所在。我们在解码器中使用Conv2DTranspose,iPhone7PlusGPU针对Conv2DTranspose进行了优化,但iPhone8Plus没有。用于基准测试的脚本在Gist上。BenchmarkTensorFlowmodelinAndroidBenchmarkCoreMLmodeliniOS结论在移动设备上使用深度学习已经成为一种趋势,在不久的将来,深度学习的应用将会越来越方便。但并非所有设备都配备高端GPU,因此性能调优是必要的。因为不同的处理器有不同的特性,所以一定要使用真实的设备进行性能测试。性能测试本身并不难,我们甚至不需要使用训练好的模型。我们可以使用未经训练的模型来查找性能瓶颈。
