【CV】第 5 章:神经网络架构和模型

   大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流

个人主页-Sonhhxg_柒的博客_CSDN博客 

欢迎各位→点赞 + 收藏⭐️ + 留言​

系列专栏 - 机器学习【ML】 自然语言处理【NLP】  深度学习【DL】

 foreword

✔说明⇢本人讲解主要包括Python、机器学习(ML)、深度学习(DL)、自然语言处理(NLP)等内容。

如果你对这个系列感兴趣的话,可以关注订阅哟

文章目录

AlexNet 概述

VGG16概述

Inception概述

GoogLeNet 检测

ResNet 概述

R-CNN 概述

图像分割

基于聚类的分割

基于图的分割

选择性搜索

区域提案

特征提取

图像分类

边界框回归

Fast R-CNN 概述

Faster R-CNN 概述

GAN 概述

GNN 概述

光谱 GNN

强化学习概述

迁移学习概述

概括


卷积神经网络CNN ) 是计算机视觉中用于分类和检测对象的最广泛使用的工具。CNN 通过堆叠许多不同的线性和非线性函数层将输入图像映射到输出类或边界框。线性函数由卷积层、池化层、全连接层和 softmax 层组成,而非线性层是激活函数。神经网络有许多不同的参数和权重因子,需要针对给定的问题集进行优化。随机梯度下降和反向传播是训练神经网络的两种方式。

 在第 4 章“图像深度学习”中,您学习了一些基本的编码技能来构建和训练神经网络,并了解了神经网络不同层内特征图的视觉转换。在本章中,您将深入了解神经网络架构和模型背后的理论,并理解诸如深度神经网络饱和、梯度消失问题、大参数集导致的过度拟合等关键概念。这将帮助您为研究目的创建自己的有效模型,并遵循接下来几章中将这些理论应用于代码的主题。

本章涵盖的主题如下:

  • AlexNet 概述
  • VGG16概述
  • Inception概述
  • ResNet 概述
  • R-CNN 概述
  • Fast R-CNN 概述
  • Faster R-CNN 概述
  • GAN 概述
  • GNN 概述
  • 强化学习概述
  • 迁移学习概述

AlexNet 概述

AlexNet由 Alex Krizhevsky、Ilya Sutskever 和 Geoffrey E. Hinton 于 2012 年在题为ImageNet Classification with Deep Convolutional Neural Networks的论文中介绍。原始论文可在http://www.cs.utoronto.ca/~ilya/pubs/2012/imgnet.pdf找到。

这是第一次成功引入优化的 CNN 模型,以解决计算机视觉问题,涉及对来自许多不同类别(超过 22,000 个)的大量图像(超过 1500 万张)进行分类。在 AlexNet 之前,计算机视觉问题主要通过传统的机器学习方法来解决,通过收集更大的数据集并改进模型和技术以最大程度地减少过拟合来进行增量改进。

CNN 模型根据前五名错误率对错误率进行分类,这是给定图像的真实类别不在前五名预测类别中的实例的百分比。AlexNet 以 15.3% 的错误率前五名赢得了 2012 ILSVRC(ImageNet 大规模视觉识别挑战赛),大大领先于错误率 26.2% 的前五名的第二名。AlexNet 架构如下图所示:

【CV】第 5 章:神经网络架构和模型_第1张图片

AlexNet的基本思想总结如下:

  • 它包含 8 个学习层——5 个卷积层和 3 个全连接层。
  • 它使用大内核过滤器——第一层有 96 个大小为 11 x 11 的过滤器,第二层有 256 个大小为 5 x 5 的过滤器,第三和第四层有 384 个大小为 3 x 3 的过滤器,以及 256 个大小为 3 的过滤器x 3 在第五层。
  • 在每个卷积层和全连接层之后应用 ReLU 激活层。它的训练速度比 Tanh 快得多。
  • Dropout 正则化应用于第一个和第二个全连接层。
  • 通过两种数据增强技术减少过拟合:
  • 从 256 x 256 的图像大小创建 224 x 224 的随机补丁并执行平移和水平反射
  • 改变训练图像中 RGB 通道的强度
  • 训练在两个 GPU 上完成——在 5 或 6 天内完成 90 个 epoch,在两个 Nvidia GeForce 高端 GTX 580 GPU 上进行训练。
  • softmax 层的 1000 个输出映射到 1000 个 ImageNet 类中的每一个,以预测类输出。

以下代码导入了运行 TensorFlow 后端所需的所有函数。该模型导入Sequential模型,在 Keras 中是一层层的模型结构:

from __future__ import print_function
import keras
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation, Flatten
from keras.layers import Conv2D, MaxPooling2D, ZeroPadding2D
from keras.layers.normalization import BatchNormalization
from keras.regularizers import l2

以下代码加载 CIFAR 数据集。

CIFAR 数据集 ( CIFAR-10 and CIFAR-100 datasets ) 有 10 个不同的类别,每个类别有 6,000 张图像。这些类别是飞机、汽车、鸟、猫、鹿、狗、青蛙、马、船和卡车。TensorFlow 具有用于导入 CIFAR 数据集的内置逻辑。

数据集由训练和测试图像组成,这些图像将用于开发模型(训练)和验证其结果(测试)。每个数据集都有两个参数xy,分别代表图像的宽度 ( x ) 和高度 ( y ):

from keras.datasets import cifar10
(x_train, y_train), (x_test, y_test) = cifar10.load_data()

神经网络有许多不同的参数,需要优化——这些也称为模型常数。F或 AlexNet,它们如下:

  • batch_size是32一次前向或后向传递的训练示例数。
  • num_classes是2。
  • epochs是100训练将重复的次数。
  • data_augmentation是True。
  • num_predictions是20。

让我们将输入向量转换为二进制类矩阵,因为在此示例中我们有两个类:

y_train = keras.utils.to_categorical(y_train, num_classes) 
y_test = keras.utils.to_categorical(y_test, num_classes) 
# 初始化模型
model = Sequential()

下表描述了不同 AlexNet 模型层的 TensorFlow 代码。后续章节会介绍其他模型,但创建模型的基本思路类似:

Convolution and Pooling 1

model.add(Conv2D(96, (11, 11), input_shape=x_train.shape[1:],
padding='same', kernel_regularizer=l2(l2_reg)))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2))

Convolution and Pooling 2

model.add(Conv2D(256, (5, 5), padding='same'))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

Convolution and Pooling 3

model.add(ZeroPadding2D((1, 1)))
model.add(Conv2D(512, (3, 3), padding='same'))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

Convolution and Pooling 4

model.add(ZeroPadding2D((1, 1)))
model.add(Conv2D(1024, (3, 3), padding='same'))
model.add(BatchNormalization())
model.add(Activation('relu'))

以下列表中描述了关键模型配置参数。这应该为您提供训练神经网络模型需要优化的参数的高级概述:

  • Model compilation:模型开发完成后,下一步就是使用 TensorFlow 编译模型。对于模型编译,我们需要定义两个参数:
  • Loss function:损失函数确定模型值与实际结果的接近程度。分类交叉熵是最常见的损失函数——它使用输出值在 0 到 1 之间的对数尺度来确定损失,其中输出小表示差异小,输出大表示差异大。另一个可以使用的损失函数是 RMS(均方根)损失函数。
  • Optimizer:优化器微调模型的参数以最小化损失函数。Adadelta 优化器根据过去梯度的移动窗口微调学习率。其他常用的优化器是 Adam 优化器和 RMSprop 优化器。

以下代码展示了如何在 Keras 中的模型编译期间使用优化器:

model.compile(loss = 'categorical_crossentropy',
              optimizer = keras.optimizers.Adadelta(),
              metrics = ['accuracy'])

模型构建完成后,模型必须通过上述方法编译后才能用于预测(model.predict())。

请注意,在本节中,我们研究了 AlexNet,它在 2012 年赢得了 ILSVRC 比赛。2013 年,开发了一个更新版本的 AlexNet,称为 ZFNet,它与 AlexNet 一样使用 8 层,但使用 7 x 7 过滤器而不是 11 x 11过滤器。在接下来的部分中,我们会发现使用较小的滤波器尺寸可以提高模型精度,因为输入图像像素信息被保留。

VGG16概述

在 2012 年 AlexNet 成功之后,越来越多的研究人员致力于改进 AlexNet 的 CNN 架构以提高准确性。焦点转移到更小的窗口大小、更小的过滤器和更小的步幅。VGG16 由 Karen Simonyan 和 Andrew Zisserman 于 2014 年在题为“用于大规模图像识别的深度卷积网络”的论文中提出。该论文可以在https://arxiv.org/abs/1409.1556阅读。

该模型在 ILSVRC-2014 的 ImageNet 中实现了 92.7% 的前五名测试准确率。

VGG16 架构如下图所示:

【CV】第 5 章:神经网络架构和模型_第2张图片

VGG16的基本思想总结如下:

  • 最大过滤器尺寸为 3 x 3,最小尺寸为 1 x 1。这意味着与 AlexNet 的较大过滤器尺寸和较小数量相比,使用较小的过滤器尺寸和较大的数量;与 AlexNet 相比,这导致更少的参数。
  • 对于 3 x 3 卷积层,卷积步幅为 1,填充为 1。最大池在 2 x 2 窗口上执行,步幅为 2。
  • 每层使用三个非线性 ReLU 函数而不是单个函数,通过减少梯度消失问题并使网络能够深度学习,从而使决策函数更具判别力。这里的深度学习意味着学习复杂的形状,比如边缘、特征、边界等等。
  • 参数总数为1.38亿。

Inception概述

在引入初始层之前,大多数 CNN 架构都有一个标准配置——堆叠(串联)卷积、归一化、最大池化和激活层,然后是全连接和 softmax 层。这种架构导致神经网络的深度增加,但存在两个主要缺点:

  • 过拟合
  • 增加计算时间

初始模型通过从密集网络移动到稀疏矩阵并将它们聚类以形成密集子矩阵来解决这两个问题。

初始模型也称为 GoogLeNet。它是由 Christian Szegedy、Wei Liu、Yangqing Jia、Pierre Sermanet、Scott Reed、Dragmir Anguelov、Dumitru Erhan、Vincent Vanhoucke 和 Andrew Rabinovich 在题为Going Deeper with Convolutions的论文中介绍的。盗梦空间的名称来自于林敏、陈强、严水成的论文网络中的网络和著名的网络模因我们需要更深入初始论文和Network in Network论文的链接如下:

  • Inception:https : //arxiv.org/abs/1409.4842
  • Network in Network:https ://arxiv.org/abs/1312.4400

在论文Network In Network中,作者没有在输入图像上使用传统的线性滤波器,而是构建了一个微神经网络,并以类似于 CNN 的方式将其滑过输入图像。通过将这些层中的几个堆叠在一起来构建深度神经网络。微神经网络(也称为多层感知器)由多个具有激活函数的全连接层组成,如下图所示:

【CV】第 5 章:神经网络架构和模型_第3张图片

左图显示了传统 CNN 中的线性滤波器,将输入图像连接到下一层。右图显示了微网络,由多个全连接层组成,后跟一个将输入图像连接到下一层的激活函数。这里的inception层是NIN的逻辑顶点,描述如下:

  • inception 架构的主要思想是基于找出如何用现成的密集组件(3 x 3 和 5 x 5)补充 CNN 中的最佳局部稀疏(多个 1 x 1 并行)结构。初始论文的作者通过使用 1 x 1 卷积与 3 x 3、5 x 5 卷积和池化层并行找到了答案。一个额外的 1 x 1 卷积后跟 ReLU 可以被认为等同于 NIN 微网络。1 x 1 卷积用作降维机制,还有助于增加网络的宽度(通过并排堆叠)及其深度。在同一层(初始层)内同时并行部署具有多个过滤器和池化层的多个卷积会导致该层成为宽度增加的稀疏层。由于内核尺寸较小,1 x 1 卷积的过拟合较少。
  • 目的是让神经网络在训练网络时学习到最佳权重,并自动选择更有用的特征。

  • 为了进一步降低维度,在 3 x 3 和 5 x 5 卷积之前使用了 1 x 1 卷积,如下图所示:

【CV】第 5 章:神经网络架构和模型_第4张图片

上图显示,在 3 x 3 和 5 x 5 层之前使用 1 x 1 层会导致大约 30% 的降维,从 672(左图(a))到 480(右图(b)) . 下图显示了完整的初始网络。下图中间部分描述的完整inception层太大,一页都放不下,所以已经压缩了。不要试图在这里阅读图表的每个元素,而是要了解重复内容的整体概念。inception层的关键重复模块被放大了,如下图的顶部和底部所示:

【CV】第 5 章:神经网络架构和模型_第5张图片

该网络由以下部分组成:

  • 具有 128 个滤波器的 1 x 1 卷积,用于降维和校正线性激活
  • 具有 1,024 个单元和 ReLU 激活的全连接层
  • 丢弃输出比例为 70% 的 dropout 层
  • 以 softmax loss 作为分类器的线性层(预测与主分类器相同的 1,000 个类,但在推理时移除)

下图说明了 CNN 过滤器及其在初始网络中的相应连接:

【CV】第 5 章:神经网络架构和模型_第6张图片

在上图中,深度连接层既可以连接到最大池层,也可以直接连接到 1 x 1 卷积层。无论哪种方式,之后的计算都遵循与上图所示相同的模式。

GoogLeNet 检测

inception网络(也称为GoogLeNet )改进了循环卷积神经网络(R-CNN)的两阶段层(基于颜色、纹理、大小和形状的区域提议,然后是 CNN 进行分类)提议。

首先,它用改进的 CNN 初始值取代了 AlexNet。接下来,通过将选择性搜索(在 R-CNN 中)方法与多框预测相结合以提高对象边界框召回率,改进了区域提议步骤。区域提议减少了大约 60%(从 2,000 到 1,200),同时将覆盖率从 92% 增加到 93%,导致单个模型案例的平均精度提高了 1%。总体而言,准确率从 40% 提高到 43.9%。

ResNet 概述

ResNet 由 Kaiminh He、Xiangyu Zhang、Shaoquing Ren 和 Jian Sun 在题为Deep Residual Learning for Image Recognition 的论文中介绍,旨在解决深度神经网络随着深度增加的精度下降问题。这种退化不是由过度拟合引起的,而是由于在某个临界深度之后,输出丢失了输入的信息,因此输入和输出之间的相关性开始发散,导致不准确性增加。该论文可在https://arxiv.org/abs/1512.03385找到。

ResNet-34 实现了 5.71% 的 top-5 验证错误,优于 BN-inception 和 VGG。ResNet-152 实现了 4.49% 的前五位验证错误。六个不同深度的模型的集成实现了 3.57% 的前五验证误差,并在 ILSVRC-2015 中获得第一名。ILSVRC 代表 ImageNet 大规模视觉识别竞赛;它评估了 2010 年至 2017 年的对象检测和图像分类算法。

ResNet的主要特点描述如下:

  • 通过引入深度残差学习框架来解决退化问题。
  • 该框架引入了快捷方式或跳过连接的概念,即跳过一层或多层。
  • 输入和下一层之间的底层映射是H(x)
  • 非线性层是F(x) = H(x) – x,可以重构为H(x) = F(x)+x,其中x是恒等映射。
  • 快捷连接简单地执行恒等映射,它们的输出被添加到堆叠层的输出中(见下图):

【CV】第 5 章:神经网络架构和模型_第7张图片

上图有以下特点:

  • 操作F(x) + x是通过快捷连接和元素添加来执行的。
  • 身份快捷连接既不增加额外的参数,也不增加计算复杂性。

完整的 ResNet 模型如下图所示:

【CV】第 5 章:神经网络架构和模型_第8张图片

此处显示的 ResNet 模型比视觉几何组 (VGG)网络具有更少的过滤器和更低的复杂性。不使用辍学。各种神经网络模型的性能比较如下图所示:

【CV】第 5 章:神经网络架构和模型_第9张图片

上图显示以下内容:

  • ImageNet 大规模视觉识别挑战赛ILSVRC )的各种 CNN 架构的得分和层数。
  • 分数越低,性能越好。
  • AlexNet 的得分明显高于其任何前辈,然后在随后的每一年中,CNN 的质量随着层数越来越大而不断提高。
  • 如此处所述,ResNet 获得了最好的分数,比 AlexNet 提高了大约四倍。

R-CNN 概述

区域特定的 CNN ( R-CNN ) 是由 Ross Girshick、Jeff Donahue、Trevor Darrell 和 Jitendra Malik 在一篇题为“用于准确对象检测和语义分割的丰富特征层次结构”的论文中介绍的。它是一种简单且可扩展的目标检测算法,与 VOC2012 之前的最佳结果相比,平均精度提高了 30% 以上。该论文可以在https://arxiv.org/abs/1311.2524阅读

VOC 代表视觉对象类(http://host.robots.ox.ac.uk/pascal/VOC),PASCAL代表模式分析统计建模和计算学习。PASCAL VOC 从 2005 年到 2012 年在对象类识别方面遇到了挑战。PASCAL VOC 注释广泛用于对象检测,它使用.xml格式。

整个对象检测模型分为图像分割、基于选择性搜索的区域提议、使用 CNN 和分类的特征提取以及使用支持向量机 (SVM)形成边界框,如下图所示:

【CV】第 5 章:神经网络架构和模型_第10张图片

上图 显示了将道路上的汽车和自行车的输入图像转换为对象检测边界框的各个步骤。

在以下部分中,将详细描述这些步骤中的每一个。

图像分割

图像分割是将图像表示为多个区域。分割图像中的每个区域都具有相似的特征,例如颜色、纹理和强度。

基于聚类的分割

K- means 是一种无监督机器学习技术,可根据质心将相似数据分组。K- means 聚类算法的关键步骤概述如下:

  1. 选择K个数据点作为任意位置的初始聚类数。
  2. 找出每个簇质心和每个像素之间的距离,并将其分配给最近的簇。
  3. 更新每个集群的平均值。
  4. 通过更改簇质心重复此过程,直到每个像素与其关联簇之间的总距离最小化。

基于图的分割

有许多可用的基于图的分割方法,但这里为 R-CNN 描述的方法是 Pedro Felzenszwalb 和 Daniel Huttenlocher 在题为Efficient Graph-Based Image Segmentation的论文中介绍的方法。该论文可以在http://people.cs.uchicago.edu/~pff/papers/seg-ijcv.pdf阅读。

该方法涉及将图像表示为图形(本章的 GNN 概述部分给出了详细说明),然后从图中选择边,其中每个像素都链接到图中的节点并通过边连接到相邻像素. 边缘上的权重表示像素之间的差异。分割标准基于由边界分隔的图像的相邻区域的可变性程度。通过评估阈值函数来定义边界,该阈值函数表示沿边界的像素之间的强度差异与相邻像素之间的强度差异。基于区域之间边界的存在,分割被定义为粗略或精细。

选择性搜索

物体检测的主要挑战是在图像中找到物体的精确位置。图像中不同空间方向的多个对象使得很难找到图像中对象的边界。例如,一个物体可以被遮盖并且只能部分看到——例如一个人站在汽车后面;我们可以看到汽车和汽车上方的人的身体。使用选择性搜索来解决这个问题。它将整个图像划分为许多分割区域。然后它使用自下而上的方法将相似的区域组合成更大的区域。选择性搜索使用生成的区域来查找对象的位置。选择性搜索使用贪心算法根据大小、颜色和纹理将区域迭代地组合在一起。选择性搜索中使用的步骤解释如下:

  1. 首先,两个最相似的区域被评估并分组在一起。
  2. 接下来,计算结果区域和新区域之间的新相似度以形成新组。
  3. 重复对最相似区域进行分组的过程,直到该区域覆盖整个图像。

选择性搜索之后是区域提议,将在下一节中描述。

区域提案

在这个阶段,该算法使用前面描述的选择性搜索方法来提取大约 2,000 个与类别无关的区域建议。 与类别无关的区域建议用于识别图像中的多个区域,以便每个对象由图像中的至少一个区域很好地表示。人类通过定位图像中的对象来自然地做到这一点,但对于机器来说,需要确定对象的位置,然后需要将其与图像中的适当区域进行匹配以检测对象。

与图像分类不同,检测涉及图像定位,以便可以创建一个适当的区域来包围对象以检测该区域内的特征。基于选择性搜索方法选择合适的区域,该方法通过基于颜色搜索然后根据纹理、大小和形状搜索来计算相似区域。

特征提取

特征提取是将相似的特征(如边、角和线)分组为特征向量。例如,特征向量将图像的维度从 227 x 227 (~51,529) 降低到 4,096。每个区域提案,无论其大小,首先通过膨胀和扭曲转换为 227 x 227 的大小。这是必需的,因为 AlexNet 的输入图像大小为 227 x 227。使用 AlexNet 从每个区域提取 4,096 个特征向量。特征矩阵为 4,096 x 2,000,因为我们为每个图像有 2,000 个区域建议。

原则上,R-CNN 可以将任何 CNN 模型(例如 AlexNet、ResNet、Inception 或 VGG)作为输入,只要修改输入图像大小以适应网络的图像大小即可。R-CNN 的作者将 AlexNet 和 VGG16 作为 R-CNN 的输入进行了比较,发现 VGG16 的准确率提高了 8%,但与 AlexNet 相比,所需时间延长了 7 倍。

图像分类

在通过 AlexNet 进行特征提取之后,图像的分类涉及将特征向量通过特定于类的线性 SVM 以对区域提议中对象的存在进行分类。使用 SVM 是一种有监督的机器学习方法,它为每个特征向量分配权重和偏差,然后画一条线将对象分成特定的类。分离是通过确定每个向量与线的距离然后定位线以使分离距离最大来完成的。

边界框回归

边界框回归预测图像中对象的位置。在 SVM 之后,开发了一个线性回归模型来预测边界框检测窗口的位置和大小。对象的边界框由四个锚值定义,[ x , y , w , h ],其中x是边界框原点的x坐标,y是边界框原点的y坐标,w是宽度边界框的高度, h是边界框的高度。

回归技术试图通过调整四个锚值中的每一个来将预测值与地面实况(目标)值进行比较,从而最小化边界框预测中的误差。

Fast R-CNN 概述

R-CNN 在目标检测方面比之前的任何方法都取得了更显着的改进,但速度很慢,因为它对每个区域提议都在 CNN 上执行了前向传递。此外,训练是一个多阶段的管道,包括首先针对区域提议优化 CNN,然后运行 ​​SVM 进行对象分类,然后使用边界框回归器绘制边界框。同样是 R-CNN 的创建者 Ross Girschick 提出了一种称为快速 R-CNN 的模型,以使用单阶段训练方法来改进检测。下图展示了fast R-CNN的架构:

【CV】第 5 章:神经网络架构和模型_第11张图片

fast R-CNN中使用的步骤如下:

  1. 快速 R-CNN 网络使用多个卷积和最大池化层处理整个图像以生成特征图。
  2. 特征图被输入选择性搜索以生成区域建议。
  3. 对于每个区域建议,使用感兴趣区域RoI ) 最大池化提取固定长度 ( h = 7 x w = 7) 的特征向量。
  4. 此特征向量值成为由两个分支分隔的全连接FC ) 层的输入:
  • 分类概率的 Softmax
  • 每个对象类的边界框位置和大小(xy、宽度、高度)。

所有网络权重都使用反向传播进行训练,计算和内存在前向和后向传播之间共享,用于损失和权重计算;这将大型网络中的训练时间从 84 小时(R-CNN)减少到 9.5 小时(快速 R-CNN)。Fast R-CNN 使用 softmax 分类器而不是 SVM (R-CNN)。softmax 的平均精度略优于 SVM,如下表所示,针对小型 (S)、中型 (M) 和大型 (L) 网络:

VOC07

S

M

L

SVMs

56.3

58.7

66.8

Softmax

57.1

59.2

66.9

SVM 和 softmax 之间的结果差异很小,说明与使用 SVM 的多阶段训练相比,使用 softmax 进行一次微调就足够了。提案数量超过 4,000 会导致平均精度下降约 1%,而当提案数量在 2,000 到 4,000 之间时,它们实际上会导致精度提高约 0.5%。

Faster R-CNN 概述

R-CNN 和 Fast R-CNN 都依赖于选择性搜索方法来开发 2,000 个区域的提议,这导致每张图像的检测率为 2 秒,而最有效的检测方法为每张图像 0.2 秒。Shaoquing Ren、Kaiming He、Ross Girshick 和 Jian Sun 写了一篇题为Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks to Improvement the R-CNN Speed and Accuracy for Object Detection 的论文。你可以在https://arxiv.org/abs/1506.01497阅读这篇论文。

下图展示了 Faster R-CNN 的架构:

【CV】第 5 章:神经网络架构和模型_第12张图片

关键概念如下表所示:

  • 将输入图像引入区域建议网络RPN ),该网络为给定图像输出一组矩形区域建议。
  • RPN 与最先进的对象检测网络共享卷积层。
  • RPN 通过反向传播和随机梯度下降SGD ) 进行训练。

Faster R-CNN 中的目标检测网络类似于 fast R-CNN。下图展示了一些使用faster R-CNN的物体检测输出:

【CV】第 5 章:神经网络架构和模型_第13张图片

上图展示了使用更快的 R-CNN 模型进行的推理。在第 10 章,使用 R-CNN、SSD 和 R-FCN 进行目标检测,您将学习如何自己生成这种类型的图形。左图是使用 TensorFlow Hub 的预训练模型生成的,而右图是通过训练我们自己的图像然后开发我们自己的模型生成的。

上图中所示的高精度是通过遵循以下列表中概述的技术获得的:

  • 在两个网络之间共享卷积层:RPN 用于区域提议和快速 R-CNN 用于检测。
  • 对于更快的 R-CNN,输入图像大小为 1,000 x 600。
  • RPN 是通过在卷积特征图输出上滑动一个大小为 60 x 40 的小窗口来生成的。
  • 每个滑动窗口映射到 9 个锚框(3 个比例,框面积分别为 128、256 和 512 像素,3 个比例为 1:1、1:2 和 2:1)。
  • 每个锚框都映射到一个区域提议。
  • 每个滑动窗口映射到 ZF 的 256-D 特征向量和 VGG 网络的 512-D 特征向量。
  • 然后这个向量被输入到两个完全连接的层——一个盒子回归层和一个盒子分类层。
  • 区域提案总数为 21,500 (60 x 40 x 9)。

为了训练 RPN,根据与训练数据的交集重叠( IoU )为每个锚框分配一个二进制类标签。IoU 用于衡量物体检测的准确性。在第 7 章,使用 YOLO 进行目标检测中对其进行了详细描述。现在,您知道 IoU 是衡量两个边界框之间重叠面积与其并集面积之比就足够了。这意味着 IOU = 1,这意味着两个完整的边界框重叠,所以你只能看到一个,而当 IoU = 0 时,这意味着两个边界框是完全分开的。

二元类级别具有正样本和负样本,具有以下属性:

  • 正样本:IoU为最大值或大于0.7
  • 负样本:IoU 小于 0.3

用于回归的特征具有相同的空间大小(高度和宽度)。在实际图像中,特征大小可以不同。这是通过使用不同的回归比例和纵横比使用不同的边界框大小来考虑的。RPN 和目标检测之间的卷积特征使用以下原则共享:

  • RPN 使用二元类级别进行训练。
  • 检测网络通过快速 R-CNN 方法进行训练,并通过使用 RPN 训练的 ImageNet 预训练模型进行初始化。
  • 通过保持共享卷积层固定并仅微调 RPN 独有的层来初始化 RPN 训练。
  • 前面的步骤导致两个网络的共享。
  • 最后,快速 R-CNN 的全连接层通过保持共享卷积层固定进行微调。
  • 上述所有步骤的组合导致两个网络共享相同的卷积层。

R-CNN、fast R-CNN和faster R-CNN的对比如下表所示:

参数

R-CNN Fast R-CNN Faster R-CNN
Input Image Image Image

输入图像处理

基于像素相似度的图像分割

输入图像被馈送到 CNN 以生成卷积特征图。

输入图像被馈送到 CNN 以生成卷积特征图。

区域提案

使用对分割图像的选择性搜索生成 2K 区域建议。

使用卷积特征图的选择性搜索生成 2K 区域建议。

区域提议是使用区域提议网络RPN ) 生成的。该 CNN 使用一个 60 x 40 的滑动窗口,用于具有 9 个锚框(3 个比例和 3 个纵横比)的特征图的每个位置。

翘曲成固定尺寸

从区域提议中,每个区域都被扭曲成固定大小以输入到 CNN。

使用 RoI 池化层中的最大池化将区域建议扭曲成一个固定大小的正方形。

使用 RoI 池化层将区域建议扭曲为固定大小的正方形。

特征提取

每次将每张图像固定大小的 2K 扭曲区域建议馈送到 CNN。

2K 扭曲区域被馈送到两个分支,每个分支都由一个全连接层组成。

2K 扭曲区域被馈送到全连接层。

检测(Detection)

CNN 的输出被传递到 SVM 以进行分类,然后由边界框回归器生成边界框。

全连接层的一个输出被传递到 softmax 层进行分类,另一个输出到边界框回归器以生成边界框。

全连接层的一个输出被传递到 softmax 层进行分类,另一个输出到边界框回归器以生成边界框。

CNN 类型 AlexNet

VGG 16

ZFNet 或 VGGNet。ZFNet 是 AlexNet 的修改版本。

区域提案

选择性搜索用于生成约 2,000 个区域建议。

选择性搜索用于生成约 2,000 个区域建议。

CNN 用于生成约 21,500 个区域建议(约60 x 40 x 9)。

卷积操作

每张图像进行 2K 次卷积操作。

每个图像都进行一次卷积操作。

每个图像都进行一次卷积操作。

区域提议和检测

区域提议和检测是解耦的。

区域提议和检测是解耦的。

区域提议和检测是耦合的。

训练时间

84 小时

9 小时

150 小时

测试时间

49 秒

2.43 秒

0.2 秒

地图 (VOC 2007)

66

66.9

66.9

上表清楚地展示了 R-CNN 算法的演进过程以及在提高其准确性的同时加快算法速度的方法。以下是我们从上表中学到的一些关键点:

  • 图像分割和选择性搜索以确定像素相似度是一项耗时的操作,因为该操作是逐像素操作。
  • 使用滑动窗口的 CNN 操作在生成区域提议方面比选择性搜索方法快得多。
  • 将 CNN 应用于整个图像比将其应用于图像中的区域然后对给定图像重复该过程 2000 次要快得多。

GAN 概述

生成对抗网络GAN ) 是一类学习估计数据概率分布的 CNN。GAN 由两个相互竞争的连接神经网络组成,称为生成器和鉴别器。生成器根据图像特征的噪声输入生成人工图像,判别器将人工图像与真实图像进行比较,以确定图像为真实的概率。概率信息被传递到图像输入以在下一阶段学习。下图说明了 GAN 的机制:

【CV】第 5 章:神经网络架构和模型_第14张图片

GAN算法的分步说明如下:

  1. 给定一个训练集z,生成器网络接收一个表示图像特征的随机向量,并通过 CNN 运行以生成人工图像G ( z )。
  2. 鉴别器网络是一个二元分类器;它接收真实图像和人造图像,并生成创建人造图像的概率P ( z )。
  3. 鉴别器将概率信息提供给生成器,生成器使用该信息来改进其对图像G ( z ) 的预测。

二元分类器损失函数称为交叉熵损失函数,表示为-(y log(p) + (1-y) log(1-p)),其中p是概率,y是期望值.

  • 鉴别器目标函数

  • 生成器目标函数

GAN 的类型很多(超过 20 种)已经存在,并且几乎每个月都在开发更多类型。以下列表涵盖了 GAN 的两个主要重要变体:

  • DCGAN(深度卷积 GAN):CNN 用于鉴别器和生成器,如原始 GAN 中所述。
  • CGAN(条件GAN):表示标签的条件向量用作生成网络和判别网络的附加输入。噪声与标签向量一起被添加到生成网络中,以检测标签中的变化。

GAN的一些实际用例列举如下:

  • 生成人工人脸图像和图像数据集
  • 组合图像以形成新的数据集
  • 生成卡通人物
  • 从 2D 图像生成 3D 人脸和对象
  • 语义图像翻译
  • 从不同的彩色图像生成一组彩色图像
  • 文本到图像的翻译
  • 人体姿态估计
  • 照片编辑和修复

GNN 概述

图神经网络GNN ) 将 CNN 学习扩展到图数据。图可以表示为节点和边的组合,其中节点表示图的特征,边连接相邻节点,如下图所示:

【CV】第 5 章:神经网络架构和模型_第15张图片

 在此图像中,节点由实心白点表示,边缘由连接点的线表示。

以下等式描述了图表的关键参数:

  • 【CV】第 5 章:神经网络架构和模型_第16张图片
  • 【CV】第 5 章:神经网络架构和模型_第17张图片

 将图转换为由节点、边和节点之间的关系组成的向量称为图嵌入。嵌入向量可以用以下等式表示:

【CV】第 5 章:神经网络架构和模型_第18张图片

以下列表描述了上述等式的元素:

  • n ] = 当前节点n的状态嵌入
  • ne [ n ] = 节点n邻域的状态嵌入
  • n ] = 节点n的特征
  • e [ n ] = 节点n边的特征
  • ne [ n ] = 节点n邻域的特征
  • n ] = 节点n的输出

如果H , X是通过堆叠所有状态和所有特征构建的向量,那么您可以为 GNN 迭代状态编写以下等式:

【CV】第 5 章:神经网络架构和模型_第19张图片

上述一般等式根据 GNN 的类型推导出为各种形式。有两个主要分类:光谱 GNN 和非光谱 GNN。

光谱 GNN

Spectral GNN 最初由 Joan Bruna、Wojciech Zaremba、Arthus Szlam 和 Yann LeCun 在题为Spectral Networks and Deep Locally Connected Networks on Graphs的论文中提出。您可以在https://arxiv.org/pdf/1312.6203v3.pdf找到论文的详细信息。

Spectral GNN 是傅里叶域中的卷积。谱 GNN 可以用以下等式表示:

 以下列表描述了上述等式的元素:

  • θ = 也可以被认为是卷积权重的过滤器参数
  • x = 输入信号
  • U = 归一化图拉普拉斯算子的特征向量矩阵

 Kipf 和 Welling(在他们的文章Semi-Supervised Classification With Graph Convolution Networks, ICLR 2017 中)进一步简化了这一点,以解决以下过拟合问题:

 使用以下重整化进一步简化了这一点:

这里,【CV】第 5 章:神经网络架构和模型_第20张图片表示激活函数。

下图说明了 GNN 的架构:

【CV】第 5 章:神经网络架构和模型_第21张图片

 GNN 层聚合来自其邻居的特征信息,并应用 ReLU 激活、池化、全连接和 softmax 层对图像中的不同特征进行分类。

强化学习概述

强化学习是一种机器学习,其中代理通过根据累积的过去奖励信号的反馈预测奖励(或结果)来学习在当前环境中采取行动。Q- learning 由 Christopher Watkins 在题为Learning from Delayed Rewards的论文中介绍,是强化学习中最流行的算法之一。Q意味着质量——这是给定动作产生奖励的价值:

  • 在每个学习状态,Q表存储状态、动作和相应奖励的值。
  • 智能体搜索Q表以做出最大化长期累积奖励的下一个动作。
  • 强化学习在一个关键方面不同于监督学习和无监督学习:它不需要输入标签(监督)或底层结构(无监督)来将对象分类。

下图说明了强化学习的概念。代理在某种状态下采取行动以产生行动,从而产生奖励。动作价值随着时间的推移而提高以最大化奖励:

【CV】第 5 章:神经网络架构和模型_第22张图片

代理从一个状态 ( s t ) 开始,观察一系列观察结果,采取行动 ( a t ) 并获得奖励。

下面的累积值函数被最大化以在Q学习方法中找到所需的输出:

 以下列表描述了上述等式的主要特征:

  • 【CV】第 5 章:神经网络架构和模型_第23张图片是旧值
  • 【CV】第 5 章:神经网络架构和模型_第24张图片是学习率
  • 是在即时奖励和延迟奖励之间进行交易的折扣因子,α 是学习率
  • 【CV】第 5 章:神经网络架构和模型_第25张图片是奖励
  • 最大值【CV】第 5 章:神经网络架构和模型_第26张图片是学习值

 由于Q学习在估计的动作值上包含一个最大化步骤,它往往会高估值。

在强化学习中,卷积网络可用于创建能够在复杂情况下获得积极奖励的智能体动作。这个概念首先由 Mnih 等人提出。在 2015 年发表的一篇题​​为《通过深度强化学习实现人类水平控制》的论文中。可在https://web.stanford.edu/class/psych209/Readings/MnihEtAlHassibis15NatureControlDeepRL.pdf找到本文的详细信息。

这包括三个卷积层和一个全连接隐藏层。请注意,在强化学习中,卷积网络的解释与监督学习不同。在监督学习中,CNN 用于将图像分类为不同的类别;在强化学习中,图像代表一种状态,CNN 用于创建代理在该状态下执行的动作。

迁移学习概述

到目前为止,我们已经学会了通过单独设计工作来解决特定任务来构建 CNN 架构。神经网络模型是深度密集型的,需要大量的训练数据、训练运行和调优的专业知识才能达到高精度;然而,作为人类,我们并不是从零开始学习一切——我们向他人学习,我们向云(互联网)学习。当我们试图分析的新类的数据不足时,迁移学习很有用,但在类似的类中有大量预先存在的数据。每个 CNN 模型(AlexNet、VGG16、ResNet 和 inception)都在 ImageNet ILSVRC 竞赛数据集上进行了训练。ImageNet 是一个包含 22,000 个类别中超过 1500 万张标记图像的数据集。ILSVRC 使用 ImageNet 的一个子集,在 1,000 个类别中的每个类别中包含大约 1,000 个图像。

在迁移学习中,可以修改为其他情况开发的预训练模型,以用于我们的特定情况来预测我们自己的类别。我们的想法是选择我们已经研究过的 CNN 架构,例如 AlexNet、VGG16、ResNet 和 inception,冻结一两层,更改一些权重,并输入我们自己的数据来对类别进行预测。在第 4 章“图像深度学习”中,我们了解了 CNN 如何查看和解释图像。

这些学习将用于构建迁移学习,所以让我们总结一下我们在第 4 章“图像深度学习”中的 CNN 可视化中学到的一些关键点:

  • 前几层基本上是汽车的通用特征(例如边缘检测、斑点检测等)——中间层连接边缘形成汽车的特征,例如轮胎、门把手、灯、仪表板、依此类推,最后几层非常抽象,对于特定对象非常具体。
  • 全连接层将其前一层的输出扁平化为单个向量,将其乘以不同的权重,然后对其应用激活系数。它使用机器学习支持向量机SVM )类型的方法进行分类。

现在我们理解了这些概念,我们将能够欣赏以下常用的迁移学习方法:

1.移除并交换 softmax 层:

  • 以使用 TensorFlow 在 ImageNet 上预训练的 CNN 为例,例如 VGG16、AlexNet、ResNet 或 inception。
  • 移除最后一个 softmax 层,并将 CNN 的其余部分视为新数据集的固定特征提取器。
  • 将 softmax 层替换为您自己定义的类数量的自定义 softmax 层,并使用您的数据集训练生成的模型。

2.微调 ConvNet。为了减少过度拟合,请保持一些较早的层固定,并且只微调网络的更高级别部分。正如我们在第 4 章“图像深度学习”中的可视化示例中所见,最后一层非常抽象,并且针对特定数据集进行了调整,因此冻结整个模型并将 softmax 更改为步骤 1的新 softmax可能会导致在更高的不准确性。为了提高准确性,最好从 CNN 中间训练您的自定义图像——这样,全连接层之前的最后几层将具有特定于您的应用程序的特征,这将导致更高的预测准确性。在第 6 章中,使用迁移学习进行视觉搜索,我们将对这个概念进行编码,并看到从 CNN 中间附近开始训练的准确性提高。

概括

在本章中,我们了解了不同卷积网络 (ConvNet) 的架构,以及如何将 ConvNet 的不同层堆叠在一起以将各种输入分类为预定义的类。我们学习了不同的图像分类模型,例如 AlexNet、VGGNet、Inception 和 ResNet,它们为什么不同,它们解决了什么问题,以及它们的总体相似之处。

我们了解了对象检测方法,例如 R-CNN,以及它如何随着时间的推移转化为快速且更快的 R-CNN 以进行边界框检测。本章介绍了两个新模型,GAN 和 GNN,作为两组新的神经网络。本章以对强化学习和迁移学习的介绍结束。我们了解到,在强化学习中,代理与环境交互以根据奖励学习最优策略(例如在交叉路口左转或右转),而在迁移学习中,预训练模型(例如 VGG16)可以用于通过优化 CNN 的后期层来基于新数据派生一个新类。

在下一章中,您将学习如何使用迁移学习来训练您自己的神经网络,然后使用经过训练的网络执行视觉搜索。

你可能感兴趣的:(神经网络,深度学习,cnn)