# 前言 计算机视觉是一种技术,机器可以通过这种技术获得人类级别的能力来可视化,处理和分析图像或视频。 本书将重点介绍如何使用 TensorFlow 开发和训练深度神经网络,以解决高级计算机视觉问题并将解决方案部署在移动和边缘设备上。 您将以计算机视觉和深度学习的关键原理开始,并了解各种模型和体系结构以及它们的优缺点。 您将涵盖各种架构,例如 VGG,ResNet,Inception,R-CNN,YOLO 等。 您将使用转移学习来使用各种视觉搜索方法。 这本书将帮助您学习计算机视觉的各种高级概念,包括语义分割,图像修复,对象跟踪,视频分割和动作识别。 您将探索如何将各种机器学习和深度学习概念应用于计算机视觉任务,例如边缘检测和面部识别。 在本书的后面,您将重点关注性能优化以优化性能,部署动态模型以提高处理能力,以及扩展以应对各种计算机视觉挑战。 到本书结尾,您将对计算机视觉有深入的了解,并且将知道如何开发模型以自动执行任务。 # 这本书是给谁的 本书适用于计算机视觉专业人员,图像处理专业人员,机器学习工程师和 AI 开发人员,他们对机器学习和深度学习有一定的了解,并希望构建专家级的计算机视觉应用程序。 本书要求熟悉 Python 编程和 TensorFlow。 # 本书涵盖的内容 [第 1 章](../Text/1.html),*计算机视觉和 TensorFlow 基础知识*讨论了计算机视觉和 TensorFlow 的基本概念,以为您为本书的后续更高级章节做准备。 我们将研究如何执行图像哈希和过滤。 然后,我们将学习特征提取和图像检索的各种方法。 接下来,我们将学习基于轮廓的对象检测,定向梯度的直方图以及各种特征匹配方法。 然后,我们将概述高级 TensorFlow 软件及其不同的组件和子系统。 本章提供了许多用于对象检测,图像过滤和特征匹配的动手编码练习。 [第 2 章](../Text/2.html)和*使用局部二进制模式的内容识别*讨论了局部二进制特征描述符和直方图,用于对带纹理的图像和非带纹理的图像进行分类。 您将学习调整**本地二进制模式**( **LBP** )参数,并计算 LBP 之间的直方图差异以匹配图像之间的相同模式。 本章提供了两个编码练习–一个用于匹配地板图案,另一个用于将面部颜色与基础色匹配。 [第 3 章](../Text/3.html),*使用 OpenCV 和 CNN 进行面部检测*从 Viola-Jones 面部和关键特征检测开始,并继续介绍基于神经网络的面部关键码的高级概念 点检测和面部表情识别。 本章将以 3D 人脸检测的高级概念作为结尾。 本章提供了两种编码练习,一种用于网络摄像头中基于 OpenCV 的面部检测,另一种是基于 CNN 的端到端管线用于面部关键点检测。 端到端神经网络管道包括以下方面的面部图像收集:从网络摄像头裁剪面部图像,注释面部图像中的关键点,将数据摄取到 CNN 中,建立 CNN 模型,训练并最终针对面部图像评估经过训练的关键点模型 。 [第 4 章](../Text/4.html),*图像深度学习*深入研究了如何使用边缘检测在整个体积上创建卷积运算,以及不同的卷积参数(例如滤波器大小,尺寸和运算类型)如何影响 卷积量。 本章将为您提供有关神经网络如何查看图像以及图像如何使用可视化对图像进行分类的非常详细的概述。 本章提供基于 TensorFlow Keras 的编码练习,以构建神经网络并在图像通过其不同层时对其进行可视化显示。 然后,您将网络模型的准确性和可视化与诸如 VGG 16 或 Inception 之类的高级网络进行比较。 [第 5 章](../Text/5.html)和*神经网络架构和模型*探索了不同的神经网络架构和模型。 通过更改卷积,池化,激活,完全连接和 softmax 层的参数,您将了解如何将第一章和第四章中学到的概念应用于各种场景。 希望通过这些练习,您将了解一系列神经网络模型,从而为您成为计算机视觉工程师奠定坚实的基础。 [第 6 章](../Text/6.html)和*使用转移学习的视觉搜索*是您要使用 TensorFlow 将数据输入模型并为现实情况开发视觉搜索方法的地方。 您将学习如何使用 Keras 数据生成器和 TensorFlow **tf.data** API 将图像及其类别输入到 TensorFlow 模型中,然后剪切一部分预训练的模型并在最后添加自己的模型内容以进行开发 您自己的分类器。 这些练习背后的想法是学习如何在 TensorFlow 中为您在第四章和第五章中学到的神经网络模型进行编码。 [第 7 章](../Text/7.html),*使用 YOLO 进行对象检测*,介绍了两种单阶段快速对象检测方法-**只看一次**( **YOLO** ) 和 RetinaNet。 在本章中,您将学习不同的 YOLO 模型,了解如何更改其配置参数并进行推论。 您还将学习如何使用 **Darknet** 处理自己的图像,以训练自定义 **YOLO v3** 模型。 [第 8 章](../Text/8.html),*语义分割和神经样式转移*讨论了如何使用深度神经网络将图像分割为空间区域,从而生成人工图像并将样式从一个图像转移到另一个 另一个。 我们将使用 TensorFlow **DeepLab** 进行动手进行语义分割,并在 Google Colab 中编写 TensorFlow 代码以进行神经样式转换。 我们还将使用 **DCGAN** 生成人工图像,并使用 OpenCV 进行图像修复。 [第 9 章](../Text/9.html),*使用多任务深度学习的动作识别*解释了如何开发多任务神经网络模型来识别动作,例如手,嘴,头或腿的动作 ,以使用基于视觉的系统检测动作的类型。 然后,将使用手机加速度计数据通过深度神经网络模型对它进行补充,以验证操作。 [第 10 章](../Text/10.html)和*使用 R-CNN,SSD 和 R-FCN* 进行对象检测,标志着**端对端**的开始 ]( **E2E** )对象检测框架,方法是为数据摄取和训练流水线建立坚实的基础,然后进行模型开发。 在这里,您将深入了解各种对象检测模型,例如 **R-CNN** ,**单发检测器**( **SSD** , **基于区域的全卷积网络**( **R-FCN** )和**遮罩 R-CNN** ,并使用 Google Cloud 和 Google Colab 笔记本执行动手练习。 我们还将针对如何训练自己的自定义图像以使用 TensorFlow 对象检测 API 开发对象检测模型进行详细的练习。 我们将在本章结束时对各种对象跟踪方法进行深入概述,并使用 Google Colab 笔记本进行动手练习。 [第 11 章](../Text/11.html)和*通过 CPU / GPU 优化在边缘设备上进行深度学习*,讨论如何采用生成的模型并将其部署在边缘设备和生产系统上。 这将导致完整的端到端 TensorFlow 对象检测模型实现。 特别是,使用 TensorFlow Lite 和 **Intel Open** **视觉推理和神经网络** **优化**( **VINO** )架构,并部署到 Raspberry Pi,Android 和 iPhone。 尽管本章主要关注 Raspberry Pi,Android 和 iPhone 上的对象检测,但是所讨论的方法可以扩展到图像分类,样式转换和所考虑的任何边缘设备的动作识别。 [第 12 章](../Text/12.html)和*计算机视觉云计算平台*讨论了如何在 **Google Cloud Platform** ( **GCP** ), **Amazon Web Services** ( **AWS** )和 **Microsoft Azure** 云平台。 您将学习如何准备数据,将数据上传到云数据存储并开始监视培训。 您还将学习如何将图像或图像矢量发送到云平台进行分析并获得 JSON 响应。 本章讨论单个应用程序以及如何在计算引擎上运行分布式 TensorFlow。 培训结束后,本章将讨论如何评估模型并将其集成到应用程序中以进行大规模操作。 # 充分利用这本书 如果您是计算机视觉和 TensorFlow 的初学者,并且您想精通该主题,那么最好按顺序阅读本书的各个章节,而不是四处浏览。 本书以计算机视觉和神经网络的概念为基础,然后以代码示例结尾。 确保对所介绍的概念和体系结构有很好的了解,然后再应用代码示例。 由于大小限制,我们无法将图像数据上传到 GitHub。 您可以使用自己的相机中的图像,也可以从 Kaggle 下载图像数据集: * 食物图像(用于汉堡和薯条样本):使用手机相机拍摄照片。 * [Kaggle 家具检测器](https://www.kaggle.com/akkithetechie/furniture-detector) 如果您一开始不了解某个概念,请重新访问它,并阅读所有引用的论文。 大多数代码是在 Jupyter Notebook 环境中编写的,因此请确保已下载 Anaconda。 您还需要下载 TensorFlow 2.0 –为此,请按照[第 1 章](../Text/1.html),*计算机视觉和 TensorFlow 基础知识*中的说明进行操作。 使用 Google Colab 进行了许多对象检测训练– [第 10 章](../Text/10.html),*使用 R-CNN,SSD 和 R-FCN* 进行对象检测,以及[第 11 章](../Text/11.html) *具有 CPU / GPU 优化功能的边缘深度学习*提供了有关如何使用 Google Colab 的说明。 如果您要将计算机视觉代码部署到边缘设备,并且正在考虑购买什么,请访问[第 11 章](../Text/11.html)和*具有 CPU / GPU 优化功能的边缘设备深度学习*, 各种设备的详细分析。 该书在很大程度上依赖于终端的用法-在阅读[第 7 章](../Text/7.html),*,使用 YOLO* 进行对象检测之前,请确保您已经对此有了基本的了解。 [第 12 章](../Text/12.html)和*计算机视觉云计算平台*处理云计算,因此您必须为此拥有 Amazon Web Services,Azure 或 Google Cloud Platform 帐户。 如果您不跟踪自己的时间,云计算可能会变得昂贵。 许多提供商会在一段时间内让您免费使用服务,但是在那之后,即使您的项目仍未开放,即使您没有接受培训,费用也会增加。 请记住,在结束帐户以停止产生费用之前,请先关闭您的项目。 如果您对云计算有技术问题并且感到困惑,则可以阅读相关云计算平台的文档。 另外,您可以付费打开技术工作票; 通常会在 1-2 个工作日内解决这些问题。 充分利用本书的最佳方法是阅读理论,了解为什么要以这种方式开发模型,尝试样例练习,然后更新代码以适合您的需求。 如果您对本书的任何部分有任何疑问并陷入困境,可以随时通过 [LinkedIn](https://www.linkedin.com/in/krish-kar-554739b2/ext) 与我联系。 # 下载示例代码文件 您可以从 [www.packt.com](http://www.packt.com) 的帐户中下载本书的示例代码文件。 如果您在其他地方购买了此书,则可以访问 [www.packt.com/support](http://www.packt.com/support) 并注册以将文件直接通过电子邮件发送给您。 您可以按照以下步骤下载代码文件: 1. 登录或注册 [www.packt.com](http://www.packt.com) 。 2. 选择支持选项卡。 3. 单击代码下载和勘误。 4. 在搜索框中输入书籍的名称,然后按照屏幕上的说明进行操作。 下载文件后,请确保使用以下最新版本解压缩或解压缩文件夹: * Windows 的 WinRAR / 7-Zip * Mac 版 Zipeg / iZip / UnRarX * 适用于 Linux 的 7-Zip / PeaZip 本书的代码包也托管在 [GitHub](https://github.com/PacktPublishing/Mastering-Computer-Vision-with-TensorFlow-2.0) 上。 如果代码有更新,它将在现有的 GitHub 存储库中进行更新。 我们还从[这里](https://github.com/PacktPublishing/)提供了丰富的书籍和视频目录中的其他代码包。 去看一下! # 下载彩色图像 我们还提供了 PDF 文件,其中包含本书中使用的屏幕截图/图表的彩色图像。 [您可以在此处下载](https://static.packt-cdn.com/downloads/9781838827069_ColorImages.pdf)。 # 使用约定 本书中使用了许多文本约定。 `CodeInText`:指示文本,数据库表名称,文件夹名称,文件名,文件扩展名,路径名,虚拟 URL,用户输入和 Twitter 句柄中的代码字。 这是一个示例:“使用`OpenCV BGR2GRAY`命令将每个读取的图像转换为灰度”。 代码块设置如下: ```py faceresize = cv2.resize(detected_face, (img_size,img_size)) img_name = "dataset/opencv_frame_{}.jpg".format(img_counter) cv2.imwrite(img_name, faceresize) ``` **粗体**:表示新术语,重要单词或您在屏幕上看到的单词。 例如,菜单或对话框中的单词会出现在这样的文本中。 这是一个示例:“ **卷积神经网络**( **CNN** )是计算机视觉中用于分类和检测对象的最广泛使用的工具。” 警告或重要提示如下所示。 提示和技巧如下所示。 # 保持联系 始终欢迎读者的反馈。 **一般反馈**:如果您对本书的任何方面有疑问,请在邮件主题中提及书名,并通过`customercare@packtpub.com`向我们发送电子邮件。 **勘误表**:尽管我们已尽一切努力确保内容的准确性,但还是会发生错误。 如果您在这本书中发现错误,请向我们报告,我们将不胜感激。 请访问 [www.packt.com/submit-errata](http://www.packt.com/submit-errata) ,选择您的书籍,点击勘误提交表格链接,然后输入详细信息。 **盗版**:如果您在 Internet 上以任何形式遇到我们的作品的任何非法副本,请向我们提供位置地址或网站名称,我们将不胜感激。 请通过`copyright@packt.com`与我们联系,并提供材料链接。 **如果您有兴趣成为作家**:如果您有一个专业的话题并且对写作或撰写书籍感兴趣,请访问 [authors.packtpub.com](http://authors.packtpub.com/) ]。 # 评论 请留下评论。 阅读和使用本书后,为什么不在您购买本书的网站上留下评论? 然后,潜在的读者可以查看并使用您的公正意见来做出购买决定,Packt 的我们可以了解您对我们产品的看法,我们的作者可以在书中看到您的反馈。 谢谢! 有关 Packt 的更多信息,请访问 [packt.com](http://www.packt.com/) 。