首页>参考读物>计算机科学与技术>人工智能

OpenCV深度学习应用与性能优化实践
作者 : 吴至文 郭叶军 宗炜 李鹏 赵娟 著
出版日期 : 2020-06-05
ISBN : 978-7-111-65646-3
定价 : 89.00元
扩展资源
扩展信息
语种 : 简体中文
页数 : 300
开本 : 16
原书名 :
原出版社:
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

Intel音视频团队与阿里巴巴图像处理专家联合撰写,知名专家联袂推荐,深入解析OpenCV DNN 模块、基于GPU/CPU的加速实现、性能优化技巧与可视化工具,以及人脸活体检测(完整案例)与主流识别项目解析。
第1~2章介绍了OpenCV编译、运行,深度学习模块(Open DNN)的架构、实现原理,以及深度学习的数学基础与如何快速上手。
第3~5章主要介绍了OpenCV的GPU加速原理,涵盖必要的并行计算知识、Intel GPU硬件结构,以及OpenCL和Vulkan加速实现,是性能优化工作的核心。
第6章介绍了CPU的硬件知识,以及深度学习模块的CPU加速方法,重点讲解了指令集SIMD加速,讨论了Halide后端加速、OpenVINO(Intel推理引擎)加速。
第7章介绍了常用的深度神经网络可视化工具——TensorBoard(适用于TensorFlow网络格式),Netscope(适用于Caffe网络格式),针对Intel硬件平台的性能调优工具VTune,以及高阶程序优化的思路和方法。
第8~9章重点讲解实践细节,包括用深度学习方法处理计算机视觉的基本问题,以及一个完整的人脸活体检测项目与主流识别项目解析。

图书特色

Intel音视频团队与阿里巴巴图像处理专家联合撰写,知名专家傅文庆、邹复好、Vadim Pisarevsky、周强(CV君)联袂推荐
深入解析OpenCV DNN 模块、基于GPU/CPU的加速实现、性能优化技巧与可视化工具,以及人脸活体检测等应用

图书前言

为什么要写这本书
图像和视频由最基本的点(像素)组成,众多的像素按照一定规则排列组成了我们所熟知的图像,一系列的图像组成了我们所认识的视频。从2013年开始,随着智能手机的普及,全球进入了大数据时代。除了数据本身的多样性,文件数目呈指数级增加,数据的大小也在大规模增长。其中,最典型的是图像和视频数据的爆发式增长,这不仅源于分辨率和帧率的不断提高(分辨率从标清到高清,从4K到8K,帧率从25FPS、60FPS到120FPS),更多是源于采集设备的多样化和各种基于图像视频的社交软件的流行。图像和视频数据的分析与处理已经在目前的大数据处理中占据了举足轻重的地位。如何对图像和视频数据进行高效快捷的分析与处理是摆在软件工程师面前的一个重要问题,而OpenCV是我们解决这个问题的一个很好选择。
OpenCV是一个计算机视觉开源软件库,它提供了大量的图像视频处理的算法工具。在最近几年,随着深度学习的爆发,计算机视觉的算法研究全面转向了深度学习方法,OpenCV也应需增加了对深度学习的支持。目前,OpenCV已经广泛应用于基于深度学习的图像分析处理领域,具体的应用场景包括但不限于右图展示的各领域。
我们团队的伙伴们深耕在视频处理和框架领域十几年。近几年,在开源深度学习框架的GPU加速方面相继有了很多积累。与此同时,我们时常会收到来自各方的关于OpenCV和深度学习的咨询,内容从初步入门到高级结构和应用,不一而足。于是,我们就萌生了把所积累的知识以中文图书的形式分享给更多人的想法。
作者团队
吴至文曾为OpenCV贡献了Vulkan加速代码,在2018年欧洲嵌入式Linux峰会(Embedded Linux Summit Europe 2018)上分享了OpenCV中深度学习总体结构、实现细节和硬件加速相关的话题(见下图)。演讲材料可以在Linux基金会的官网下载。

郭叶军是FFmpeg深度学习模块的代码维护者,曾参与开源的OpenCL驱动(Beignet)的开发,参与向Khronos OpenCL提供了两个扩展库:cl_intel_acceleerator和cl_intel_motion_estimation。他也是本书主要架构的贡献者,在2019年5月参与本书的整体重构和重写时,对作者团队提出了更高的质量目标要求,几乎重写了之前的14万字内容,使书稿达到目前的可以出版的状态。
我是视频处理和框架团队的研发经理,于2018年与2019年的中国架构师大会(http://sacc.it168.com/)上分别介绍了OpenCV深度学习和AI在FFmpeg/Gstrea项目libxcam(github/intel/libxcam)的维护者,为图像处理算法提供了CPU指令集级别的加速,对图形图像处理、摄像头相关软件开发和视频处理有很深的认识。我们参加CVPR会议的Face Antispoof官方源代码也存放在libxcam项目中。
我们团队的前成员李鹏为OpenCV深度学习模块提供了OpenCL FP32和FP16的加速方法。这里面的贡献包含了团队前成员龚志刚在clCaffe加速工作中的基本思想。
本书的贡献者还包括来自华中科技大学的张鹏、李雨霏和来自湖南大学的陈祎婧。
我们希望借这次撰写OpenCV深度学习书籍的机会和大家分享一下我们的技术积累,打破语言的壁垒,方便更多的国内开发者获利于开源、反馈开源,让开源开发方式可以更好地助力科技发展,创造更大的社会价值。
本书特色
本书由资深架构师利用业余时间倾情奉献,他们很多是OpenCV贡献者、算法的开发者。本书还特别结合硬件结构、优化的流程和方法,保证内容深度的同时注重实用性和可操作性,因此本书适合从初学者、高级工程师到架构师的各层面读者。
读者对象
图像视频处理架构师;
图像视频开发人员;
图像视频应用架构师;
深度学习应用开发人员;
深度学习算法工程师;
图像视频相关的管理人员;
其他对视频技术感兴趣的人员。
如何阅读本书
我们希望读者可以准备一个运行环境,一边运行代码,一边阅读本书。OpenCV是一个开源的计算机视觉库,它的开发和维护都遵循开源软件的工作方式,而开源作为一种软件开发方式正在被越来越多的公司和组织所采用。我们希望读者在学习过程中能够积累一些开源软件的使用和调试技巧,迈出探索开源世界的第一步。下面是本书的脉络,供读者参考。

第1章首先介绍OpenCV的背景和基础,以及机器学习、深度学习的基础知识,在第1章结束时从一个简单对象分类的例子开始展开介绍如何使用OpenCV深度学习模块。
第2章主要介绍OpenCV深度学习模块的架构和实现原理。为了使读者更好地理解深度学习模块,第2章首先介绍深度学习的数学基础,然后从程序员的角度去解析深度学习的结构。接着从深度学习模块的分层架构展开,结合语言绑定及不同的正确性/性能测试以更进一步地了解OpenCV深度学习模块。接下来从使用者的角度,介绍深度学习模块相关的函数接口、Layer类、Net类。然后深入地介绍DNN引擎的实现,内容包括模型导入、推理引擎内存分配,以及卷积、激活、池化、全连接等典型层类型的原理讲解。第2章还将介绍深度学习架构层面的优化方法,如层的融合、内存的复用等。最后介绍深度学习模块支持的各种加速方法和硬件设备,以及如何使用它们。
在理解了深度学习模块的架构和实现原理之后,我们继续从GPU、CPU及第三方库的角度深入探讨深度学习模块的加速实现。
第3~5章的主题是利用GPU的并行计算能力加速深度学习计算。第3章讨论并行计算的基础知识和Intel GPU的硬件结构。在此基础上,第4章和第5章将详细讲解深度学习模块的OpenCL和Vulkan加速。
第6章将讨论CPU的硬件知识,以及深度学习模块的CPU加速方法。读者可以了解到OpenCV中使用到的各种CPU加速的技巧,如指令集SIMD加速的具体方法。近些年,Halide语言因其跨平台特点备受开发者的关注。OpenCV也引入了Halide的加速方法,所以本书也向读者深入浅出地谈了Halide,以及基于Halide的深度学习模块加速。Intel的OpenVINO软件包提供了各种Intel硬件平台(包括CPU、GPU、FPGA、Movidius)的深度学习加速实现,在OpenCV中也有引入,对应的是Intel推理引擎后端,该章也将做详细介绍。
第7章将介绍常用的深度神经网络可视化工具TensorBoard(适用于TensorFlow网络格式)和Netscope(适用于Caffe网络格式)。本章将详细讲解针对Intel硬件平台的性能分析和调优工具VTune。第7章最后给出了高阶程序优化的思路和方法。
本书的另一个重点是应用实践。在第8章和第9章中,我们讲解基于深度学习的应用实践的具体细节,包括用深度学习方法处理计算机视觉的基本问题及一个完整的、实践性很强的人脸识别项目。
请看到本书的学生关注一下Google Summer of Code项目,之前很多年OpenCV社区就多次参加过,我所在的Intel Media and Audio团队已经作为导师组连续带了三届学生。学生们可领项目为开源社区做一些贡献。开源社区欢迎大家积极贡献代码,不管是提供新的例子,还是修掉某个小问题,或者提交新的功能。
勘误和支持
由于笔者水平有限,编写时间仓促,书中难免会出现一些错误或者不准确的地方,恳请读者批评指正。如果你有更多的宝贵意见,欢迎给我们发电子邮件,作者电子邮箱:zhaojuanamy@163.com。你也可以通过机械工业出版社联系我们,期待能够得到你们的真挚反馈,在技术之路上互勉共进。本书配套资源可到www.hzbook.com本书所在页面下载。
致谢
特别感谢我们的领导傅文庆,一年半以来一直支持、鼓励我们,直到我们将这本书完成。
特别感谢来自湖南大学的陈祎婧、来自华中科技大学的张鹏。他们贡献了第8章,为读者展示了一个完整的端到端人脸识别应用的开发细节。
特别感谢来自华中科技大学的李雨霏利用自己的业余时间,贡献了语义分割部分的内容,并提出自己的见解,更好、更完善地向读者展示语义分割。
特别感谢我的同事宋瑞岭对本书的校验及在OpenCL、GPU/CPU方面的补充和讨论。
特别感谢我的同事付挺、傅林捷对初稿的仔细审阅。
尽信书不如无书,大家还是需要结合自己的平台来实验。

赵娟

上架指导

计算机/人工智能/深度学习与神经网络

封底文字

本书的作者们长期从事图形图像和视频编解码处理的算法研究、软件的功能实现及性能加速,各自在OpenCV项目里都有重要贡献,直至成为一些模块的维护者。本书从OpenCV入门,结合行业热点,花更多笔墨于机器学习相关实现、平台相关的性能优化,更贴近实战,为学生、工程技术人员提供了实用价值。
—— 傅文庆,Intel公司系统软件产品事业部研发总监
本书讲解了各种计算架构下深度学习的计算优化和加速,列举了一些精准实用的项目样例,内容不仅涵盖全面详尽的算法原理,还解释分析相关源代码和实践结果。本书对深度学习的最新发展趋势和主要研究方向进行了全面而综合的介绍,从不同的用户场景出发,对算法做了深度的分析和详细的解释,能够满足初学者对于各种计算机视觉应用的需求。
—— 邹复好,华中科技大学计算机学院教授
本书由Intel中国团队的成员编写,他们优化了OpenCV DNN模块在GPU上的性能。本书包含一些深度的第一手信息,这些信息在其他地方很难找到。其中包括一些很少讨论的话题,如OpenCL、Vulkan、OpenCV DNN和Halide后端。
—— Vadim Pisarevsky,OpenCV团队主管
本书深入解析了OpenCV DNN模块,详述了深度学习引擎的性能优化策略,介绍了在GPU和CPU上进行计算加速的方法,并通过几个案例展示如何在OpenCV中使用深度学习,最后则带着大家完整实现一个人脸活体检测、识别的大项目。书中提供的案例,紧跟技术前沿,贴近实际应用场景,相信对从事工程项目开发的读者也非常有参考价值。
—— 周强(CV君),“我爱计算机视觉”公众号负责人

图书目录

序一
序二
序三
序四
前言
第1章OpenCV和深度学习 1
1.1 OpenCV处理流程 1
1.1.1 OpenCV库 1
1.1.2 OpenCV深度学习应用的典型流程 3
1.2 机器学习的数学视角 5
1.2.1 机器学习和非机器学习 5
1.2.2 从人工神经网络到深度学习 8
1.2.3 破除神秘——神经网络是如何训练的 11
1.3 OpenCV深度学习模块 16
1.3.1 主要特性 16
1.3.2 OpenCV DNN图像分类举例(Python) 17
1.4 本章小结 19
第2章OpenCV深度学习模块解析 20
2.1 深度学习模块分层架构总览 20
2.2 语言绑定和测试层 21
2.2.1 深度学习模块的Python语言绑定 21
2.2.2 深度学习模块的正确性测试和性能测试 23
2.3 API层 30
2.3.1Layer 30
2.3.2Net 32
2.3.3 35
2.4DNN 37
2.4.1 37
2.4.2 推理引擎数据对象管理 43
2.4.3 推理引擎重点层解释 47
2.4.4 层的合并优化 62
2.5 引擎加速层 66
2.5.1 深度学习模块支持的运算目标设备 67
2.5.2 深度学习模块支持的加速后端 68
2.5.3 加速方式的选择 69
2.6 本章小结 70
第3章并行计算与GPU架构 71
3.1 并行计算浅谈 71
3.2 Intel GPU架构及其在并行计算中的应用 74
3.2.1Intel GPU 74
3.2.2SIMD棗AOSSOA 82
3.2.3cl_intel_subgroupsIntel GPU 89
3.3 100
4基于Vulkan的加速实现 101
4.1 初识Vulkan 101
4.2 使用Vulkan加速 102
4.3 Vulkan后端加速过程解析 104
4.3.1 数据对象初始化 105
4.3.2 后端运算节点初始化 108
4.3.3 调用后端运算节点进行前向运算 111
4.3.4 Vulkan后端库 113
4.4 本章小结 119
第5章基于OpenCL的加速实现 120
5.1 OpenCL简介 120
5.2 如何使用OpenCL加速 125
5.3 OpenCL加速详解 128
5.3.1 OpenCL API封装 129
5.3.2 DNN模块的卷积层实现详解 132
5.3.3 ocl4dnn库的卷积运算类详解 134
5.3.4 卷积核函数auto-tuning机制解析 138
5.4 本章小结 143
第6章CPU及第三方库加速的实现 144
6.1 原生CPU加速实现 144
6.1.1 基于多线程技术的加速 147
6.1.2 基于并行指令的加速 153
6.2 Halide后端的实现 157
6.2.1 Halide介绍 158
6.2.2 如何启用Halide 163
6.2.3 Halide后端的实现原理 165
6.3 Intel推理引擎后端的实现 171
6.3.1 Intel推理引擎介绍 171
6.3.2 如何启用推理引擎后端 172
6.3.3 Intel推理引擎后端的实现原理 176
6.4 本章小结 185
第7章可视化工具与性能优化 186
7.1 Netscope:基于Web的Caffe网络可视化工具 186
7.2 TensorBoard:助力TensorFlow程序的理解和调试 188
7.2.1 图的可视化 188
7.2.2 数据的可视化 191
7.2.3 调试的可视化 197
7.3VTuneIntel 199
7.3.1 200
7.3.2Intel VTune 202
7.3.3VTune 211
7.4 程序优化流程总结和建议 213
7.5 本章小结 215
第8章支付级人脸识别项目开发实战 216
8.1 活体检测的概念与方法 216
8.2 支付级人脸识别项目流程 218
8.3 基于OpenCV的支付级人脸识别项目具体实现 220
8.3.1 数据准备 222
8.3.2 活体检测模型训练 230
8.3.3 支付级人脸识别系统实现 238
8.4 本章小结 244
第9章深度学习模块不同场景下的应用实践 245
9.1 图像分类 245
9.1.1 图像分类经典网络结构 245
9.1.2 GoogLeNet 247
9.1.3 图像分类程序源码分析 249
9.1.4 图像分类程序运行结果 255
9.2 目标检测 256
9.2.1 SSD算法解析 256
9.2.2 目标检测程序源码分析 257
9.2.3 目标检测程序运行结果 260
9.3 语义分割 261
9.3.1 FCN模型 262
9.3.2 语义分割程序源码分析 263
9.3.3 语义分割程序运行结果 267
9.4 视觉风格变换 268
9.4.1 视觉风格变换模型 268
9.4.2 视觉风格变换程序源码分析 269
9.4.3 视觉风格变换程序运行结果 271
9.5 本章小结 273
附录AOpenCV的编译安装及patch开发流程 274
附录Bintel_gpu_frequency工具的安装和使用 280

教学资源推荐
作者: (英)Simon Rogers, Mark Girolami 著
作者: (希腊)Sergios Theodoridis,Konstantinos Koutroumbas
作者: (美)Fredric M.Ham,Ivica Kostanic
作者: [日]上田淳(Jun Ueda) 栗田雄一(Yuichi Kurita) 编著
参考读物推荐
作者: [印度]克里希纳·巴夫萨(Krishna Bhavsar) 纳雷什·库马尔(Naresh Kumar) 普拉塔普·丹蒂(Pratap Dangeti) 著
作者: [美] 罗伊·希尔克罗特(Roy Shilkrot),[西班牙] 大卫·米兰·埃斯克里瓦(David Millán Escrivá) 著
作者: [印度]郎坦·约瑟夫(Lentin Joseph)[意大利]乔纳森·卡卡切(Jonathan Cacace) 著