深入理解计算机视觉:在边缘端构建高效的目标检测应用
  • 推荐0
  • 收藏0
  • 浏览35

深入理解计算机视觉:在边缘端构建高效的目标检测应用

张晨然 (作者)  孙学瑛 (责任编辑)

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

张晨然
2023年4月

目录

第1篇 一阶段目标检测神经网络的结构设计
第1章 目标检测的竞赛和数据集 2
1.1 计算机视觉坐标系的约定和概念 2
1.1.1 图像的坐标系约定 2
1.1.2 矩形框的描述方法约定 3
1.2 PASCAL VOC竞赛和数据集 6
1.2.1 PASCAL VOC竞赛任务和数据集简介 6
1.2.2 PASCAL VOC2007数据集探索 8
1.3 MS COCO挑战赛和数据集 14
1.3.1 MS COCO挑战赛的竞赛任务 14
1.3.2 MS COCO数据集简介 17
1.4 目标检测标注的解析和统计 18
1.4.1 XML文件的格式 18
1.4.2 XML文件解析和数据均衡性统计 20
第2章 目标检测神经网络综述 24
2.1 几个著名的目标检测神经网络 24
2.1.1 R-CNN家族神经网络简介 25
2.1.2 YOLO和SSD神经网络简介 28
2.1.3 CenterNet神经网络简介 30
2.1.4 U-Net神经网络简介 31
2.2 目标检测神经网络分类和高阶API资源 32
2.3 矩形框的交并比评价指标和实现 34
第3章 一阶段目标检测神经网络的特征融合和中段网络 40
3.1 一阶段目标检测神经网络的整体结构 40
3.2 一阶段目标检测神经网络的若干中段网络介绍 41
3.2.1 单向融合的中段网络 41
3.2.2 简单双向融合的中段网络 43
3.2.3 复杂双向融合的中段网络 45
3.3 不同融合方案中段网络的关系和应用 46
3.4 YOLO的多尺度特征融合中段网络案例 47
3.4.1 YOLOV3的中段网络及实现 48
3.4.2 YOLOV4的中段网络PANet及实现 52
3.4.3 YOLOV3-tiny和YOLOV4-tiny版本的中段网络及实现 58
3.5 神经网络输出的解码 62
3.5.1 融合特征图的几何含义 62
3.5.2 矩形框中心点坐标的解码 65
3.5.3 矩形框宽度和高度的解码 67
3.5.4 前背景概率和分类概率的解码 69
3.5.5 矩形框角点坐标和解码函数整体输出 70
第4章 一阶段目标检测神经网络典型案例——YOLO解析 73
4.1 YOLO家族目标检测神经网络简介 73
4.2 先验锚框和YOLO神经网络的检测思路 74
4.2.1 用人为设定方式找到的先验锚框 74
4.2.2 用聚类回归方式找到的先验锚框 76
4.2.3 YOLO的先验锚框编号 79
4.2.4 YOLO的XYSCALE和缩放比参数 81
4.3 建立YOLO神经网络 82
4.3.1 根据选择确定YOLO神经网络参数 83
4.3.2 建立骨干网络、中段网络和预测网络 84
4.3.3 加上解码网络后建立完整的YOLO模型 86
4.4 YOLO神经网络的迁移学习和权重加载 89
4.4.1 骨干网络关键层的起止编号 89
4.4.2 中段网络和预测网络关键层的起止编号 93
4.4.3 YOLO模型的权重加载 100
4.5 原版YOLO模型的预测 107
4.5.1 原版YOLO模型的建立和参数加载 107
4.5.2 神经网络的输入/输出数据重组 108
4.6 NMS算法的原理和预测结果可视化 111
4.6.1 传统NMS算法原理 112
4.6.2 NMS算法的变种 116
4.6.3 预测结果的筛选和可视化 121
4.7 YOLO模型的多个衍生变种简介 124
4.8 YOLO模型的发展与展望 127
第2篇 YOLO神经网络的损失函数和训练
第5章 将数据资源制作成标准TFRecord数据集文件 130
5.1 数据资源的加载 130
5.2 数据资源的解析和提取 135
5.3 TFRecord数据集文件的制作 139
5.4 单样本的example对象制作 139
5.5 遍历全部样本制作完整数据集 144
5.6 从数据集提取样本进行核对 145
第6章 数据集的后续处理 150
6.1 数据集的加载和打包 150
6.1.1 数据集的加载和矩阵化 150
6.1.2 图像矩阵尺寸的标准化 153
6.1.3 真实矩形框标注矩阵尺寸的标准化 158
6.1.4 数据集的打包处理 159
6.2 将原始数据集打包为可计算数据集 163
6.2.1 计算真实矩形框与先验锚框的匹配度排名 164
6.2.2 找到真实矩形框所对应的网格下的先验锚框 169
6.2.3 可计算数据集测试 177
第7章 一阶段目标检测的损失函数的设计和实现 181
7.1 损失函数框架和输入数据的合理性判别 182
7.2 真实数据和预测数据的对应和分解 184
7.3 预测矩形框的前背景归类和权重分配 188
7.4 预测矩形框的误差度量 192
7.4.1 用中心点表示的位置误差 192
7.4.2 用宽度和高度表示的位置误差 192
7.4.3 用通用交并比表示的矩形框误差 194
7.4.4 用距离交并比表示的矩形框误差 198
7.4.5 用完整交并比表示的矩形框误差 200
7.4.6 用交并比量化矩形框预测误差的实践 206
7.5 前景和背景的预测误差 208
7.5.1 前景误差和背景误差的定义 208
7.5.2 样本均衡原理和Focal-Loss应用 209
7.6 分类预测误差 212
7.7 总误差的合并和数值合理性确认 213
第8章 YOLO神经网络的训练 217
8.1 数据集和模型准备 217
8.1.1 参数配置 217
8.1.2 数据集预处理 220
8.1.3 模型参数加载和冻结 223
8.2 动态模式训练 225
8.2.1 监控指标的设计和日志存储 225
8.2.2 动态模式下神经网络的训练和调试 230
8.3 训练中非法数值的监控和调试 237
8.3.1 发现和监控非法数值计算结果 237
8.3.2 计算结果出现非法数值的原因和对策 240
8.4 静态模式训练和TensorBoard监控 244
第3篇 目标检测神经网络的云端和边缘端部署
第9章 一阶段目标检测神经网络的云端训练和部署 250
9.1 一阶段目标检测神经网络的推理模型设计 250
9.1.1 一阶段目标检测神经网络的推理形态 250
9.1.2 推理场景下的数据重组网络 251
9.1.3 构造推理场景下的YOLO模型函数 254
9.1.4 构造和测试YOLO推理模型 255
9.2 目标检测推理模型的云端部署 256
9.2.1 亚马逊EC2云计算实例选型 257
9.2.2 使用云端服务器部署模型并响应推理请求 257
9.3 在亚马逊SageMakerStudio上训练云计算模型 259
第10章 神经网络的INT8全整数量化原理 262
10.1 神经网络量化模型的基本概念 262
10.1.1 神经网络量化模型速览和可视化 262
10.1.2 浮点数值的量化存储和计算原理 268
10.2 神经网络量化模型的制作和分析 273
10.2.1 算子的映射和合并 273
10.2.2 量化参数搜索和代表数据集 276
10.2.3 TFLite量化模型的算子和张量分析 279
10.3 量化性能分析和量化模型的逐层调试 289
10.3.1 量化信噪比分析原理 289
10.3.2 量化模型的单层误差调试 294
10.3.3 量化模型的误差累积调试 296
10.4 不支持算子的替换技巧 300
10.4.1 大动态范围非线性算子替换原理 301
10.4.2 大动态范围非线性算子替换效果 303
第11章 以YOLO和Edge TPU为例的边缘计算实战 305
11.1 TensorFlow模型的量化 307
11.1.1 量化感知训练获得INT8整型模型 308
11.1.2 训练后量化获得INT8整型模型 313
11.2 神经网络模型的编译 315
11.2.1 模型编译的工作原理 315
11.2.2 在Edge TPU上部署模型的注意事项 318
11.3 YOLO目标检测模型的量化和编译 321
11.3.1 YOLO变种版本选择和骨干网络修改 321
11.3.2 针对硬件限制进行解码网络的修改 322
11.3.3 预测矩阵的汇总重组 325
11.3.4 YOLO推理模型的建立 327
11.3.5 YOLO模型的量化 329
11.3.6 量化模型的测试和信噪比分析 331
11.4 YOLO量化模型的编译和边缘端部署 337
11.4.1 量化模型转换为编译模型 337
11.4.2 编写边缘端编译模型推理代码 341
第4篇 个性化数据增强和目标检测神经网络性能测试
第12章 个性化目标检测数据集处理 346
12.1 农村公路占道数据的目标检测应用 346
12.1.1 项目数据背景 346
12.1.2 数据的预处理 347
12.2 数据的增强 350
12.2.1 数据增强技术的概念和效果 350
12.2.2 基于空间变换的数据增强方法 351
12.2.3 基于颜色空间的数据增强方法 354
12.2.4 其他图像数据的增强手法 357
12.2.5 图像数据集的增强工具和探索工具 360
12.3 使用Albumentations进行数据增强 361
12.3.1 Albumentations的安装和使用 361
12.3.2 几何数据增强管道的配置 362
12.3.3 使用数据管道处理并保存数据 364
12.3.4 像素数据增强管道的配置 366
12.3.5 增强数据集的运用 367
第13章 模型性能的定量测试和决策阈值选择 368
13.1 神经网络性能量化的基本概念 368
13.1.1 神经网络预测的混淆矩阵 368
13.1.2 神经网络量化评估和P-R曲线 369
13.1.3 多分类目标检测场景和平均精确率均值 371
13.1.4 F分数评估方法 372
13.2 餐盘识别神经网络性能测试案例 373
13.2.1 项目背景 373
13.2.2 提取全部真实数据和预测结果 375
13.2.3 模拟不同决策阈值下的精确率和召回率 378
第14章 使用边缘计算网关进行多路摄像头目标检测 385
14.1 边缘计算网关的整体结构 385
14.1.1 核心TPU组件 385
14.1.2 计算卡和模组 386
14.1.3 下位机的操作系统 387
14.1.4 下位机的开发环境简介 388
14.2 开发环境准备 392
14.2.1 上位机安装Docker 392
14.2.2 上位机装载镜像和SDK开发包 393
14.2.3 神经网络工具链和主要用途 397
14.2.4 针对TensorFlow模型的编译方法 398
14.3 浮点32位模型部署的全流程 399
14.3.1 训练主机将Keras模型转换为单pb模型文件 399
14.3.2 上位机将单pb模型文件编译为bmodel模型文件 400
14.3.3 下位机读取和探索bmodel模型文件 402
14.3.4 下位机使用bmodel模型文件进行推理 406
14.4 边缘端全整数量化模型部署 410
14.4.1 在上位机Docker内制作代表数据集 410
14.4.2 在上位机Docker内生成fp32umodel模型文件 412
14.4.3 手动增加fp32umodel模型文件的输入层映射算子 414
14.4.4 对fp32umodel模型文件进行优化 415
14.4.5 在上位机Docker内将fp32umodel模型文件编译为int8umodel模型文件 416
14.4.6 umodel模型文件的调试技巧 418
14.5 模型的编译和部署 419
14.5.1 上位机将int8umodel模型文件编译为bmodel模型文件 419
14.5.2 全整数量化int8bmodel模型文件的边缘端推导和测试 422
14.5.3 编译模型在边缘计算网关上的性能测试 423
第15章 边缘计算开发系统和RK3588 427
15.1 RK3588边缘推理开发系统结构 427
15.1.1 开发板和核心芯片架构 427
15.1.2 开发板操作系统和调试环境 429
15.2 开发工具链和神经网络模型部署 431
15.2.1 上位机开发环境配置 431
15.2.2 上位机的模型转换 433
15.2.3 下位机使用编译模型进行推理 439
15.2.4 RK3588的算子调试技巧 443
第5篇 三维计算机视觉与自动驾驶
第16章 三维目标检测和自动驾驶 448
16.1 自动驾驶数据集简介 448
16.2 KITTI数据集计算原理 450
16.3 自动驾驶的点云特征提取 461
附录A 官方代码引用说明 469
附录B 本书运行环境搭建说明 471
附录C TensorFlow矩阵基本操作 473
参考文献 474

读者评论