如何使用卷积神经网络进行图像处理?

人工智能(Artificial Intelligence,AI)是将人类思维嵌入计算机的一个领域。 换句话说,就是创建模仿生物大脑功能的人工大脑。现在,人们需要将使用智能可做的所有事情转移到机器中。第一代 AI 专注于人类可以规范描述的问题。 进行智能操作的步骤以机器必须遵循的指令形式来描述。机器遵循人类给出的步骤,而不做任何改变。这些是第一代 AI 的特征。

人类可以完整描述一些简单问题,如井字游戏甚至是国际象棋,但无法描述更复杂的问题。在国际象棋中,将棋盘表示为 8×8 大小的矩阵可以简单地解 释问题,描述每个棋子及其走法。机器将仅限于完成人类规范描述的那些任务。 通过编写此类指令,机器可智能地下棋,此时机器智能是人工的。机器本身不是智能的,但人类能以几条静态代码行的形式将其智能传递给机器。所谓“静 态”,这表示在所有情况下机器行为都是相同的。

这种状况下,机器与人类紧密相连,不能单独工作。这就像是主仆关系。 人类是主人,机器是仆人,后者仅遵循人类的指令,而不能做其他事情。 将智能行为嵌入代码块并不能处理人类的所有智能行为。一些简单任务(如 排序数字)可以由人类描述,然后交由机器处理,它们具有 100%的人类智能。 但某些复杂任务,例如语音转文本、图像识别、情感分析等,不能仅通过代码 来解决。此类问题无法像国际象棋那样被人类描述。我们不可能编写代码识别 猫等图片对象。由于不存在分类物体的单一规则,因此此类识别物体的智能行 为不能简单地使用静态代码解决。例如,不存在识别猫的规则。即使某条规则能够成功创建,可以识别某个环境中的猫,但当应用到另一个环境中时,也必然失败。那么,对于此类任务,我们如何使机器拥有智能呢?这就要实现机器 学习(Machine Learning,ML),即由机器学习规则。

为了使机器能够识别对象,我们可以按照机器可理解的方式提供来自专家的先验知识。这种基于知识的系统构成第二代 AI。此类系统的其中一个挑战在于如何处理不确定性和未知知识。人类可以在不同的复杂环境中识别对象,能够智能地处理不确定性和未知知识,但机器不能。

在 ML 中,人类负责完成研究数据的复杂任务,要找出哪些类型的特征能够准确地对对象进行分类。遗憾的是,找到最佳类型的特征是一项艰巨的任务。 这是研究人员针对不同应用正尝试进行回答的问题。例如,为诊断疾病,专业人士首先要收集患者和未患病者的数据,对这些数据进行正确标记,然后找到可以明确区分他们的某些类型的特征。这类特征可能是年龄、性别、血糖和血压。数据集越大,人类找到适用于所有样本的特征的难度就越大,因此这是一项非常具有挑战性的任务。

 但如今,我们可以训练 ML 模型来了解如何区分不同的类别。ML 算法可以找到合适的数学函数,在输入和输出之间建立最健壮的关系。

机器学习算法并不能解决所有问题。关键的智能仍然存在于人类专家的头脑中,而非机器中。人类收集和标记数据,提取最合适的特征,并选择最佳的 ML 算法。在这之后,机器学习算法仅学习人类所讲的内容。在寻找将输入映射到输出的规则的过程中,机器仍然起着重要的作用。

通常,使用来自特定环境的数据进行训练的 ML 算法不能用在其他环境中。 这是一个关键的限制。整个世界存在着大量数据,数据每天都在增加,传统的机器学习技术不适合对其进行处理。例如,使用一组工程化的特征描述图像是非常复杂的,这是因为即使在同一环境中,情况也是富于变化的。我们应该重复这项工作(即特征工程),以使 ML 算法能够适用于其他环境。

随着类别数量的增加,人类找到好的区别性特征的能力会降低,因此我们不应该依赖于人类,而要将这些工作留给机器。机器本身会尝试探索数据,找到合适的特征,以区分不同的类别。我们仅需要提供数据给机器即可。这就是深度学习(Deep Learning,DL)。人们正趋于使用卷积神经网络(CNN)这个 DL 模型处理大量图像。

DL 领域着重于学习如何从原始数据中得出结论,而无须进行特征工程之类的中间步骤。这就是实际上 DL 可以被称为“自动化特征工程”的原因。它对处理器和内存的要求比较高,可能需要数周的时间区分不同的类别。

《深度学习计算机视觉实战 卷积神经网络、Python、TensorFlow 和 Kivy》针对的是未来的数据科学家,这些科学家正逐步开始了解 DL 的基本概念,以用于计算机视觉。读者应该对图像处理和 Python 有一个基本了解。以下是各章内容的概述。

第 1 章基于计算机视觉中一些常用特征描述子的介绍,选择了最适合的特 征集对 Fruits 360 数据集进行分类。此类特征使用 Python 实现。通过在预处理 步骤中过滤此类特征,可以使用最少数目的特征进行分类。该章得出的结论是, 传统的手工特征不适用于复杂问题。DL 是处理大量样本及类别的替代方法。

第 2 章讨论人工神经网络(Artificial Neural Network,ANN),这是 DL 模型的基础。它首先解释了 ANN 仅是线性模型的组合。我们通过指定最佳层数和神经元为一些简单示例设计 ANN 架构。基于数值示例和 Python 示例,我们可以清楚地知道 ANN 如何进行前向和后向传递。

第 3 章使用第 2 章中的特征集实现 ANN,对 Fruits 360 数据集的子集进行分类。由于在实现过程中未使用任何优化技术,因此分类正确率较低。

第 4 章简单介绍单目标和多目标优化技术。它使用基于随机技术的遗传算 法优化 ANN 权重。这将分类正确率提高到 97%以上。

第 5 章讨论识别多维信号的 CNN。该章从强调全连接神经网络(FCNN)和 CNN 之间的差别以及 CNN 如何从 FCNN 中衍生出来开始。基于数值示例,CNN 中的两个基本操作(即卷积和池化)的概念将逐渐变得清晰。我们可以使用 NumPy 实现 CNN 层,从而详细了解 CNN 如何工作。

第 6 章介绍 DL 库 TensorFlow,我们使用这个库构建用于并行和分布式处 理大量数据的 DL 模型。通过构建简单的线性模型和模拟 XOR 门的 ANN 等示 例,我们讨论了 TensorFlow 占位符、变量、数据流图和 TensorBoard。在该章 结束时,使用 tensorflow.nn 模块创建了 CNN,用于分类 CIFAR10 数据集。

第 7 章将训练过的模型部署到 Web 服务器上,以便让互联网用户使用 Web 浏览器进行访问。我们使用 Flask 微框架创建 Web 应用,使用 HTML、CSS 和 JavaScript 构建前端页面来访问 Web 服务器。HTML 页面发送带有一张图像的 HTTP 请求到服务器,服务器使用预测类别对请求进行响应。

第 8 章使用 Kivy 开源库构建跨平台应用。通过将 Kivy 链接到 NumPy,我 们可以构建数据科学应用,不作任何改变地在不同平台上进行工作。这消除了 对特定平台自定义代码的开销。我们创建了一个 Android 应用,它读取图像并执 行第 5 章中使用 NumPy 实现的 CNN。

为了让他人从所创建的项目中受益,我们可以将其在线发布。附录 A 讨论了如何打包 Python 项目,将它们发布到 Python 包索引(PyPI)仓库。

在开始学习之前,让我们先简单了解本书中使用的 Python 环境。

《深度学习计算机视觉实战 卷积神经网络、Python、TensorFlow 和 Kivy》中的所有代码都使用 Python 实现。由于使用原生 Python 处理图像的 工作非常复杂,因此我们在各章中使用了多个库帮助生成高效的实现。 首先,我们可以从 www.python.org/downloads 这个链接下载原生 Python 代 码。本书使用 Python 3(请安装适用于你的系统的 Python 版本)。下一步是准备 本书需要的所有库。我们不建议单独安装各个库,而推荐使用 Anaconda Python 发行版 ( 可以通过链接 www.anaconda.com/download 进行下载 ) 。它支持 Windows、Mac 和 Linux 并打包了超过 1400 个的数据科学库。我们可以从 https://repo.anaconda. com/pkgs 这个页面访问所有受支持的软件包的列表。只要 在计算机上安装了 Anaconda,所有支持的库就都可以使用。这有助于快速准备 好 Python 环境。 本书所需的库为 NumPy、SciPy、Matplotlib、scikit-image、scikit-learn、 TensorFlow、Flask、werkzeug、Jinja、pickle、Pillow 和 Kivy。除了 Kivy 外, Anaconda 支持所有这些库。在本书的各个章节中,我们可以看到各个库的函数。 注意,此类库很容易安装。在安装了原生 Python 后,可使用 pip 安装程序下载 并安装库,所基于的指令为 pip install 。我们仅需要输入库的名称。 有些安装并不简单,可能随着系统的改变而改变。因此,我们无法涵盖不同的安装。出于这个原因,比起分别安装各个库,Anaconda 是更好的选择。让我们 继续讨论所需的库。

 Python 支持许多内置的数据结构:列表、元组、字典、集合和字符串。但 在数据科学应用中,没有一种数据结构可提供灵活性。

这些数据结构支持同时使用不同的数据类型工作。相同的数据结构可能包 含数字、字符、对象等。字符串是个例外,它只支持字符。此外,字符串和元 组是不可变的,这意味着在创建后,我们不可能改变它们的值。使用字典保存 图像像素要求为每个像素添加键,但这会增大所保存数据的量。集合仅限于集 合操作,而图像不限于此类操作。

谈到图像,这是本书的主要内容,列表是合适的数据结构。这是一种可变 的数据类型,能够存放矩阵。不过,使用列表会使过程变得复杂。由于不同的 数值数据类型可以保存在相同的列表中,因此我们必须确定每一项都是某一特 定类型的数值类型。为应用简单的操作(如将一个数字加到图像上),我们必须 写一个循环访问每个元素,单独地应用此种操作。在数据科学应用中,我们推 荐使用工具让操作变得简单。在构建应用时,我们需要克服一些富有挑战性的 任务,而在编写此类任务时,我们没有必要增加另一个挑战。

出于这种原因,我们使用了 NumPy 库。它的基本作用是在 Python 语言中 支持一种新的数据结构,即数组。使用 NumPy 数组比使用列表简单。例如, 在将图像转换为 NumPy 数组后,仅使用加法操作,我们就可以将某个数字添加 到图像中的每个元素上。许多其他的库也有相应函数接收并返回 NumPy 数组。

虽然在 NumPy 数组内部支持某些操作,但这不意味着要应用这些操作。 SciPy 库支持 NumPy 数组中的相同操作。它也支持使用 scipy.ndimage 子模块处 理 n 维 NumPy 数组(例如图像)。对于有关图像的更多高级操作,我们使用 scikit-image 库。例如,使用此库可以提取图像特征。

 在读取图像并应用一些操作后,我们使用 Matplotlib 显示图像。我们仅将 其用于 2D 可视化,但是它也支持一些 3D 特征。 在读取图像、提取特征并进行可视化后,我们可以使用 scikit-learn 库构建 ML 模型。它支持备用的不同类型的模型。只需要提供输入、输出及其参数, 即可获得已训练的模型。

训练完 ML 模型后,可使用 pickle 库将其保存,供以后使用。pickle 库可 以序列化和反序列化对象。此时,我们可构建和保存 ML 模型。然后,我们可 以转向使用 TensorFlow 构建和保存 DL 模型。这是最常使用的 DL 库,它支持 不同的 API,可同时满足专业人士和初学者的需求。TensorFlow 用自己的方式 保存已训练的模型。

Flask 是用于构建 Web 应用程序的微框架,我们使用它部署已训练的模型。 通过将已训练的模型部署到 Web 服务器上,客户端可以使用 Web 浏览器进行 访问。它们可以上传测试图像到服务器,接收类别标签。Flask 使用 Jinja2 模板 引擎和 WSGI 构建应用。因此,我们必须安装 Jinja 和 werkzeug 库。

为构建可以在设备上运行的数据科学移动应用,我们要使用 Kivy。这是支 持 Python 代码跨平台运行的 Python 库。在本书中,我们使用 Kivy 构建适用于 Android 设备的丰富数据科学应用。在市面上,我们可以使用 Kivy 生成的 APK, 它与通常使用 Android Studio 创建的 APK 一模一样。

Kivy 使用 python-for-android 打包器,它允许添加所需的依赖包到 Android 应用程序中。由于 scikit-image 不支持 python-for-android,因此我们使用 Pillow 读取图像,这个库支持在 Android 设备上运行。

 

——————————————图书基本信息———————————————————

 

 

书名:《深度学习计算机视觉实战 卷积神经网络、Python 、TensorFlow和Kivy》

定价:98元

ISBN: 9787302558224

出版时间:2020年9月

京东链接:https://item.jd.com/12974492.html

内容简介:

《深度学习计算机视觉实战  卷积神经网络、Python、TensorFlow和Kivy》将深度学习应用部署到生产环境中。读者将学习使用卷积神经网络(CNN)深度学习模型和Python编写计算机视觉应用。本书从解释传统的机器学习流程开始介绍,分析了一个图像数据集。接下来,读者将学习人工神经网络(ANN),使用Python从头开始构建一个ANN,然后使用遗传算法(GA)优化这个神经网络。

  为了使过程自动化,本书强调了采用传统手工方式为计算机视觉选择特征的局限性,重点阐明了CNN深度学习模型是最先进的解决方案的原因,并从头开始讨论CNN,演示了CNN与完全连接的ANN相比的与众不同之处;而且说明CNN更有效率,还使用Python实现CNN,使读者对这个模型有一个透彻的理解。

  在巩固了基础之后,读者可以使用TensorFlow构建实践中使用的图像识别应用,并且使用Flask使得预训练的模型在互联网上可访问;使用Kivy和NumPy,可以用较低的开销创建跨平台的数据科学应用。

本书有助于读者从基础开始应用深度学习和计算机视觉的概念,一步一步地从概念走向生产。

主要内容

● 理解ANN和CNN的工作机制

● 使用Python从头创建计算机视觉应用和CNN

● 使用TensorFlow从概念到生产学习深度学习项目

● 与Kivy配合使用NumPy构建跨平台的数据科学应用

 

猜你喜欢

转载自blog.csdn.net/qinghuawenkang/article/details/109028310
今日推荐