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