本书探讨了谷歌机器学习开源框架的全新版本TensorFlow 2,从计算机视觉和深度学习基础知识开始,介绍了如何从头开始构建神经网络,并将其用于计算机视觉任务,如图像分类、目标分割、视频分析等。展示了如何使用如Inception和ResNet等现代神经网络分类图像,使用YOLO、Mask R-CNN和U-Net提取特定内容,并辅以具体的代码示例。还介绍了迁移学习、数据增强、域适应等技术,以及如何在移动设备和网络浏览器中进行部署。
计算机视觉解决方案日益普及,在医疗、汽车、社交媒体和机器人等领域取得了不错的进展。本书将帮助你了解全新版本的谷歌机器学习开源框架TensorFlow 2,你将掌握如何使用卷积神经网络(CNN)完成视觉任务。本书从计算机视觉和深度学习基础知识开始,教你如何从头开始构建神经网络。你将掌握一些让TensorFlow成为广泛使用的AI库的特性,以及直观的Keras接口,继而高效地构建、训练和部署CNN。通过具体的代码示例,本书展示了如何使用Inception和ResNet等现代神经网络分类图像,以及如何使用YOLO、Mask R-CNN和U-Net提取特定内容。本书还将介绍如何构建生成式对抗网络(GAN)和变分自编码器(VAE)来生成和编辑图像,以及如何使用LSTM分析视频。在此过程中,你将深入了解迁移学习、数据增强、域适应,以及移动设备和Web部署等高级知识以及其他关键概念。通过阅读本书,你将获得使用TensorFlow 2解决高级计算机视觉问题的理论知识和实际技能。
由于利用了卷积神经网络(Convolutional Neural Network,CNN)等深度学习方法,计算机视觉技术在医疗、自动驾驶、社交媒体和机器人等领域的应用达到新的高度。无论是自动处理复杂的任务,指导专家的工作,还是帮助艺术家创作,越来越多的公司都在应用计算机视觉解决方案。
本书将探讨TensorFlow 2,这是谷歌机器学习开源框架的全新版本。书中介绍Tensor- Flow 2的关键特性和的解决方案,并演示如何有效地构建、训练和部署CNN,以完成各种实际任务。
读者对象
本书适用于任何具备一定Python编程和图像处理基础(例如,知道如何读取和写入图像文件,如何编辑其像素值等)的从业人员。本书将循序渐进地介绍相关内容,不仅适用于深度学习初学者,也适用于对TensorFlow 2的新特性感兴趣的专家。
虽然一些理论解释需要代数和微积分知识,但是书中的具体例子更侧重于实际应用。按照所述步骤,你将能够处理现实生活中的任务,比如自动驾驶汽车的视觉识别和智能手机应用。
本书内容
第1章介绍计算机视觉和深度学习,提供一些理论背景,并教你如何从零开始实现和训练视觉识别神经网络。
第2章介绍与计算机视觉相关的TensorFlow 2概念,以及一些更高级的理念。此外,介绍TensorFlow的子模块Keras,并讲述基于该框架实现的简单识别方法的训练过程。
第3章介绍CNN,并解释它如何改变计算机视觉。本章还介绍正则化工具和现代优化算法,可用于训练更健壮的识别系统。
第4章提供理论细节和实践代码,以便将的解决方案(如Inception和ResNet)应用于图像分类。本章还解释什么使得迁移学习成为机器学习中的一个关键概念,以及如何使用TensorFlow 2来实现它。
第5章讨论两种检测图像中特定对象的方法的架构,其中YOLO(You Only Look Once)模型以其速度闻名,而Faster R-CNN则以其准确性闻名。
第6章介绍自动编码器以及像U-Net和FCN这样的网络如何用于图像去噪、语义分割等。
第7章聚焦于为深度学习应用高效收集和预处理数据集的解决方案,介绍构建优化数据流水线的TensorFlow工具,以及弥补数据不足的各种解决方案(图像绘制、域适应和生成式网络,如VAE和GAN)。
第8章讨论循环神经网络,并介绍更高级的长短期记忆架构。本章提供将LSTM应用于视频动作识别的实用代码。
第9章详细介绍在速度、磁盘空间和计算性能方面的模型优化。本章通过一个实际的示例,介绍如何在移动设备和浏览器上部署TensorFlow解决方案。
附录提供关于TensorFlow 1的一些信息,重点介绍TensorFlow 2中引入的关键变化。此外,还包括从旧项目迁移到版本的指南。后,列出了每章的参考书目,供想要深入了解相关领域的读者参考。
如何阅读本书
以下部分包含一些信息和建议,方便读者阅读本书,并帮助读者从其他材料中受益。
下载并运行示例代码文件
本书不仅对TensorFlow 2和先进的计算机视觉方法进行了深入探讨,还提供了大量的示例及其完整实现。
本书的示例代码可以从http://www.packtpub.com通过个人账号下载,也可以访问华章图书官网http://www.hzbook.com,通过注册并登录个人账号下载。
本书的代码包也托管在GitHub上,地址是https://github.com/ PacktPublishing/Hands-On-Computer-Vision-with-TensorFlow-2。如果代码有更新,现有的GitHub存储库也会随之更新。
研究并运行实验
Jupyter Notebook (https://jupyter.org)是一个用于创建和共享Python脚本、文本信息、可视化结果、方程式等的开源Web应用程序。我们把随书提供的详细代码、预期结果和补充说明文件称为 Jupyter Notebook。每一个Jupyter Notebook都包含一个具体的计算机视觉任务。例如,一个Notebook解释了如何训练CNN在图像中检测动物,另一个则详细介绍了建立自动驾驶汽车识别系统的所有步骤,等等。
正如我们将在下面看到的,你可以直接研究这些文档,也可以将它们用作代码段来运行和重现书中介绍的实验。
在线学习Jupyter Notebook
如果只是想浏览一下提供的代码和结果,那么可以直接在本书的GitHub存储库中访问它们。事实上,GitHub能够渲染Jupyter Notebook并将其显示为静态网页。
但是,GitHub查看器会忽略一些样式和交互内容。为了获得的在线观看体验,建议使用 Jupyter nbviewer (https://nbviewer.jupyter.org),这是一个官方的网络平台,可以用来阅读上传至网上的Jupyter Notebook。通过这个网站可以查询存储在GitHub存储库中的Notebook,因此,所提供的Jupyter Notebook也可以通过https://nbviewer.jupyter.org/github/PacktPublishing/Hands-On-Computer-Vision-with-TensorFlow-2阅读。
在你自己的计算机上运行Jupyter Notebook
要在你自己的计算机上阅读或运行这些文档,首先要安装Jupyter Notebook。对于那些已经使用Anaconda(https://www.anaconda.com)来管理和部署Python环境(本书推荐这种方式)的用户,Jupyter Notebook应该是可以直接使用的(因为它安装在Anaconda中)。对于那些使用其他Python发行版和不熟悉Jupyter Notebook的用户,建议查看一下说明文档,其中提供了安装说明和教程(https://jupyter.org/documentation)。
安装了Jupyter Notebook之后,导航到包含本书代码文件的目录,打开终端,并执行以下命令:
$ jupyter notebook
应该会在默认浏览器中打开Web界面,现在,就应该能够浏览目录并打开本书提供的Jupyter Notebook了,可以阅读、执行或编辑它们。
部分文档包含较高级的实验,可能需要大量的计算资源(比如在大型数据集上训练识别算法)。如果没有适当的加速硬件(也就是说,如果没有兼容的NVIDIA GPU,参见第2章),运行这些脚本可能需要数小时甚至数天(即使有兼容的GPU,运行的实例也可能需要相当长的时间)。
用谷歌Colab运行Jupyter Notebook
对于那些希望自己运行Jupyter Notebook,或者尝试新实验,但又无法使用足够强大的计算机的用户,建议使用名为Colaboratory的谷歌Colab(https://colab.research.google.com)。它是一个基于云的Jupyter Notebook,由谷歌提供,以便在强大的计算机上运行计算密集型脚本。你可以在GitHub存储库中找到关于此服务的更多细节。
本书约定
本书中使用了以下约定。
正文中的代码字体:表示文本中的代码和用户输入。例如,Model对象的.fit()方法启动训练过程。
代码块示例:
代码块中需要关注的某个特定部分会以粗体表示:
命令行输入或输出示例:
粗体:表示新术语、重要词语以及在屏幕上显示的内容。例如,菜单或对话框中的单词会这样显示在文本中:你可以在TensorBoard的Scalars页面上观察解决方案的性能。
表示警告或重要提示。
表示提示或技巧。