1.6 AIDemo示例系统
本书配套的所有资源都可以从网址http://aibook.cslt.org下载,这些资源既包括一些基础阅读材料,也包括一些可动手操作的示例系统,以下称为AIDemo系统。AIDemo中的所有示例都基于Linux操作系统,因此需要一些Linux的基础知识;另外,这些示例绝大部分是用Python语言编写的,如果希望对这些程序进行较细致的学习,需要对Python有初步的了解。访问本书的官方网址,可以学习关于Linux和Python的基础知识。
为了方便读者搭建AIDemo示例系统,我们将所有示例程序及其运行环境打包成一个虚拟机,只要安装这一虚拟机,即可体验这些示例,免去复杂的环境配置过程。我们选择VirtualBox虚拟机软件,该软件可免费下载安装,可移植性较好。安装AIDemo虚拟机需要主机至少有4GB内存,最好有8GB。AIDemo中的示例程序需要主机有网络环境,有声音输入输出设备。本节首先介绍VirtualBox和AIDemo的安装过程,之后以一个简单的人脸检测系统为例介绍AIDemo中示例程序的运行方法。
1.6.1 AIDemo环境搭建
(1)在浏览器中输入网址https://www.virtualbox.org/wiki/Downloads.
(2)选择5.2版本,并选择合适的宿主机类型。对Windows用户,应选择Windows Hosts。下载安装包,进行默认安装即可。
(3)安装完成后,通过以下网址下载虚拟机映像(.ova文件):
http://aibook.cslt.org/aidemo/ova.html.
(4)在VirtualBox的“管理”菜单中选择“导入虚拟电脑”,在弹出的窗口中选择前一步所下载的.ova文件,完成AIDemo虚拟机安装。AIDemo安装完成后的VirtualBox界面如图1-11所示。
图1-11 安装完成AIDemo后的VirtualBox界面
(5)AIDemo虚拟机安装完成后,可双击该虚拟机图标启动系统,根据AIDemo主页(http://aibook.cslt.org/aidemo/demo.html)的提示索取密码,登录后即可开始体验AIDemo中的示例程序。
(6)我们会随时更新AIDemo系统,以方便读者体验最新的人工智能技术。请参考AIDemo主页上的提示信息进行示例程序的远程更新。
1.6.2 AIDemo示例基础
如果AIDemo虚拟机已经安装完成,且已经掌握了Linux和Python的基础知识,就可以开始体验一个简单的人工智能系统了。
首先以用户tutorial的身份登录AIDemo虚拟机,可以看到桌面上有一个主文件夹,鼠标双击该文件夹进入aibook→demo,即可看到若干文件夹,如图1-12所示。这些文件夹的内容如下。
- data:存储AIDemo系统所需的数据资源;
- env:存储AIDemo系统所使用的Python运行环境;
- image:图像处理示例程序;
- speech:语音处理示例程序;
- lang:自然语言处理示例程序;
- robot:机器人示例程序;
图1-12 AIDemo所包含的文件夹
- mind:思维学习示例程序。
打开image或speech等目录,可以看到每个目录下有若干文件夹,每个文件夹对应一个示例程序。打开某一个示例程序,可以看到该文件夹下包括一个code目录和一个doc目录,前者保存了示例系统的源代码,后者保存了该示例的说明文档。AIDemo中的很多示例是从免费代码库github上下载后重新整理而成的,通常将从github上直接下载的代码放到org目录下。
认真阅读doc下的说明文档,可以了解运行相应示例程序的具体步骤。对大多数示例系统,code目标下的run.sh是主程序入口,运行该程序即可启动该示例的默认过程。这一运行过程需要在命令行窗口中执行。在AIDemo虚拟机桌面上右击,选择“打开终端”,进入相应示例程序的文件夹,再进入code目录,通过运行下述命令启动主程序:
sh run.sh
绝大多数示例程序都设计了实验环节,这些实验通过修改run.sh或其他配置文件,改变默认程序的运行特性,从而让读者加深对该示例的理解。修改run.sh或配置文件可以通过双击这些文件,启动图形界面编辑器来完成,也可以通过更复杂的编辑工具(如vim)完成。
1.6.3 人脸检测(Face-detection):第一个示例程序
本小节选择人脸检测作为例子来说明如何运行AIDemo中的示例程序,该示例程序保存在image/face-detection下。所谓人脸检测,是指从一张照片中将人脸找出来,并用方框进行标注。人脸检测是第2章要介绍的人脸识别技术的基础,只有把人脸找到,才有可能对其进行识别。这一任务看似简单,但当图片中包含的场景比较复杂时,检测过程很容易出错。这里将忽略技术细节,仅介绍如何启动示例系统,并通过修改代码来改变检测系统的行为方式。
Face-detection示例程序事实上是机器视觉处理工具包OpenCV的演示样例。首先认真阅读image/face-detection/doc/README,了解运行步骤。然后打开一个终端,进入目录aibook/demo/image/face-detection/code,执行run.sh:
cd aibook/demo/image/face-detection/code sh run.sh
运行上述命令得到图1-13(a)所示的输入照片,回车后得到图1-13(b)所示的检测结果,再次回车则退出程序。
图1-13 Face-detection的默认主程序运行结果
(a)原图;(b)检测结果
Face-detection示例程序设计了三个实验来加深读者对人脸检测系统的理解。在第一个实验中,读者将通过修改detect.py中的参数来观察不同参数对检测结果的影响。例如,face_minSize用来设定脸的最小尺寸,当调小这一数值时,会有更多脸检测出来;相反,当调大这一数值时,只有足够大的脸才能被检测到。例如,当我们设face_minSize=(130,130)时,就只能检测出一张脸了,如图1-14(a)所示。如果进一步将眼睛的最小尺寸eye_minSize增大,如设eye_minSize=(60,60),则连眼睛都检测不出来了,如图1-14(b)所示。
在第二个实验中,我们用一张包含更多人脸的照片来考查该人脸检测系统的性能。修改detect.py,将输入图片变量photo_fn定义为一张包含多个人脸的照片,如img目录下的crowd.jpg,即设置photo_fn=img/crowd.jpg。用默认参数配置运行run.sh,可得如图1-15所示的检测结果。
图1-14 Face-detection修改参数后的运行结果
(a)设face_minSize=(130,130)之后的运行结果;(b)设face_minSize=(60,60)之后的运行结果
图1-15 Face-detection对多人脸照片的运行结果
在第三个实验中,我们鼓励读者用手机自拍一张照片,作为face-detection的输入图来进行人脸检测,观察光照、角度、姿态等对检测结果的影响。实验时,需要将照片上传到AIDemo虚拟机,并将detect.py中的photo_fn参数设成该文件的路径。将照片上传到虚拟机的方法有多种,一种简单的方法是将文件上传到第三方共享网站(如百度云),再从AIDemo虚拟机上通过浏览器下载;另一种方法是利用VirtualBox的文件夹共享功能,在主机和AIDemo虚拟机间交换文件。
通过上述实验过程,读者即可对人脸检测技术有个直观了解,对该实验的检测系统在性能、适用性上有更深入的认识。更重要的是,读者可以通过对模型参数进行调优,积累设计人工智能系统的基本技能,为深入学习和熟练应用人工智能技术打下基础。
(1) Dreyfus H, Dreyfus SE, Athanasiou T. Mind over machine. Simon and Schuster. 2000.
(2) Minsky M, Papert S. Perceptrons: An essay in computational geometry. Cambridge, MA: MIT Press. 1969.
(3) 朱福喜,朱三元,伍春香.人工智能基础教程[M].北京:清华大学出版社,2006.
(4) Samuel AL. Some studies in machine learning using the game of checkers. IBM Journal of Research and Development, 1959. 3 (3): 210-229.
(5) Nilsson NJ. Introduction to machine learning. URL http://ai.stanford.edu/nilsson/mlbook.html, lecture notes, 1998.
(6) 张江.科学的极致:漫谈人工智能[M].北京:人民邮电出版社,2015.
(7) Mnih V, Kavukcuoglu K, Silver D, Rusu AA, Veness J, Bellemare MG, Graves A, Riedmiller M, Fidjeland AK, Ostrovski G, et al. Human-level control through deep reinforcement learning. Nature. 2015, 518 (7540): 529-533.
(8) Koehn P, Och FJ, Marcu D. Statistical phrase-based translation. In: Proceedings of Association for Computational Linguistics (NAACL), Association for Computational Linguistics, 2003: 48-54.
(9)(10) Zhang M, Geng X, Bruce J, Caluwaerts K, Vespignani M, SunSpiral V, Abbeel P, Levine S. Deep reinforcement learning for tensegrity robot locomotion. In: 2017 IEEE International Conference on Robotics and Automation (ICRA). 2017.
(11) Yahya A, Li A, Kalakrishnan M, Chebotar Y, Levine S. Collective robot reinforcement learning with distributed asynchronous guided policy search. arXiv preprint arXiv: 161000673. 2017: 79-86.
(12) Chu P, Vu H, Yeo D, Lee B, Um K, Cho K. Robot reinforcement learning for automatically avoiding a dynamic obstacle in a virtual environment. In: Advanced Multimedia and Ubiquitous Engineering, Springer, 2015: 157-164.
(13) Kober J, Peters J. Reinforcement learning in robotics: A survey. In: Reinforcement Learning, Springer, 2012: 579-610.
(14) Gu S, Holly E, Lillicrap T, Levine S. Deep reinforcement learning for robotic manipulation with asynchronous off-policy updates. In: Proceedings 2017 IEEE International Conference on Robotics and Au-tomation (ICRA), IEEE, Piscataway, NJ, USA. 2017.
(15)(16) Levine S, Pastor P, Krizhevsky A, Ibarz J, Quillen D. Learning hand-eye coordination for robotic grasping with deep learning and large-scale data collection. The International Journal of Robotics Research, 2018, 37 (4-5): 421-436.
(17) Yahya A, Li A, Kalakrishnan M, Chebotar Y, Levine S. Collective robot reinforcement learning with distributed asynchronous guided policy search. arXiv preprint arXiv: 161000673. 2017: 79-86.
(18)(19) Cho K, Courville A, Bengio Y. Describing multimedia content using attention-based encoder-decoder networks. IEEE Transactions on Multimedia, 2015, 17 (11): 1875-1886.
(20) https://zh.wikipedia.org/wiki/AlphaGo.
(21) https://www.research.ibm.com/deepblue/meet/html/d.3.2.html.
(22) Ushveridze A. Can turing machine be curious about its turing test results? three informal lectures on physics of intelligence. arXiv preprint arXiv: 160608109. 2016.
(23) Wolpert DH. The lack of a priori distinctions between learning algorithms. Neural Computation. 1996, 8 (7): 1341-1390.
(24) Wolpert DH, MacreadyWG. No free lunch theorems for optimization. IEEET ransactions on Evolutionary Computation. 1997, 1 (1): 67-82.