百度开源移动端深度学习框架mobile-deep-learning
2017 年 9 月 25 日,百度在 GitHub 开源了移动端深度学习框架 mobile-deep-learning(MDL)的全部代码以及脚本,希望这个项目在社区的带动下能够更好地发展。
写在前面 深度学习技术已经在互联网的诸多方向产生影响,每天科技新闻中关于深度学习和神经网络的讨论越来越多。深度学习技术在近两年飞速发展,各种互联网产品都争相应用深度学习技术,产品对深度学习的引入也将进一步影响人们的生活。随着移动设备的广泛使用,在移动互联网产品应用深度学习和神经网络技术已经成为必然趋势。
与深度学习紧密联系在一起的图像技术同样在业界广泛应用。传统计算机视觉和深度学习的结合使图像技术得以快速发展。
GitHub 地址:https://github.com/baidu/mobile-deep-learning
移动端深度学习技术应用 百度应用案例
在移动端应用深度学习技术比较典型的就是 CNN(Convolutional Neural Network)技术,即常被人提起的卷积神经网络。mobile-deep-learning(MDL)是一个基于卷积神经网络实现的移动端框架。
MDL 在移动端主要有哪些应用场景呢?比较常见的如分辨出一张图片中的物体是什么,也就是 分类;或者识别出一张图片中的物体在哪、有多大,也就是 主体识别。
下面这个 App 叫拾相,可以在 Android 平台的应用宝中找到。它可以自动为用户将照片分类,对于拥有大量照片的用户来讲,这个功能很有吸引力。
另外,在手机百度搜索框右侧可以打开图像搜索,打开图像搜索后的界面效果如下图。当用户在通用垂直类别下开启自动拍开关(图中下方标注)时,手停稳它就会自动找到物体进行框选,并无需拍照直接发起图像搜索。整个过程可以给用户带来流畅的体验,无需用户手动拍照。图片中的框体应用的就是典型的深度学习主体识别技术,使用的就是 mobile-deep-learning(MDL)框架。MDL 目前在手机百度中稳定运行了多个版本,经过数次迭代后可靠性大幅提升。
业界其他案例
互联网行业在移动端应用神经网络的案例已经越来越多。
目前的流派主要有两种,其一是完全在客户端运行神经网络,这种方式的优点显而易见,那就是不需要经过网络,如果能保证运行速度,用户体验会非常流畅。如果能保证移动端高效运行神经网络,可以使用户感觉不到加载过程。使用完全脱离互联网网络在移动端运算神经网络的 App 已经举例,如前述拾相和手机百度中的图像搜索。
其二是另一种,运算神经网络过程依赖互联网网络,客户端只负责 UI 展示。在客户端神经网络落地之前,绝大部分 App 都使用了这种运算在服务端、展示在客户端的方式。这种方式的优点是实现相对容易,开发成本更低。
为了更好理解上述两种神经网络的实现方法,下面展示两个识别植物花卉的例子,分别用到了识花和形色两个 App。这两款 App 都使用了典型分类方法,都可以在 iOS 平台的 App Store 中找到。下图是一张莲花图片,这张图片使用识花和形色两个 App 分类都能得到较好的分类结果。你可以尝试安装这两款 App 并根据使用效果来判断它们分别使用了上述哪一种方法。
识花
近一年来涌现出很多花卉识别的 App。微软「识花」是微软亚洲研究院推出的一款用于识别花卉的 App,用户可以在拍摄后选择花卉,App 会给出该类花卉的相关信息。精准的花卉分类是其对外宣传的一大亮点。
形色
这款「形色」App,只需要对准植物 (花、草、树) 拍照,就能快速给出植物的名字,还有不少有趣的植物知识,如这个植物还有什么别名、植物的花语、相关古诗词、植物文化、趣味故事以及养护方法,看完收获不少。
移动端应用深度学习的难点 一直以来由于技术门槛和硬件条件的限制,在移动端应用深度学习的成功案例不多。传统移动端 UI 工程师在编写神经网络代码时,可以查阅到的移动端深度学习资料也很少。另一方面,时下的互联网竞争又颇为激烈,先入咸阳者王,可以率先将深度学习技术在移动端应用起来,就可以更早地把握时代先机。
移动端设备的运算能力相对 PC 端非常弱小。由于移动端的 CPU 要将功耗指标维持在很低的水平,制约了性能指标的提升。在 App 中做神经网络运算会使 CPU 运算量猛增。如何协调好用户功耗指标和性能指标就显得至关重要。