8.1.2 移动 AI 落地方案
下面选取美颜、语音和翻译功能来看看移动 AI 落地方案。1. AI 美颜功能
10 年前用手机给自己拍照,最终拍出来的效果可能不尽如人意。早期的美颜算法可以帮助用户自动美化照片,但是众所周知,由于个体特征和审美差异,一刀切式的美颜功能并不是理想的选择,用户更希望自拍照美得自然,而如何实现因人而异、表现自然的美颜功能?这也一直是 AI 美颜技术努力的方向。以目前的 AI 美颜技术,可以通过深度学习算法以及对数据库的分析,智能识别拍照场景,判断最佳拍照时机,实现智能完美虚化,呈现特效般的迷人效果,帮助人们轻松拍出顶级美图。
OPPO 在 2017 年 10 月就发布了带有 AI 美颜功能的 R11s 手机。据 OPPO 介绍,当用户自拍的时候, R11s 会采集 254 个面部特征点,然后智能分析出用户的性别、年龄、肤色、肤质等信息,让美颜功能更智慧。通过多维度排列组合输出的美颜效果可达 200 万种,然后通过AI 智能算法为用户推荐最合适的效果,达到拍出用户最满意照片的目的。
而在大概同一时期,华为也推出了具有 AI 美颜功能的 Mate 10 手机, Mate 10 搭载了华为自家的麒麟 970 AI 芯片。在 AI 美颜功能方面,华为甚至做得更为激进,通过 Mate 10 搭载的人脸识别技术,手机可以自动检测人脸并进行美颜,每 3 秒还能变换不同的动态效果,即使拍摄对象在镜头前移动, AI 美颜也能精准贴合。2.语音识别打分
目前市面上存在多款英语学习 App,在移动 AI 的潮流下,该类 App 也诞生了新的技术方案以更好地为用户服务。这其中的核心技术便是语音评测算法,语音评测算法通过深度神经网络进行学习、训练之后集成在 App 中,在离线状态下可以为用户提供相关服务。这是以往的技术所不能实现的。
利用语音评测算法可以给用户输入的口语实时打分、反馈,帮助用户纠正发音和提高口语能力。语音评测算法将近年 AI 领域取得重大突破的深度神经网络( DNN)模型应用到语音评测系统中,与传统的建模方法相比,其大幅提升了各项基准的准确率。
具体的使用方法为用户跟读 App 提供的英语教程内容, App 通过语音评测算法针对用户的发音与语速等问题进行计算、打分并得出总分,用户通过 App 输出的评测报告可以获知自身口语发音等存在的问题并进行专项突破,以达到提高相关英语能力的目的。
3.翻译机
翻译机相关产品其实并不多,其中最早上市的应该是讯飞 1.0 翻译机,因此科大讯飞在这一领域可以称得上开拓者。另外,世界上最早将机器神经和人工神经网络用于 AI 算法的两个公司分别是 Google 和科大讯飞。后续,各路翻译机产品也从以往纯粹的机器翻译阶段(像我们初高中时用百度一字一句翻译那样)不断进步到神经机器翻译阶段。
翻译机集语音识别、语音合成、图像识别、离线翻译和多麦阵列降噪等能力于一身。而讯飞翻译机 2.0 支持中文与 33 种语言即时互译、方言翻译和拍照翻译,并独家具备 4G、 Wi-Fi和离线翻译模式,在可用性与易用性上可谓已经做得相当完美。
8.2 AI 的应用场景
目前 AI 技术的应用场景已经十分广泛,本节将从图像处理、语音识别和模式识别等方面来进行应用案例的说明。
8.2.1 图像处理
图像处理是一个最基本的 AI 应用场景,它到底需要什么样的 AI 技术呢?下面会从原理和业务场景来分析。
1.原理
为了弄清楚计算机是怎么识别图像的,首先需要明白计算机的工作原理。计算机只会识别由 0 和 1 组成的二进制数据,所以为了让计算机能够懂得如何进行图像识别,需要将图像翻译成计算机能理解的语言,而实现这一目的的方法便是使用深度学习与神经网络模型。
具体的实现方式和算法模型有很多种,在接下来的案例与讲解中,我们以应用最广泛的卷积神经网络进行展开介绍。卷积神经网络由以下几个部分组成。
( 1)卷积计算层,线性乘积求和
( 2)激励层
( 3)池化层
( 4)全连接层
而卷积神经网络在识别图像的过程又可以拆分为以下几个具体步骤。
( 1)把图像分解成部分重合的小图块。
( 2)把每个小图块输入小型神经网络中。
( 3)把每个小图块的结果都保存到一个新数列中。
( 4)缩减像素采样。
( 5)做出预测与识别。
当然如果你愿意,还可以为以上这些过程增加一些其他步骤来进行模型优化,以达到更好的图像识别效果。
2.业务场景
那么在业务场景下会是怎样的呢?下面从图像识别和图像分割的角度来介绍。
( 1)图像识别
计算机视觉是利用摄像机和计算机代替人眼,使计算机拥有类似于人类的对目标进行检测、识别、理解、跟踪、判别和决策的功能。在实际的应用场景中,比如用户需要对一份简历图像上的文字信息进行提取与识别。
传统的 OCR 基于图像处理(二值化、连通域分析和投影分析等),过去 20 年间在印刷体和扫描文档上取得了不错的效果。具体的步骤可以分解如下。
① 图像预处理(几何校正、模糊校正和光线校正)。
② 文字行提取(二值化、版面分析和行切分)。
③ 文字行识别(字符切分、单字识别和识别后处理)。
从输入图像到给出识别结果经历了图像预处理、文字行提取和文字行识别 3 个阶段。其中文字行提取的相关步骤(版面分析和行切分)会涉及大量的先验规则,而文字行识别主要基于传统的统计学方法。随着移动设备的普及,对拍摄图像中的文字进行提取和识别成为主流需求,同时对场景中的文字进行识别的需求也越来越突出。因此,相比于印刷体场景,拍照文字的识别将面临更多的挑战。
而新的 OCR 提取方法主要基于深度学习的图像分类与识别领域的研究成果。具体实现方式为,通过将传统 OCR 领域中步骤③的传统单字识别引擎更新为基于深度学习的单字识别引擎,在实际的识别效果上提高了识别准确率以及提升了 OCR 识别的环境兼容性。由于单字识别引擎的训练是一个典型的图像分类问题,而卷积神经网络在描述图像的高层语义方面优势明显,所以主流方法是基于卷积神经网络的图像分类模型。
实践中的关键点在于,如何设计网络结构和合成训练数据。其中,对于网络结构,我们可以借鉴手写识别领域的相关网络结构,也可采用 OCR 领域取得出色效果的 Maxout 网络结构。
( 2)图像分割
卷积神经网络( CNN)不仅能用来对图像进行分类,还在图像分割任务中有着广泛的应用。比如,在医学图像分割领域,基于深度学习的图像分割技术有助于医生进行医疗诊断,这提高了诊断的效率和准确性。
随着医学影像学设备的快速发展和普及,成像技术包括磁共振成像( MR)、计算机断层扫描( CT)、超声和正电子发射断层扫描( PET)等,成为医疗机构开展疾病诊断、手术计划制定、预后评估和随访等不可或缺的设备,全世界每天都在产生大量的医学影像学信息,如何有效且高效地利用这些医学影像成了一个大问题。而其中的图像分割环节是图像处理的重要环节,也是难点所在,是制约三维重建等技术应用的瓶颈性问题。随着深度学习方法的迅速发展,基于深度学习的图像分割算法在医学图像分割领域取得了显著的效果。
对于医学影像分割,有两个关键点:一个关键点是对于医学影像而言,往往不需要进行多分类,只需要进行病灶或器官的区分即可;而另一个关键点在于,医学影像所需的分割精度较高,同时所需的稳定性也较高,而医学影像往往信噪比相对较低,即使是医生,也需要长期的专业训练,而结果一致性也往往会受到医生经验、疲劳程度和耐心程度的限制。所以对于可以使用卷积神经网络进行辅助医学图像分割的任务,将大大提高医生的工作效率,承担医生的部分工作量,使得医生可以更专注于疾病治疗等其他领域。
8.2.2 语音处理
下面从原理和业务场景来对语音处理进行说明。
1.原理
语音处理的关键在于将声音信号转化为具体的语义文字。那么如何将声音信号转化为语义文字的呢?首先,我们知道声音实际上是一种波,而在实际的处理过程中会对声音信号进行分割与标记等操作,下面先介绍音素与声音状态这两个概念。
音素: 单词的发音由音素构成。对英语来说,一种常用的音素集是卡内基梅隆大学的一套由 39 个音素构成的音素集;而对汉语来说,一般直接用全部声母和韵母作为音素集,另外对汉语的识别还分有调无调。
声音状态: 将其理解成比音素更细致的语音单位就可以了,通常把 1 个音素划分成 3个状态。
在具体的语音识别过程中,对于声音信号的处理是比较复杂的,为了简化,我们将整个过程细分为以下几个步骤。
首尾端的静音切除,以排除噪声干扰。
对声音分帧,也就是把声音切成一小段一小段。
识别帧的状态。
将状态组成音素。
将音素组成单词。
而在上面的几个步骤中,“识别帧的状态”是最难的部分,若干帧语音对应 1 个状态,每3 个状态组成 1 个音素,若干个音素组成 1 个单词。也就是说,只要知道每帧语音对应哪个状态,语音识别的结果也就出来了。
当然以上过程只是一个简化的过程,具体的语音识别过程还涉及使用声学模型识别帧的状态、搭建隐马尔科夫模型等问题,这里就不一一展开了。
2.业务场景
这里选取了智能语音助手作为案例进行说明。
语音识别的应用场景实在是太多了,与当前移动互联网世界的很多方面都息息相关。在智能语音助手方面,从最早面向普通大众的苹果 Siri、亚马逊的 Echo 到国内的小爱音箱和天猫精灵,每一个都突破了我们对科技的想象。
多年以来, AI 的主要任务之一就是理解人类。人们希望机器不仅能理解人说了什么,还能理解他们说的是什么意思,并基于这些理解的信息做出相应的动作。而为了实现这个目标, AI 首先需要理解人类语言的语义,而这正是语音识别的重大意义所在。语音识别是人类迈向
通用 AI 最关键的第一步。
语音识别的梦想是建立一个能在不同的环境下,能应对多种口音和语言,能真正理解人类语言的系统。在过去相当长的一段时间内,寻找一个能有效创建这样系统的策略看起来是不可能完成的任务。然而,在过去的几年间, AI 和深度学习领域的突破已经颠覆了对语音识别探索的一切。随着深度学习技术在语音识别领域的运用,语音识别引擎已经取得了显著进步。
然而,尽管神经网络与深度学习使语音识别技术突飞猛进,但如今这些语音识别系统还是不够完美,其中的一个问题就是有“地域歧视性”,为了解决口音的问题,智能语音助手还有相当长的一段路要走。归根结底,语音识别的口音问题是由于数据不足产生的,语料库的质量越高,语言模型越多种多样,那么至少从理论上来说,语音识别系统的准确率越高。
8.2.3 模式识别
模式识别是 20 世纪 70 年代和 80 年代非常流行的术语。它强调的是如何让计算机程序做一些看起来很“智能”的事情,例如,识别一种行为模式,并且在融入了很多智慧和直觉后,人们也的确构建了这样的一个程序。
模式识别是根据已有的特征,通过参数或者非参数的方法给定模型中的参数,从而达到判别的目的。模式识别的概念可以类比判别分析,是确定的、可检验的、有统计背景的,或者更进一步地说,有机理性基础理论背景。扩展讲的话,模式识别其实对应于机器学习中的监督式学习。
监督式学习是机器学习中的方法,可以通过训练资料学习或建立一个模式,并依此模式推测及预测新的实例。训练资料是由输入变量(通常是向量)以及预期输出所组成的。神经网络的输出可以是一个连续的值,即作为回归分析或预测分类识别。
一个典型的监督式学习模型框架的任务是,在通过一系列的训练数据进行计算与更新框架参数之后,预测这个模型框架对于任何可能出现的输入值所产生的输出。为了达到模型泛化到任意一切数据输入都可以产生正常的预期输出的目的,开发者必须拥有大量的数据,而且需要选择合适的训练算法并不断迭代调优参数与观察模型训练的结果,这样才能从现有的数据泛化到一般的情景。
8.3 移动 AI 框架
本节重点用 Caffe2 和 TensorFlow 来做案例讲解。
8.3.1 Caffe2
1.简介
Caffe2 是一个兼具表现力、速度和模块性的开源深度学习框架,它提供一种简单、明了的方式尝试深度学习和利用社区贡献的新模型和算法。通过 Caffe2 的框架模型,你可以很容易地在云端大规模部署计算实践来实现自己的产品想法,同时你也可以在移动平台部署 Caffe2跨平台库。
众所周知, Caffe 与 Caffe2 框架的关系密切,但为何 Facebook 要推出 Caffe2 取代 Caffe呢?这就要从 Caffe 的发展历程说起。最初的 Caffe 框架是用于大规模产品的,为了兼顾强大的计算性能和兼容测试 C++代码库, Caffe 在一些设计选择上继承了传统 CNN 应用程序,这就使得它具有一定的局限性。随着新型计算模式与平台的出现,例如,分布式计算、移动平台、精密计算等, Caffe 框架已经越来越不能适应新的产品业务需求,所以这才有了 Caffe2 的出现。
Caffe2 沿袭了大量 Caffe 的设计,可解决多年来使用和部署 Caffe 中出现的瓶颈问题。在Caffe2 上终于打开了算法实验和新产品的大门,在 Facebook 内部, Caffe2 已经应用于各种深度学习和增强现实任务,并且在产品对于规模和性能的需求上得到了锻造。同时,它为移动端应用提供了令人印象深刻的新功能,如高级相机等。
Caffe2 在保有扩展性和高性能的同时,也强调了便携性。便携性通常使人想起 overhead——它如何在诸多不同的平台上工作?它如何影响扩展能力? Caffe2 当然已把这些考虑在内,其从一开始就以性能、扩展和移动端部署作为主要设计目标。 Caffe2 的核心 C++库能提供速度和便携性,而其 Python 和 C++ API 使你可以轻松地在 Linux、 Windows、 iOS、 Android,甚至Raspberry Pi 和 NVIDIA Tegra 上进行原型设计、训练和部署。
2.接入实践
( 1)安装
Caffe2 支持多种平台,包括 macOS、 Ubuntu、 CentOS、 Windows、 iOS 和 Android 等,同时也支持多种安装方式,如预编译版本、从源文件编译安装、 Docker 镜像和云端。由于我们主要介绍针对移动平台的实践,所以下面以 Android 平台上的安装为例进行介绍。
由于 Android 平台上的安装只支持源码编译安装的方式,所以下面只介绍从源码安装的过程。
( 2)配置
安装 Caffe2 需要先安装一些工具辅助开发和编译。
由于这里针对的是 Android 平台的开发,所以首先需要安装 Android Studio 集成开发环境,同时需要在 Android Studio 中安装好 SDK 与 NDK 工具集。
另外,需要安装 Automake 与 Libtool 工具。如果你是 macOS 平台的开发者,只需要通过下面的命令就可以完成安装:
1. brew install automake libtool
如果你是 Ubuntu 平台的开发者,那么你需要通过下面的命令进行安装:
1. sudo apt-get install automake libtool
最后由于源码是通过 Git 进行克隆下载的,所以需要安装 Git 工具。
( 3)下载 Caffe2 源码
如果你已经安装好前面介绍的工具和环境,那么下一步就可以开始下载源码进行安装了,源码通过 Git 工具下载,命令如下:
1. git clone –recursive https://github.com/pytorch/pytorch.git
2. git submodule update –init
( 4)编译
如果你已经成功地下载了 Caffe2 的源码,那么接下来就可以开始编译 Caffe2 了。之前将源码下载到了 pytorch 文件夹中,执行下面的命令首先进入 pytorch 文件夹,然后开始编译:
1. cd pytorch
2. ./scripts/build_android.sh
build_android.sh 脚本文件默认的编译处理器架构是 arme-v7a,假如你想要更改你的处理器编译架构为 arm64-v8a,那么可以通过下面的命令行参数进行更改:
1. cd pytorch
2. ./scripts/build_android.sh -DANDROID_ABI=arm64-v8a – DANDROID_
TOOLCHAIN=clang
( 5)集成与调用
下面以 Facebook 提供的 AICamera 为例进行详解。
Caffe2 的使用方式比较烦琐,首先需要通过 JNI 接口 initCaffe2 调用和初始化 Caffe2 框架,调用过程如下:
1. public native void initCaffe2(AssetManager mgr);
2.
3. private class SetUpNeuralNetwork extends AsyncTask<Void, Void, Void> {
4. @Override
5. protected void doInBackground(Void[] v) {
6. try {
7. initCaffe2(mgr);
8. predictedClass = "Neural net loaded! Inferring ...";
9. } catch (Exception e) {
10. Log.d(TAG, "Could not load neural network.);
11. }
12. }
13. }
神经网络的调用入口与接口的返回也是通过调用 JNI 接口实现的,代码如下
1. Java_facebook_f8demo_ClassifyCamera_classificationFromCaffe2 (
2. JNIEnv *env,
3. jobect /* this */,
4. jint h, jint w, jbyteArray Y, jbyteArray U, jbyteArray V,
5. jint rowStride, jint pixelStride,
6. jboolean infer_HWC) {
7. if (!_predictor) {
8. return env->NewStringUTF("Loading...");
9. }
10. jsize Y_len = env-> GetArrayLength(Y);
11. jbyte * Y_data = env->GetByteArrayElements(Y,0);
12. assert(Y_len<=MAX_DATA_SIZE);
13. jsize U_len = env-> GetArrayLength(U);
14. jbyte * U_data = env->GetByteArrayElements(U,0);
15. assert(U_len <= MAX_DATA_SIZE);
16. jsize V_len = env->GetArrayLength(V);
17. jbyte * V_data = env->GetByteArrayElements(V,0);
18. assert(V_len <= MAX_DATA_SIZE);
19. ...
20. }















暂无评论内容