深度学习 I(Deep Learning I)

分类的基本架构

AlexNet

创新

  • ReLU(修正线性单元)激活函数 -- 训练更快
  • 在 GPU 上训练 -- 并行化使训练更快(实际上当时需要2个GPU!)
  • 重叠的最大池化区域,ReLU后的响应归一化 -- 略微提高准确性
  • 数据增强 -- 减少过拟合
  • Dropout -- 减少过拟合

VGG

VGG 通过堆叠多个3 x 3的卷积核来有效地创建更大的卷积核:

  • 两个3 x 3的卷积层 = 有效的感受野为5 x 5
  • 三个3 x 3的卷积层 = 有效的感受野为7 x 7

创新

堆叠的3x3卷积层

  • 由于额外的非线性,可以学习更复杂的特征
  • 相比具有相同感受野的1层,参数更少

不使用 AlexNet 的响应归一化(normalisation) -- 训练速度更快,但准确率下降很小。

GoogLeNet

Auxillary classifers: 辅助分类器

Inception module

在卷积神经网络(CNNs)中选择合适的卷积核大小是很困难的,因为在图像中的物体或特征可能出现在任何尺度上。

为了解决这个问题,Inception模块被提出。它的核心思想是同时使用多种不同的卷积核大小,并将得到的结果连接在一起。

Inception 模块

Inception模块的主要特点如下:

  • 并行使用多种不同的卷积核大小(例如,1x1、3x3、5x5)进行卷积操作。
  • 将这些卷积的输出沿深度维度连接在一起。
  • 然后将这个连接的输出传递给下一层或模块。

除了多种卷积核大小,Inception模块还可能包括一个作为其并行路径的最大池化操作。池化操作有助于捕获空间不变性并减少空间维度。

Inception模块的结构允许它自动学习在输入数据中捕获特征的最合适的尺度,无需手动调整。

辅助分类器

  • 只在训练过程中使用 ------ 根据早期层次的表示对图像进行分类并更新参数
  • 帮助解决梯度消失问题。

ResNet

背景

更深的神经网络是否可以保证更好的性能?

  • 梯度消失和梯度爆炸: 在训练过程中,深层网络可能会遇到梯度消失和梯度爆炸的问题,这可能会妨碍学习过程。
  • 并不总是必要的: 根据数据和任务的复杂性,较浅的网络可能就足够了,甚至可能比更深的网络表现得更好。

性能先是达到饱和,然后逐渐下降。这不是因为过拟合, 在训练集上的性能甚至更差。

理论上,深度网络应该能够学习到一组参数,使其能够像小型网络那样运作。

  • 例如,某些卷积层可能会学习到恒等核(identity kernels),而其他层可能会学习到浅层网络的核。

然而,深层卷积神经网络(CNNs)似乎不能学习到这种解决方案,至少在合理的训练时间内是这样。这也意味着简单地增加网络的深度并不总是一个好的策略,因为它可能并不总是能够带来更好的性能。

短路连接(Shortcut connections)

增加短路连接,可以跳过一些层(layers)。

残差学习(Residual learning)

  1. 传统网络
    • 输入: <math xmlns="http://www.w3.org/1998/Math/MathML"> x x </math>x
    • 输出: <math xmlns="http://www.w3.org/1998/Math/MathML"> H ( x ) H(x) </math>H(x)
    • 描述: 传统网络直接学习了输入 <math xmlns="http://www.w3.org/1998/Math/MathML"> x x </math>x 的特征表示。
  2. 残差网络
    • 输入: <math xmlns="http://www.w3.org/1998/Math/MathML"> x x </math>x
    • 输出: <math xmlns="http://www.w3.org/1998/Math/MathML"> H ( x ) − x H(x) - x </math>H(x)−x
    • 描述:残差网络并不直接学习 <math xmlns="http://www.w3.org/1998/Math/MathML"> x x </math>x的特征表示。相反,它学习了输入 <math xmlns="http://www.w3.org/1998/Math/MathML"> x x </math>x与其特征表示之间的差异或"残差",然后将这个差异加回到原始输入 <math xmlns="http://www.w3.org/1998/Math/MathML"> x x </math>x上,从而得到 <math xmlns="http://www.w3.org/1998/Math/MathML"> H ( x ) H(x) </math>H(x)。

优势: 残差网络通过学习差异(或残差)使得网络更容易学习恒等映射(identity mapping),这在传统网络中可能较难实现。恒等映射意味着输入可以直接传递到输出,而无需任何改变,这在深层网络中是非常有益的,因为它可以帮助防止梯度消失和爆炸。

残差块 (Residual block)

  • 通过使网络更容易学习身份映射来简化学习问题。
  • 允许更深的网络提高准确性。

MobileNet

轻量级移动应用架构

可分离滤波器 (Separable filters):

  • 记住,使用2D滤波器进行滤波等同于使用两个正交的1D滤波器进行滤波。
  • 同样地,使用3D滤波器进行滤波等同于使用一个2D滤波器和一个正交的1D滤波器进行滤波。
  • MobileNets 使用深度可分离滤波器(depthwise-separable filters)- 在x,y方向上的2D滤波器和在通道上的1D滤波器。

这里的主要概念是,通过使用可分离的滤波器,可以减少计算的复杂性和资源消耗。特别是在移动设备上,这种方法可以提高效率和性能。MobileNets就是一个利用此技术的深度学习模型,特别为移动设备设计。

创新点

深度可分离卷积 (Depthwise separable convolution):

  • 更少的参数和更少的计算。
  • 限制模型可以学习的卷积核 - 并非所有的卷积核都是可分离的。
  • 比其他架构更小、更快。
  • 准确性低于VGG、ResNet等。
  • 但更适合实时应用和手机。

深度可分离卷积是一种优化技术,旨在减少神经网络中的计算量和参数数量。虽然这种方法可能导致一些准确性的损失,但它提供了更高的计算效率和速度,特别适合资源有限的设备,如手机,或需要实时处理的应用。

分类(Classification)

ImageNet 分类(像素 & 特征)

1000种物体类别。 模型输出 = 基于1000个类别标签的概率分布(来自softmax函数)。

  • Top-1 Accuracy
    • 对于每张测试图片,如果模型预测的最有可能的类别 == 真实类别,则模型是正确的。
  • Top-5 Accuracy
    • 对于每张测试图片,如果模型预测的5个最可能的类别中的任何一个 == 真实类别,则模型是正确的。

卷积神经网络(CNN)是深度学习中专门用于图像处理的一种网络架构。它们在许多图像分类任务中都取得了非常好的结果,甚至在某些任务上超过了人类的表现。但与此同时,CNN也可能会犯一些错误,但这些错误通常与图像的特定属性(如不常见的角度或小物体)有关,这意味着CNN在完成这些任务时确实学到了有意义的特征。

迁移学习(Transfer Learning)

图像识别

像素(pixels) 像素是一个不佳的分类空间。

  • 高维空间:256 x 256 x 3 的图像 = 196,608个属性。
  • 不相关的变换(如平移、光照变化、尺度变化、旋转等)会导致像素值发生大的变化。

特征(Features)

图像识别的好的特征空间: • 维度较低 --- 例如,每张图像有数千个值。 • 将同一类别的图像映射到空间的相似部分(同一类标签的图像具有相似的特征)。

为图像识别选择一个好的特征空间非常关键。一个好的特征空间应该有较低的维度,这样可以避免维度灾难,并使计算更加高效。同时,同一类别的图像应该在特征空间中靠得很近,这样分类器可以更容易地区分不同的类别。这也是为什么深度学习和其他特征提取方法在图像识别中如此受欢迎的原因。

使用预训练网络(Pretrained networks)

  • CNNs将图像从像素转化为适合分类的高级特征(特征嵌入)。
  • 这些高级特征在一系列的计算机视觉任务上都能获得良好的性能。
  • 迁移学习 --- 使用从大规模任务(例如,ImageNet分类)上训练的CNN得到的特征作为另一个任务的输入,只需最少的再训练。

预训练网络是深度学习中的一种常见策略。通过在大型数据集上预先训练网络,然后利用这个网络提取特征或进行微调,可以在新任务上获得更快和更好的性能。这种方法可以节省大量的时间和计算资源,特别是当新任务的数据量较少或不足以从头开始训练一个深度模型时。

迁移学习(Transfer Learning)

从在ImageNet上训练的CNN的后期层中提取表示:

  • 例如,对于每张图片,取得喂给1000类ImageNet分类的4096个神经元的激活值。

使用这些神经元的激活值作为你选择的分类器(如SVM、K-NN等)的特征。

更高效的方法

  1. 移除在ImageNet上训练的CNN的输出层。
  2. 用适合你任务的输出层替换它。
  3. 初始化你的新层并只训练这一层;冻结所有其他网络参数。

或者:

可以选择性地训练一些后面的层,但冻结前面的层。

重新训练层(Retraining layers)

  • 微调 (Finetuning) = 重新训练预训练CNN的层。
  • 微调多少层取决于数据集大小以及它与ImageNet有多相似。
  • 与ImageNet不太相似的数据集可能需要更多地重新训练底层。
  • 如果数据集大小有限,训练底层可能只会导致过拟合。

小结

  • 在ImageNet上训练的CNNs在图像识别任务上产生了最先进的性能。
  • 通常使用在ImageNet上预训练的CNNs来执行各种计算机视觉任务,可以直接使用(作为"现成的"特征嵌入)或进行一些微调。
相关推荐
金蝶软件小李1 小时前
深度学习和图像处理
图像处理·深度学习·计算机视觉
Mr.简锋2 小时前
opencv常用api
人工智能·opencv·计算机视觉
liyuanbhu2 小时前
Halcon HImage 与 Qt QImage 的相互转换(修订版)
qt·计算机视觉·halcon
春末的南方城市4 小时前
开源音乐分离器Audio Decomposition:可实现盲源音频分离,无需外部乐器分离库,从头开始制作。将音乐转换为五线谱的程序
人工智能·计算机视觉·aigc·音视频
Make_magic4 小时前
Git学习教程(更新中)
大数据·人工智能·git·elasticsearch·计算机视觉
goomind5 小时前
深度学习模型评价指标介绍
人工智能·python·深度学习·计算机视觉
youcans_5 小时前
【微软报告:多模态基础模型】(2)视觉理解
人工智能·计算机视觉·大语言模型·多模态·视觉理解
金蝶软件小李5 小时前
基于深度学习的猫狗识别
图像处理·深度学习·计算机视觉
__基本操作__7 小时前
边缘提取函数 [OPENCV--2]
人工智能·opencv·计算机视觉
这是一个图像8 小时前
从opencv-python入门opencv--图像处理之图像滤波
图像处理·opencv·计算机视觉·中值滤波·高斯滤波·双边滤波·图像滤波