前言
数字化时代的核心是智能化。随着人工智能技术的逐步成熟,智能化应用不断涌现,因此信息行业从业人员需要具备一定的人工智能知识和技术储备。人工智能最突出的两个技术应用领域是计算机视觉和自然语言。计算机视觉处理的是图像,自然语言处理的是语音和语言。由于计算机视觉采用的CNN神经元结构较早被提出,技术方案也较为成熟,因此本书着重介绍计算机视觉技术。
在整个计算机视觉领域中,本书选择重点讲述二维、三维目标检测技术,主要基于两方面的考虑:一方面,目标检测技术是当前计算机视觉中最具有应用价值的技术,大到自动驾驶中的行人和车辆识别,小到智慧食堂的餐盘识别,日常生活中的视频监控、专业领域中的路面铺装质量监控都是目标检测技术的具体应用场景;另一方面,目标检测神经网络一般包含骨干网络、中段网络(特征融合网络)、头网络(预测网络)、解码网络、数据重组网络、NMS算法模块等,知识点覆盖较为全面。
从计算机视觉的新手到目标检测专家的进阶过程不仅要求开发者具备数据集制作和骨干网络设计的基本技能,也要求开发者具备中段网络、头网络设计的技能,更需要具备根据边缘端部署和服务器端部署的要求调整网络的能力。可以说,学会了目标检测技术,就拥有了计算机视觉的完整技术栈,就具备了较为全面的技能去应对其他计算机视觉项目。
本书采用的编程计算框架TensorFlow是深度学习领域中应用最广泛的编程框架,最早由谷歌公司推出,目前已被广泛用于全球各大人工智能企业的深度学习实验室和工业生产环境。互联网上大部分的人工智能前沿成果都是通过TensorFlow实现的。TensorFlow提供了更齐全的数据集支持和更快的数据管道,支持GPU和TPU的硬件加速。TensorFlow支持多种环境部署。开发者可通过TensorFlow Serving工具将模型部署在服务器上,还可通过TensorFlow Lite工具将模型转化为可在边缘端推理的TFlite格式。特别地,TensorFlow升级至2.X版本之后可支持Eager Mode的立即执行模式,这使得它的编程更加直观和便于调试。
如果执着于由浅及深地讲授计算机视觉的基础理论,那么对读者而言会较为抽象、枯燥;如果拼凑、堆砌易于上手的实践案例,那么会落入“常用技术反复讲、关键技术脉络不清”的桎梏。因此,本书通过设计巧妙的案例,将计算机视觉技术“抽丝剥茧”,让读者在探索计算机视觉的每个学习阶段都能找到合适的项目代码并着手尝试,从而在积累基础理论知识的同时,稳步建立实践能力。
最后,为避免混淆,有必要厘清两个概念——人工智能和深度学习。人工智能是指应用计算机达到与人类智慧相当的水平,深度学习是指运用深度神经网络技术达到一定的智能水平。人工智能指向的是“效果”,深度学习指向的是“方法”,二者不可等同。实现人工智能的方法不仅有深度学习,还包含传统的信息化手段和专家逻辑判断。但以目前的技术水平,深度学习所能达到的智能水平是最高的,所以一般用人工智能来指代深度学习,也用深度学习来指代人工智能,因此本书对二者不进行严格的区分。
为何撰写本书
笔者在做以目标检测为主题的讲座报告或技术分享时,发现听众普遍对人工智能技术很感兴趣,但是又不知从何下手。目标检测技术涉及理工科多种基础知识和技能。其一是数学,涉及矩阵计算、概率分布;其二是编程,涉及计算框架API和面向对象的Python编程技巧;其三是数据处理,涉及数字图像算法和嵌入式系统。每种基础知识和技能都对应着高等教育中的一门课程,多数开发者对此似曾相识,但又理解得不够深刻。高等教育偏向于挖掘垂直领域,并没有刻意将跨领域的知识融会贯通。因此,笔者在详细讲授目标检测原理和应用之前,先详细介绍了目标检测中将会用到的关键算法,并对目标检测中最重要的骨干网络进行了由浅入深的介绍。深入理解本书所涵盖的理论知识便于读者阅读与本书紧密相关的进阶书籍《深入理解计算机视觉:在边缘端构建高效的目标检测应用》,并在目标检测的理论和实践上都达到一定的高度。
为避免读者在阅读公式和代码时感到抽象,笔者在编写过程中有意围绕较为形象的数据流阐释原理,尽量使用数据结构图来展示算法对数据的处理意图和逻辑。相信读者在理解了输入/输出数据流结构图的基础上,面对公式和代码时不会感到晦涩。
笔者发现许多企业在初期涉足人工智能时,由于对人工智能不甚了解,陷入了“模型选型→性能不理想→修改失败→尝试其他模型→再次失败”的怪圈。目前有大量的计算机视觉代码可供下载,简单配置后就能成功运行,但笔者仍建议从基础的数据集处理、特征提取网络入手,建立和解析若干个数据集,深入剖析若干个经典的神经网络,这对读者真正掌握目标检测的原理是很有帮助的。我们在工作中难免会不断更换模型,甚至不断更换框架,如果缺乏对神经网络设计的深入理解,那么对每种模型、每个框架都无法运用自如。不同模型和不同框架在本质上有异曲同工之处,笔者希望人工智能从业人员能扎实掌握某种框架下具有代表性的模型,在计算机视觉领域中自然也能有所创新。
关于本书的作者
作者本科毕业于天津大学通信工程专业,硕士研究生阶段就读于厦门大学,主攻嵌入式系统和数字信号底层算法,具备扎实的理论基础。作者先后就职于中国电信和福建省电子信息集团,目前担任福建省人工智能学会理事和企业工作委员会主任,同时也担任谷歌开发者社区、亚马逊开发者生态的福州区域负责人。作者长期从事计算机视觉和自然语言基础技术的研究,积累了丰富的人工智能项目经验,致力于推动深度学习在交通、工业、民生、建筑等应用领域的落地。作者于2017年获得高级工程师职称,拥有多项发明专利。
本书作者GitHub账号是fjzhangcr。
本书的主要内容
本书共6篇,第1篇至第4篇适合开发者和本科生快速入门计算机视觉,第5篇涉及目标检测中的特征提取网络设计原理和技巧,第6篇涉及三维计算机视觉入门和实战,适合进阶开发者和高等院校高年级学生深入了解人工智能。本书的主要内容如下。
第1篇旨在让读者快速搭建TensorFlow开发环境,并使用TensorFlow快速建立基础的神经网络。在具备开发环境的条件下,即使是第一次接触计算机视觉的新手,利用TensorFlow强大的编程能力,预计也能在10分钟内完成该篇介绍的图像分类项目。
第2篇旨在让读者快速熟悉计算机视觉的开发流程。从数据集的制作入手,延伸至神经网络的构建、编译和训练,以及神经网络静态图的边缘端和服务器端的部署,掌握该篇内容就可以应对大多数企业计算机视觉项目的研发、生产和运维。
第3篇旨在让读者深入理解深度学习的原理和TensorFlow的类继承关系。神经网络的本质是函数,该篇给出了神经网络推理和训练的数学定义,帮助开发者在神经网络的基础理论领域有所创新。该篇还介绍了TensorFlow的自动微分机制和基础类的继承关系,有助于开发者灵活地使用层和模型定义工具,将基础理论创新转化为代码编程实践。
第4篇旨在让读者熟练使用TensorFlow的重要层组件组装模型。该篇并非枯燥地介绍层组件的属性,而是通过计算机视觉神经网络的经典案例,让读者快速了解和掌握这些层组件的属性和资源开销。虽然这些神经网络只能用于图像分类,但在目标检测的计算机视觉应用中承担着特征提取的重要职责。该篇还介绍了神经网络计算加速硬件、TensorFlow的训练方法和训练过程监控,方便开发者灵活调用。
第5篇由浅及深地介绍了目标检测中的特征提取网络。该篇介绍的若干神经网络非常经典,“小核卷积”和“残差连接”是目前神经网络广泛使用的设计思路。该篇还介绍了目标检测神经网络中性能较强的特征提取骨干网络和知名计算机视觉数据集,以及如何使用预训练权重进行迁移学习。
第6篇旨在让读者了解三维机器学习领域,三维计算机视觉使用的数据表达方式与二维计算机视觉有着巨大的差别,对神经网络也有着特殊的要求。该篇在三维数据格式的基础上介绍了从二维数据重建三维物体的若干神经网络,并借助实际的编程案例展示了三维物体的识别。因为三维视觉数据在本质上是一个图,所以该篇还介绍了图计算的相关基础理论,展示了基于图卷积神经网络的具体应用。
附录中说明了本书的官方代码引用、运行环境搭建,以及TensorFlow矩阵的基本操作。读者若对基本操作有疑问,则可以根据附录说明登录相关网站进行查阅和提问。
如何阅读本书
本书适合具备一定计算机、通信、电子等理工科专业基础的本科生、研究生及具有转型意愿的软件工程师阅读。读者应当具备高等数学、线性代数、概率论、Python编程、图像处理等基础知识。上述知识有所遗忘也无大碍,本书会帮助读者进行适当的温习和回顾。
如果希望快速了解计算机视觉的整体概念,那么建议阅读本书的第1篇、第2篇。第1篇、第2篇以花卉识别的案例,介绍了计算机视觉项目从数据集到训练,再到云计算部署和边缘部署的全部流程。读者阅读这部分内容后,只需要稍微调整数据集,就可以实现个性化的计算机视觉项目。
如果希望深入掌握计算机视觉的基础原理,那么建议仔细阅读本书的第3篇、第4篇,这部分内容将介绍目标检测网络中骨干网络的结构及搭建网络必需的各种层组件,帮助读者形成触类旁通的知识沉淀。
如果希望掌握计算机视觉神经网络的设计原理,那么建议仔细阅读本书的第5篇。第5篇介绍了若干经典的骨干网络,骨干网络负责提取特征,是所有计算机视觉神经网络拥有的结构单元。掌握骨干网络的设计原理能够培养领悟计算机视觉相关文献和代码的能力,从而具备神经网络定制和开发的能力。
如果读者对二维计算机视觉已经有了较为深刻的认识,那么可以通过第6篇快速入门三维计算机视觉。虽然三维计算机视觉在数据结构和算法实现上与二维计算机视觉不同,但三维计算机视觉神经网络仍大量借鉴了二维计算机视觉的设计逻辑和层组件。
读完本书,相信读者能够掌握层组件的原理,具备多种神经网络的知识,理解二维、三维计算机视觉的异同点,熟练使用TensorFlow开发框架,从而应对复杂多变的应用场景。
本书遵循理论和实践相融合的编写原则,读者可以直接通过代码示例加深理论理解。数学是工科的基础,理论永远走在技术的前面。建议读者务必按照本书的篇章顺序,动手实践书中介绍的计算机视觉项目,从零开始打好计算机视觉基础,从而更快上手其他计算机视觉技术(如目标检测、图像分割、图像注意力机制、图像扩散模型等)。另外,需要声明的是,由于本书涉及实际工程知识较多,所以在书中习惯性地将计算机视觉称为机器视觉,机器视觉是计算机视觉在实际工程中的应用。
致谢
感谢我的家人,特别是我的儿子,是你平时提出的一些问题,推动我不断地思考人工智能的哲学和原理,这门充斥着公式和代码的学科背后其实也有着浅显和直白的因果逻辑。
感谢求学路上福州格致中学的王恩奇老师,福州第一中学的林立灿老师,天津大学的李慧湘老师,厦门大学的黄联芬老师、郑灵翔老师,是你们当年的督促和鼓励让我有能力和勇气用知识去求索技术的极限。
感谢福建省人工智能学会的周昌乐理事长,谷歌全球机器学习开发者生态的负责人Soonson Kwon,谷歌Coral产品线负责人栾跃,谷歌中国的魏巍、李双峰,北京算能科技有限公司的范砚池、金佳萍、张晋、侯雨、吴楠、檀庭梁、刘晨曦,福州十方网络科技有限公司,福建米多多网络科技有限公司,福州乐凡唯悦网络科技有限公司及那些无法一一罗列的默默支持我的专家。感谢你们一直以来对人工智能产业的关注,感谢你们对本书的关怀和支持。
感谢电子工业出版社计算机专业图书分社社长孙学瑛女士,珠海金山数字网络科技有限公司(西山居)人工智能技术专家、高级算法工程师黄鸿波的热情推动,最终促成了我将内部培训文档出版成图书,让更多的人看到。你们具有敏锐的市场眼光,你们将倾听到的致力于人工智能领域的广大开发者的心声与我分享,坚定了我将技术积淀整理成书稿进行分享的决心。在本书的整理写作过程中,你们多次邀请专家提出有益意见,对于本书的修改和完善起到了重要作用。
由于作者水平有限,书中难免存在不足之处,敬请专家和读者批评指正。
张晨然
2023年2月