Advertisement

深度学习学习笔记+知识点总结(4万字)

阅读量:

文章目录

  • 深度学习

    • 神经网络中的训练周期、迭代步骤及批量大小
      • 反向传播算法(BP算法)
      • 卷积神经网络的核心原理及其优势
      • 鞍点的定义及其特点是什么?
      • 神经网络的数据预处理通常采用哪些方法?
      • 神经网络参数初始化时通常采用哪些策略?
      • 卷积操作的基本概念是什么?
  • 卷积层的反向传播过程具体是怎样的?

  • CNN模型所需的运算量(FLOPS)和权重数量是如何计算的?

  • 池化(Pooling)

    • 卷积神经网络中,在卷积层之后如何接收后续传递过来的损失信息?

    • 均值汇聚机制

    • 最大值汇聚机制

      • 感受野

        • 感受野的作用
        • 感受野计算
        • 卷积神经网络的感受野
      • 权重初始化方法

        • Xavier
  • 正则化方法

    • Batch Normalization(BN)
      • BN 原理
      • 手写 BN 的具体实现细节
      • 如何理解 BN 的作用?
      • BN 参数的具体构成及其意义
      • BN 反向传播过程的详细推导
      • BN 在训练与测试阶段的区别主要体现在哪?
      • BN 是放置在激活函数前还是后?请说明原因
  • 权重归一化(WN)

  • 层归一化(LN)

  • 样本归一化(IN)

  • 群归一化(GN)

  • 这些归一化方法的主要区别体现在哪里呢?

  • 提升算法性能

    • 011 小批量梯度下降方法

    • 小批量梯度下降方法与随机梯度下降方法(SGD)

    • SGD每次迭代如何操作?其背后原理是什么?

      • 动量梯度下降法(Momentum)
      • RMSprop
      • Adagrad
      • Adam
    • 017 常见的激活函数及其特点

        • Adam 优化器的迭代公式
  • 激活函数的定义

  • 018 ReLU及其变体版本

    • Sigmoid函数是一种常用的激活函数
      • 当使用Sigmoid作为激活函数时,在分类任务中为什么选择交叉熵损失而非均方误差?这是因为交叉熵损失更能捕捉类别之间的差异。

        • tanh
        • ReLU
          • ReLU 激活函数为什么比sigmoid和tanh好?
  • ELU

复制代码
* * * ReLU 激活函数为什么能解决梯度消失问题?
* ReLU 有哪些变体?

* Dropout
* * Dropout 基本原理
  * Dropout 如何实现?
  * Drop 在训练和测试的区别

* 损失函数(Loss)
* * Cross Entropy Loss(CE)
  * Hinge Loss
  * Focal Loss
  • 1*1 卷积层的作用是什么?

  • AlexNet

  • VGG网络

  • ResNet架构

    • ResNet为何不采用Dropout层?
    • YOLOv1 * 而实际上它是如何实现特征提取的?
      • 它为何未从一开始就引入残差块?

        • 而其具体实现则是采用了大小为7×7的卷积核。
      • 目标检测网络之 YOLOv3

        • YOLOv2
  • 高分辨率分类器

        • 如何解释Bottleneck层?
        • ResNet通过何种机制解决梯度消失?
          • ResNet网络越来越深,准确率会不会提升?
    • ResNet v2

      • ResNet v1 与 ResNet v2的区别
      • ResNet v2 的 ReLU 激活函数有什么不同?
    • ResNeXt

    • Inception系列(V1-V4)

      • InceptionV1
      • InceptionV2
    • 023 R-CNN系列

      • InceptionV3
      • InceptionV4
  • DenseNet

    • 为何DenseNet相较于ResNet更为高效?

    • 它为何相较于ResNet具有更高的显存占用?

      • SE-Net

        • Squeeze-Excitation结构是怎么实现的?
      • FCN

      • U-Net

      • DeepLab 系列

      • 边框回顾(Bounding-Box Regression)

      • 反卷积(deconv)/转置卷积(trans)

      • 空洞卷积(dilated/Atrous conv)

      • Pooling层原理

      • depthwise卷积加速比推导

      • 为什么降采用使用max pooling,而分类使用average pooling

      • max pooling如何反向传播

      • 反卷积

      • 组卷积(group convolution)

      • 交错组卷积(Interleaved group convolutions,IGC)

      • 空洞/扩张卷积(Dilated/Atrous Convolution)

      • 转置卷积(Transposed Convolutions/deconvlution)

      • Group Normalization

      • Xception

      • SENet

      • SKNet

      • GCNet

      • Octave Convolution

      • MobileNet 系列(V1-V3)

        • MobileNetV1
        • MobileNetV2
        • MobileNetV3
        • MobileNet系列为什么快?各有多少层?多少参数?
        • MobileNetV1、MobileNetV2和MobileNetV3有什么区别
        • MobileNetv2为什么会加shotcut?
        • MobileNet V2中的Residual结构最先是哪个网络提出来的?
      • ShuffleNet 系列(V1-V2++)

        • ShuffleNetV1
        • ShuffleNetV2
  • IGC系列版本(V1至V3)

  • 深度可分离卷积机制(Depth separable convolution)

  • 如何调节学习率以实现最佳性能?

  • 神经网络结构中的深度与宽度在功能上存在何差异?

  • 网络压缩与量化技术在实际应用中有哪些具体实现?

  • 如何优化Batch Size以提升训练效率?

  • 在训练阶段BN层与Dropout层的作用有何不同?而在测试阶段又该如何配置?

  • 在深度学习调参过程中有哪些实用技巧值得分享?

  • 深度学习框架中,默认选择奇数尺寸的卷积核(如3x3或5x5)而非偶数尺寸(如2x2或4x4),其背后的原因是什么?

  • 在深度学习训练过程中如何权衡并合理利用L1正则化以获得稀疏解?

  • EfficientNet架构在提升模型效率方面有何独特之处?

  • 如何深入理解归一化层对神经网络性能提升的作用机制?

  • 多标签分类问题的核心挑战是什么?有哪些有效的解决方案?

  • TODO

深度学习

神经网络中的Epoch、Iteration、Batchsize

神经网络中epoch与iteration是不相等的

Batch size refers to the batch size in Chinese, also known as batch dimension. In deep learning contexts, stochastic gradient descent (SGD) is commonly employed, meaning that each training iteration processes a batch of samples from the training dataset.

iter:其中文译名为迭代。每个iter都涉及使用batchesize数量的数据完成一次前向传播和反向传播的过程。每个iter均包括正向传播和反向传播两个阶段

epoch表示为:每个 epoch 包含对整个训练数据集的一次前向传播和一次反向传播;每个 epoch 包括对所有训练样本的一次正向传播和反向传播。

举例来说,在一个包含1,000个样本的训练集中,默认设置为batchsize=10的情况下,请问您能告诉我完成整个数据集需要多少次迭代以及多少个完整的Epoch吗?

img

参考资料

反向传播(BP)

  • TODO

参考资料

CNN本质和优势

局部卷积(提取局部特征)

权值共享(降低训练难度)

Pooling(降维,将低层次组合为高层次的特征)

多层次结构

鞍点的定义和特点?

  • TODO

神经网络数据预处理方法有哪些?

  • TODO

神经网络怎样进行参数初始化?

  • TODO

卷积

  • TODO

参考资料

Feature Learning Through ConvNets

卷积操作在深度学习中起着关键作用

掌握图像卷积操作的重要性

关于深度学习中卷积核操作

卷积的反向传播过程

  • TODO

参考资料

An Introduction to Convolutional Neural Networks: A Tutorial Overview

Deep Learning论文笔记之(四)基于CNN的卷积神经网络推导与实现

Deep Learning论文笔记之(四)基于CNN的卷积神经网络原理分析及其设计与实现

逆向信息传递扩散算法

Deep learning:第51课(CNN的逆向传播及其实践)

卷积神经网络(CNN)反向传播算法

详细推导卷积神经网络(CNN)中的反向传播算法步骤

全连接神经网络中反向传播算法数学推导

卷积神经网络(CNN)反向传播算法推导

CNN 模型所需的计算力(flops)和参数(parameters)数量是怎么计算的?

考虑一个卷积层,在其尺寸设定中包含参数(其中c代表输入通道数而n代表输出通道数)。对应的特征图尺寸设定为此值,则此卷积层具有

paras =

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

FLOPs =

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

TODO

参考资料

池化(Pooling)

平均池化(Mean Pooling)

Mean pooling layer在正向传播阶段通过计算每个patch区域像素值的平均来生成特征图,在反向传播过程中,则是将某一个区域对应的梯度均分后回传至上一层。为了确保正向与反向传播阶段梯度(残差信号)的总和得以保持一致,在反向过程具体实现时需要将当前层某节点接收的梯度按数量n均分后再分配给上一层对应节点。这个过程相对直观易懂,并且可以通过图示辅助理解其工作原理

最大池化(Max Pooling)

为了确保梯度之和保持恒定的要求,max pooling必须满足这一前提条件。其前向传播机制是将每一个patch中的最大值传递给下一层神经元,而其余像素则会被舍弃不参与计算。反向传播过程中则是将当前层神经元的梯度直接分配给上一层对应的最大值位置,其余位置则不会接收任何梯度,其数值为零。因此,在区分Max Pooling与Mean Pooling的操作特性时,则需要记录在池化过程中究竟选取的是哪一个像素的最大值。参考caffe框架中的pooling_layer.cpp文件,以下部分展示了Max Pooling实现的相关代码

复制代码
    // If max pooling, we will initialize the vector index part.
    
    if (this->layer_param_.pooling_param().pool() == PoolingParameter_PoolMethod_MAX && top.size() == 1)
    
    {
    
    max_idx_.Reshape(bottom[0]->num(), channels_, pooled_height_,pooled_width_);
    
      }
    
    
    
      
      
      
      
      
      
      
      
      
      
      
    
    代码解读

参考资料

池化层怎么接收后面传过来的损失?

感受野的概念体现在RF上。值得注意的是,N_RF与RF之间存在相似性,其中符号N代表neighbour,具体指代第n层的某一个特征在前一层的RF中进行表达。为了简化计算过程,我们需要明确区分N_RF这一过渡变量与原始的RF概念,避免产生混淆。同时,步长 stride 用于控制卷积窗口移动幅度,而卷积核大小 ksize 则决定了每次滑动时窗口覆盖的空间范围。

(N-1)_RF = f(N_RF, stride, kernel) = (N_RF - 1) * stride + kernel

第一层是3 3,第二层是7 7

黄色feature map对应的感受野是7*7大小

黄色feature map对应的感受野是7*7大小

平均池化(average pooling)

  • TODO

最大池化(max pooling)

  • TODO

感受野

感受野(Receptive Field)的概念被卷积神经网络中的每一层输出的特征图(feature map)上的像素点所对应于原始输入图片上所对应的区域大小。举个例子来说,在深度学习模型中感受野的作用就是将局部图像信息传递给更深一层的特征提取层。举个例子来说,在深度学习模型中感受野的作用就是将局部图像信息传递给更深一层的特征提取层。

感受野的作用

(1)通常该 task 对感受野大小有一定要求。例如,在图像分类任务中, 通常要求最终卷积层的感受野应超过输入图像的尺寸. 此外, 在网络设计上,"网络结构越深时", 整体感受 wild 会随之增大并带来更好的 performance.

密集预测task旨在输出足以覆盖像素的感受野的大尺寸结果,在确保决策过程中不会遗漏关键信息的前提下通常情况下深度越大越好

(3)在目标检测任务中进行锚框设置时需确保其与感受野精确匹配,在这种情况下如果锚框过大或偏离感受野,则会导致检测性能显著下降

感受野计算

在计算感受野时有下面几点需要说明:

(1)第一层卷积层的输出特征图像素的感受野的大小等于卷积核的大小。

(2)深层卷积层的感受野大小和它之前所有层的滤波器大小和步长有关系。

(3)计算感受野大小时,忽略了图像边缘的影响,即不考虑padding的大小。

下面给出计算感受野大小的计算公式:

RF_{l+1} = (RF_{l}-1)*stide + kernel

其中RF_{l+1}是该特征图对应的receptive field size(目标receptive field),而RF_{l}则代表上一层特征图对应的receptive field size(源域),在卷积层操作中f_{l+1}定义为当前层卷积核的数量(kernel count)。这里所指的累积步长乘积项strides用于表示在目标域与源域之间进行映射时所涉及的所有中间步骤(intermediate steps)的累积步长(cumulative stride)

举例而言,在深度学习模型中

以上面举的sample为例:

在该网络架构中,Out1层作为初始卷积层,在该网络架构中,默认情况下其感受野等于其卷积核的大小。进一步可知第一层卷接操作导致特征图的空间分辨率降低。其中第一层卷积操作后的特征图空间分辨率(Receptive Field)值为3。

Out2层的感受野RF2 = 3 + (3 - 1) * 1 = 5,即第二层卷积层输出的特征图的感受野为5

Out3层的感受野RF3 = 3 + (5 - 1) * 1 = 7,即第三层卷积层输出的特征图的感受野为7

参考资料

卷积神经网络在物体检测中的感受野尺寸计算

如何计算感受野(Receptive Field)——原理

Calculating the Receptive Field of Convolutional Neural Networks

卷积神经网络的感受野

  • TODO

参考资料

权重初始化方法

  • TODO

Xavier

  • TODO

正则化方法

参数范数惩罚机制是一种重要的正则化技术,在模型训练中起到显著作用。
L2正则化技术通过在损失函数中引入平方权重衰减项来防止模型过拟合。
L1与L2正则化的区别主要体现在对权重衰减项的不同处理方式上。
数据增强技术能够有效提升模型的泛化能力。
噪声鲁棒性分析是评估模型抗干扰能力的重要指标。
通过注入噪声优化输出目标是一种常见的噪声利用策略。
半监督学习方法能够在有少量标注数据的情况下提升模型性能。
多任务学习框架能够同时优化多个相关任务的目标函数。
提前终止策略分析是改进训练过程效率的重要方向之一。
参数绑定与共享机制探讨能够降低模型复杂度并提高训练效率。
稀疏表示方法研究是当前机器学习领域中的热点问题之一。
集成化方法的应用探讨为复杂问题提供了新的解决方案思路。

参考资料

Batch Normalization(BN)

BN 原理

针对ICS的问题(但经有研究者证实其问题尚不能完全解决),BN受白化操作的启发。

由于深层神经网络在经过非线性变换之前的激活输入值(即x=WU+B的形式)会受到网络深度加深或持续训练过程的影响而逐步发生分布上的变化或偏离;这一现象的存在直接导致反向传播过程中低层神经元的梯度消失;而且这种现象会随着网络深度的增加而愈发明显地影响模型收敛速度。

BN主要通过规范手段将每层神经网络中任一神经元的输入值分布调整至均值为零、方差为一的标准正态分布。其核心在于将高度偏态的数据重新引导至相对接近标准形态。这种调整使得激活后的输入信号落在非线性激活函数较为敏感响应范围,并最终导致微小的变化在损失函数上产生显著影响

上面记不住没关系,记住“保持数据同分布”即可

参考资料

手写 BN

的简单计算步骤为:

沿着通道计算每个batch的均值\mu=\frac{1}{m} \sum_{i=1}^{m} x_{i}

在通道上计算该批次数据的方差\delta^2 = \frac{1}{m} \sum_{i=1}^{m}(x_i - \mu_{\mathcal{B}})^2

对x做归一化,

image

通过引入缩放和平移参数\gamma\beta来调整数据,在经过归一化处理后得到的结果为:y_{i} = \gamma \widehat{x}_{i} + \beta

在判别模型中应用BN(Batch Normalization)是一种常见的做法, 如图片分类等场景. 由于它旨在使每个批次的数据分布保持一致, 因此能够有效提升训练过程中的稳定性与收敛速度. 然而, BN对于批处理大小的选择较为敏感, 因为其计算均值与方差的过程仅基于当前批次的数据进行, 所以当批处理大小过小时, 计算出的数据统计量将无法充分反映整个数据集的概率分布特征

BN 的作用?

BN加快网络的训练与收敛的速度

在深度神经网络中, 如果不同层次的数据分布不一致时, 将使该网络难以实现有效的收敛与训练过程。通过将各层数据转换至均值为零、方差归一化(即单位方差)的状态下进行处理, 这样处理后各层数据分布趋于一致, 则整个网络的收敛过程相对容易。

控制梯度爆炸防止梯度消失

以sigmoid函数为例进行说明,在神经网络中使用该函数会使输出结果限定在0到1之间这一范围内。当输入值过大或过小时经过sigmoid函数处理后其输出范围会显著缩小并且在反向传播过程中该函数会产生非常小的梯度进而导致梯度消失的现象出现这样就会使得网络的学习速率降低甚至停滞不前;值得注意的是由于神经网络前端通常涉及更多的参数计算过程较后端更为复杂因此会导致前端计算所得的导数信息极少而无法有效更新模型参数从而影响整体训练效果;而对于Batch Normalization这一技术通常会被插入到全连接层与激励函数之间通过标准化处理使数据在进入激活函数之前集中分布在接近零的位置这样能够显著提升各层神经元的激活强度并加快收敛速度

同样,使用了BN之后,可以使得权值不会很大,不会有梯度爆炸的问题。

防止过拟合

在每个批次处理过程中(Batch Processing),BN算法通过动态计算当前批次内所有数据特征之间的差异性特征(Batch Normalization),从而实现了对数据分布的有效标准化(Standardization)。这种标准化处理能够有效地减少数据分布对模型参数初始化的影响(Parameter Initialization),从而提高了模型的整体收敛速度(Convergence Rate)和预测性能(Performance)。

BN 有哪些参数?

γ和β两个尺度变化系数

BN 的反向传播推导

image

下面来一个背诵版本:

image

BN 在训练和测试的区别?

image-20210803225110049

BN 是放在激活前面还是后面?

通常放置在激活层之前。经过一些实验验证,并结合了网络上的相关建议。差异不大的是我的实验涉及语音唤醒(Non-CV实验)。一般情况下都是放置在前面。

Weight Normalization(WN)

  • TODO

Layer Normalization(LN)

  • TODO

Instance Normalization(IN)

  • TODO

Group Normalization(GN)

  • TODO

BN、LN、WN、IN和GN的区别

主要且常用 的归一化操作有BN,LN,IN,GN ,示意图如图所示。

在图中用蓝色标注的部分表示需要归一化的区域。这里有两个维度C和N分别代表通道数channel以及批量大小batch size。需要注意的是,在第三维的大小对应于H乘以W的实际数值。也就是说,在这一维上我们实际上是将二维数据展平成了一个一维向量的形式。因此可以用三维图形直观地展示整个计算过程。值得注意的是,在BN操作中其计算依赖于批处理数据的数量(蓝色区域显示的是均值与方差的计算单元)。然而,在LN和IN的操作中则与此无关(具体而言LN对应group=1的情况而IN则是group=C时的具体实现)。

参考资料

文章索引:深度学习中的五种归一化技术概述与分析

参考文献

本文对Batch Normalization(BN)、Layer Normalization(LN)、Instance Normalization(IN)、Group Normalization(GN)以及Switchable Normalization(SWN)进行了系统性分析,并对其适用场景和性能特点进行了深入探讨。

优化算法

  • 随机梯度下降法(Stochastic Gradient Descent)
  • 小批量处理(Mini-Batch)
  • 动量法(Momentum)
  • Nesterov动量法
  • 自适应梯度算法(AdaGrad)
  • AdaDelta
  • 均方根传播算法(RMSProp)
  • Adam优化算法
  • Adamax优化算法
  • Nadam优化算法
  • AMSGrad
  • AdaBound

参考资料

《Deep Learning》第8章:关于深度学习模型优化的内容。

从 SGD 到 Adam —— 深度学习优化算法概览(一)

Adam 深入探讨了哪些问题 —— 深度学习优化算法概览(二)

An introduction to gradient-based optimization techniques

011 梯度下降法

梯度下降的核心:一种以最小化目标函数为目标、利用梯度信息逐步调整权重参数的方法。

缺点:

  1. 不保证全局最优
  2. 到极小值附近收敛速度变慢
  3. 可能出现“之”字型下降

梯度下降法

  • TODO

mini-batch梯度下降法

小批量梯度下降算法是一种折中方案,在训练数据中选择一个小规模样本集(通常选择数量为2的倍数如32、64、128等)来进行计算操作。这种做法既能确保训练过程更加稳定可靠,并且利用批处理技术同样能够发挥出矩阵运算的优势。这也是当前应用最广泛的梯度下降算法之一。

批量梯度下降算法
对于批量梯度下降算法而言,在整个训练数据集中计算损失函数。
当数据集规模较大时,可能会遇到内存不足的问题。
该算法的整体收敛速度通常较为缓慢。

区别在于:全部数据集合进行一次损失函数计算与一小批样本进行一次损失函数计算之间的差异

随机梯度下降法(SGD)

SGD每步做什么,为什么能online learning?

随机梯度下降算法是另一个极端情况,在线学习方法是针对单个训练样本计算的目标函数值(即损失函数),并据此执行一次参数更新操作。因此,在此情形下通常能更快达到收敛效果;然而需要注意的是,在这种高频度的参数更新过程中可能会导致目标函数值出现振荡现象,并且由于估计量方差较大可能导致模型性能不稳定

随机梯度下降算法是另一个极端情况,在线学习方法是针对单个训练样本计算的目标函数值(即损失函数),并据此执行一次参数更新操作。因此,在此情形下通常能更快达到收敛效果;然而需要注意的是,在这种高频度的参数更新过程中可能会导致目标函数值出现振荡现象,并且由于估计量方差较大可能导致模型性能不稳定

区别点在于:训练集中的一个训练样本 做一次损失函数计算

动量梯度下降法(Momentum)

介绍指数加权平均这一知识点,并结合下文所述的内容进行展开讲解。其中图中所示的前两个方程组可以通过该公式推导出新的更新方式,并避免了每次梯度更新相互独立的问题。

Momentum

参考资料

RMSprop

S_{dW}=\beta S_{dW}+\left ( 1-\beta \right )dW^{2}

S_{db}=\beta S_{db}+\left ( 1-\beta \right )db^{2}

W=W-\alpha\frac{dW}{\sqrt{S_{dW}}}, b=b-\alpha\frac{db}{\sqrt{S_{db}}}

在更新权重的过程中, 采用开平方的方式可以使较大的梯度变化幅度显著减小, 而较小的梯度变化程度相对有限. 这样一来, 较大梯度方向上的变动范围得以缩小, 这也就意味着在整个梯度下降过程中振荡幅度会有所降低.

Adagrad

  • TODO

Adam

Adam算法融合了Momentum与RMSprop的梯度下降方法,在机器学习领域具有极高的应用频率,并已被广泛应用于各种神经网络结构。

v_{dW}=\beta_{1} v_{dW}+\left ( 1-\beta_{1} \right )dW

v_{db}=\beta_{1} v_{db}+\left ( 1-\beta_{1} \right )db

S_{dW}=\beta_{2} S_{dW}+\left ( 1-\beta_{2} \right )dW^{2}

S_{db}=\beta_{2} S_{db}+\left ( 1-\beta_{2} \right )db^{2}

v_{dW}^{corrected}=\frac{v_{dW}}{1-\beta_{1}^{t}}

v_{db}^{corrected}=\frac{v_{db}}{1-\beta_{1}^{t}}

S_{dW}^{corrected}=\frac{S_{dW}}{1-\beta_{2}^{t}}

S_{db}^{corrected}=\frac{S_{db}}{1-\beta_{2}^{t}}

W:=W-\frac{av_{dW}^{corrected}}{\sqrt{S_{dW}^{corrected}}+\varepsilon }

超参数:
\alpha ,\beta _{1},\beta_{2},\varepsilon

t是迭代次数

  • TODO

017 常见的激活函数及其特点

  • Sigmod
    =======
Adam 优化器的迭代公式
  • TODO

激活函数

Tanh

ReLU


018 ReLU及其变体

Leaky ReLU

参考资料

What's the definition of an activation function?

该研究全面分析了涵盖26种不同神经网络激活函数的特性及其表现

Sigmoid

  • TODO
Sigmoid用作激活函数时,分类为什么要用交叉熵损失,而不用均方损失?
  • TODO

tanh

  • TODO

ReLU

  • TODO

ReLU 相关变体

ReLU 激活函数为什么比sigmoid和tanh好?

PReLU

RReLU

ELU

ELU
ReLU 激活函数为什么能解决梯度消失问题?
  • TODO
ReLU 有哪些变体?
  • TODO

Dropout

Dropout 基本原理

  • TODO

参考资料

Dropout 如何实现?

  • TODO

Drop 在训练和测试的区别

  • TODO

损失函数(Loss)

  • TODO

Cross Entropy Loss(CE)

  • TODO

Hinge Loss

  • TODO

Focal Loss

  • TODO

1*1 卷积有什么作用?

  • TODO

AlexNet

  • 使用ReLU激活函数
  • Dropout
  • 数据增广

先给出AlexNet的一些参数和结构图:

卷积层:5层

全连接层:3层

深度:8层

参数个数:60M

神经元个数:650k

分类数目:1000类

AlexNet

参考资料

AlexNet

VGG

《Very Deep Convolutional Networks for Large-Scale Image Recognition》

改写说明

VGG 16相比 AlexNet 的一个改进是替换成连续排列的大尺寸卷积核取代 AlexNet 中的大尺寸 卷 积 核(如 )。对于给定的感受野(与输出相关的输入图像局部区域),堆叠的小尺寸 卷 积 单 �元 能够超越 大 尺寸 卷 积 单 元。多层非线性激活模块有助于提升模型对复杂模式识别的能力,并通过增加网络深度来增强特征提取能力。同时计算开销相对较小且参数数量较少。

简而言之,在VGG架构中替代表现为三个3×3卷积层替代一个7×7卷积层,并且替代表现为两个3×3卷积层替代一个5×5的卷积层。其主要目的则在于,在确保感知域相同的前提下,增强了网络的整体深度。从而在一定程度上提高了神经网络的表现。

例如,在步长为1的情况下,三个依次叠加的3×3卷积核的作用效果等同于一个大小为7×7的感受野(实际上这是指三个连续的3×3卷积等同于一个7×7的单个卷积),其参数规模约为9C²乘以三(即27C²)。若采用直接使用单个7×7卷积核的方式,则参数规模达到49C²(其中C代表输入与输出通道的数量)。显然地,在减少计算复杂度的同时(即减少参数数量),采用多个较小尺度(如多个连续的小尺寸)的滤波器能够更好地维持图像的空间特性

这里解释一下为什么使用2个3x3卷积核可以来代替5*5卷积核:

在图像处理中将一个5\times 5大小的空间域内的卷积操作等价于一个小规模的小型全连接网络在整个5\times 5区域滑动操作。具体而言我们将整个过程分为两步:首先使用一个3\times 3的卷积滤波器对输入图像进行初步处理;接着将该层输出与另一个全连接层进行链接。这种设计使得整个过程更加高效并且能够实现与单个5\times 5卷积分的效果相当的效果。这不仅减少了计算复杂度并且保持了原有的性能水平

具体如下图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

关于为什么采用三个3×3卷积核可以替代7×7卷积核的问题,在推导过程中我们发现其原理与之前类似的情况我们可以自行绘图理解。

下面是VGG网络的结构(VGG16和VGG19都在):

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
  • VGG16由16个隐藏单元构成(其中包含13个卷积子网络和3个全连接子网络),具体分布于表格中的第D列部分
  • VGG19由19个隐藏单元构成(其中包含16个卷积子网络和3个全连接子网络),具体分布于表格中的第E列部分

VGG网络的高度统一采用了全程采用 3×3 卷积核与 2×2 最大池化层

如果你希望更直观地呈现VGG架构,请参考经典卷积神经网络(CNN)结构可视化工具,该工具能让你以高分辨率且清晰易懂的形式深入观察VGG网络

VGG优点:

  • VGGNet架构极为简洁, 该网络采用了统一尺寸的卷积核(3×3)与最大池化(2×2).
  • 由少量的小滤波器组(3×3)构成的网络, 在性能上超越单一大滤波器(5×5或7×7).
  • 实证表明, 深度增强网络结构能够显著提高模型性能.

VGG缺点

由于其对计算资源的需求较高以及采用了大量参数(非基于3×3卷积的设计),VGG网络造成了较大的内存消耗(达到140MB)。其中绝大多数的参数都源自于第一层全连接层。值得注意的是,VGG网络共有三个全连接层。

PS:某些研究指出:通过移除这些全连接层后(即不再考虑它们),对模型性能的影响不大(即效果没有明显变化),这表明网络参数数量得到了显著减少。

注:许多预训练的方法主要采用了VGG模型(尤其是第16号和第19号版本)。相对于其他方法而言,在参数量方面存在较大差异:与AlexNet相比(后者仅有200 million个参数),VGG nets拥有约500 million个参数;而GoogLeNet则更是少得多。因此,在训练一个VGG模型时通常需要耗费较长的时间;幸运的是,在此领域中提供了大量现成的预训练模型供我们便捷地使用。

关于感受野:

假设你连续叠加了三个连续进行的卷积操作(每层之间都带有激活函数)。在这个排列下,在第一个卷积操作中工作的每一个神经元都能够观察到输入区域的一个特定范围。

代码篇:VGG训练与测试

此处提供两个开源资源库供使用。建议在训练时参考GitHub上的TensorFlow-VGG项目以获取详细实现代码。对于快速验证,请访问VGG in TensorFlow的官方网站获取最新的测试模型。

我不打算详细讲解代码。实际上与之前的内容高度一致,在了解了这些基本概念之后按照原理编写代码通常会较为顺利。为了验证这个方法的有效性我迅速运行了VGG-in TensorFlow这一资源包并对其中的源码进行了实际测试显示运行结果令人满意然而在下载模型时仍然会遇到一定的困难

贴心的Amusi已为你精心准备好了VGG-in TensorFlow的相关资源包、模型以及图像数据。如需进一步了解或获取资源,请关注我们的官方平台CVer公众订阅号。

天道酬勤,还有很多知识要学,想想都刺激~Fighting!

参考资料

The Highly Deep Convolutional Neural Networks in Extensive Image Issue Recognition

深度网络VGG理解

基于深度学习的核心卷积神经网络架构研究——以VGGNet为例

VGG16 结构可视化

tensorflow-vgg

VGG-in TensorFlow

机器学习进阶笔记之五 | 透彻解析深度学习中的残差网络

https://zhuanlan.zhihu.com/p/23518167

ResNet

1.ResNet意义

随着网络架构逐步深化后,在实际应用中我们观察到呈现出训练集准确率下降的现象;经分析可知该情况并非由模型过度拟合所致(因为过拟合通常表现为较高的训练集准确率),而是由于模型复杂度与数据特性之间存在某种特定关系所导致的结果。对此问题作者提出了一个新的解决方案——即深度残差网络,在架构设计上采用了创新性结构(如图1所示)。这种新方法的一个显著特点是能够有效延伸网络深度,并且通过引入跳跃连接的方式实现了信息在不同层之间的自由流动

图1 Shortcut Connection

这里问大家一个问题,残差指的是什么?

其中ResNet提出了两种mapping:

一种称为identity mapping,在图1中表现为"弯曲的曲线"。另一种称为residual mapping,则是指除了"弯曲的曲线"之外的部分。经过上述两种映射操作后得到的结果为 y=F(x)+x

从名称就能看出它就是自变量本身,在公式中用x表示;而残差映射则代表两者的差值(y−x),因此残差映射对应的部分即为F(x)。

为什么ResNet可以解决“随着网络加深,准确率不下降”的问题?

理论上来说,在"随着网络深度增加导致准确率下降"的问题上

2.ResNet结构

它采用了称为"shortcut connection"的一种连接手段。借代解释而言之,则 shortcut 即为"走捷径"的意思。看下图我们就能大致理解:

image

ResNet的F(x)究竟长什么样子?

残差的思想都是去掉相同的主体部分,从而突出微小的变化

F代表在求和之前的网络部分进行参数化处理,在经过计算后得到一个结果值;而H则是指从输入端到经过求和处理后的整个系统中的一部分。

例如将数值x=5通过该过程转换为x=5.1的状态,在这种情况下未引入任何误差(即Δ=0),但在实际应用中我们通常会设置一个微小的误差范围(Δ≠0)。

在这一机制中,F'与F均代表了不同阶段下的参数化关系,其核心区别在于是否引入了误差项以提高系统的稳定性。

具体而言,当系统处于正常运行状态时,未引入误差项的情况下(F'结构),输出的变化幅度相对较小;而当采用残差连接方式(H结构)时,由于存在额外的信息传递路径,系统的整体稳定性得到了显著提升。

这种差异在实际应用中表现得尤为明显:当系统输出值从y=5.1稳定增长至y=6.0时,F'结构仅增加了约3%的变化幅度,而在采用H结构的情况下,y的增长速率提升了大约80%。

因此,H结构相较于传统的非残差设计具有更高的抗干扰能力以及更好的适应性。

关于H(x) F(x) x 三者之间的关系:

以x为输入的模型将输出F(x),其拟合目标为H(x),
传统神经网络旨在使输出与目标一致。
残差网络通过在传统结构上增加捷径连接来改善性能。
当构建深层神经网络时,
假设存在一个完美的人工智能模型N,
任何多余设计的目标皆可退化为其恒等映射,
即对于这些无用层,
其训练目标变为使F(x)=x,
而对比于传统结构而言,
这是一项更为复杂的任务。
相比之下,
若采用残差设计,
则额外层的目标变为使F(x)=0,
这种特性使得其实现难度骤减。

参考资料

ResNet解析

ResNet论文笔记

残差网络ResNet笔记

This paper presents a detailed examination of the foundational architecture, ResNet, along with an extensive exploration of its various modifications and enhancements.

译文

Grasping the design principles and constructing the architectures for state-of-the-art image classification in the field of computer vision: From Microsoft to Facebook [Part 1]

给妹纸的深度学习教学(4)——同Residual玩耍

Residual Networks 理解

Identity Mapping in ResNet

resnet(残差网络)的F(x)究竟长什么样子?

ResNet到底在解决一个什么问题呢?

ResNet为什么不用Dropout?

YOLOv1

(1) 给一个输入图像,首先将图像划分成7 * 7的网格。

  • TODO

参考资料

为什么 ResNet 不在一开始就使用residual block,而是使用一个7×7的卷积?

先上一下paper里的图例:
YOLO检测网络由24个卷积层(用于提取图像特征信息)和2个全联接层(用于预测图像位置和类别置信度)组成,并通过大量应用1×1卷积操作实现了从上一层到下一层的特征空间降维。

YOLO负责将输入图像划分为S×S个单元格,在每个单元格中处理'位于'该单元内的目标物。当某一目标物其质心坐标位置落在某一特定单元内时,则该单元将被用于对目标物进行检测与预测。例如,在下图中可以看出,在图像中位于第五行第二列的小球(红色圆点)质心坐标落在对应的单元内,则该单元将被用于预测图像中的小球。

这一结果为每个bbox对应的目标类别概率分布提供了信心值指标。该信心值不仅反映出目标属于某一类别的可能性大小(其一),同时也揭示了预测出来的bbox与真实存在的bbox之间的距离程度(其二)。

总结:

YOLO v1 也和其他一些当时的优秀目标检测系统进行过比较分析,在今天的评估中并不算特别关键的部分;然而真正重要的在于我们如何掌握 YOLO 迅速的原因。

YOLO 就是一个撒渔网的捕鱼过程,一次性搞定所有的目标定位。

YOLO 快的原因在于比较粗的粒度将输入图片划分网格,然后做预测。

YOLO 的核心机制主要体现在其损失函数设计上,并且在优化损失函数方面所做的改进工作也是其显著特点之一。从方法论的角度来看,在解决目标检测问题的过程中所体现的核心思想具有重要的参考价值

缺馅:

输入尺寸固定:因为输出层是全连接层,在检测过程中,YOLO训练模型只能接受与训练图像大小一致的输入分辨率。对于其他不同尺寸的分辨率,则需进行相应的缩放处理。

在物体占画面比例较小的情况下(即图像中包含畜群或鸟群等场景),目标检测效果较差。具体而言,在每个单元格中可以预测多个bounding box(即多个边界框),但在实际应用中通常仅选择具有最高IOU(交并比)的bounding box作为物体检测结果。值得注意的是,在被检测物体占据画面的比例较小时(例如图像中有较多小动物的情况),每个单元格可能会包含多个物体;然而由于算法限制或设计原则,在这种情况下通常只能识别出其中单一的目标。

参考资料

YOLO V1全网最详细的解读

该算法YOLO被进行了详尽全面的解析。

yolo回归型的物体检测

目标检测网络之 YOLOv3

NMS图解(IOU略过):

NMS作为一种解决目标检测问题的关键算法,在实际应用中发挥着核心作用。该算法的核心机制在于持续选择当前最高置信度的目标候选框与所有候选框进行iou运算,并淘汰掉与之iou值较高的目标候选框。如图3和图4所示的是该算法的具体运算流程。

1、根据候选框的类别分类概率做排序,假如有4个 BBox ,其置信度A>B>C>D。

2、先标记最大概率矩形框A是算法要保留的BBox;

以最大概率确定的矩形框A为基础,在逐一比较矩形框B和C与D的情况下计算它们之间的交并比(即两者的交集面积除以其并集面积),若该交并比是否超过预先设定的标准值0.5,则排除掉矩形框D

从剩余的矩形框BC中挑选概率最高的B,并将其标记为保留;接着计算C与B之间的重叠程度,并去除重叠程度超过预设阈值的部分

5、一直重复进行,标记完所有要保留下来的矩形框。

图3 猫和狗两类目标检测

图4 NMS算法过程


YOLOv2

=======

img

原因: 7×7卷积主要用于对输入图片进行下采样(早期下采样)。值得注意的是,在深度学习模型中,像这样较大的卷积核通常仅在input layer出现。

目的是: 尽可能保留原始图像的信息, 而不需要增加channels数.

从成本效益角度来看, 多通道的非线性激活层具有较高的开销. 相较于直接采用多通道设计, 通过在输入层中采用大核的方式能够显著提升效率.

Tips

Tips

High Resolution Classifier

需要注意的是,在ResNet接入Residual Block之前,pixel resolution为56x56的层其channels的数量是64个;然而,在同样尺寸的层中,在VGG-19架构中已经拥有了多达256个channels。

特别强调指出:仅在input layer中(即与输入图像直接相连的这一层),才会采用大尺寸卷积核。原因如下所述:

深度学习领域中普遍存在的直觉是认为更大的卷积能够带来更好的效果,然而这种做法往往具有较高的计算成本。输入层中的特征数量(224x224)远远小于隐藏层的数量,因此在输入层进行极大程度的卷积操作只会导致明显增加的实际参数数量。如果你在某个地方进行大卷积操作,则第一层通常是最优的选择

从我的角度来看,在神经网络架构中占据核心地位的第一层是一个基础模块。因为它的主要功能是通过线性变换将其映射至一个更高维的空间中。ResNet直到第二层之前都没有启动其特征层级跳跃机制。由此可见,在引入复杂层级结构之前尽可能保留图像中的原始主要特征。

闲话而言,在当时同一时代的GoogLeNet也在input layer采用了7x7的全卷积层结构, 这或许让ResNet作者受到GoogLeNet的影响也不尽然. 然而具体为何采用这种设计, 最可能的原因在于: 深度学习如同炼丹术般, 需要依仗经验与直觉去调参, 因此作者也只能遵循这一设计方针.

之前的YOLO依赖全连接层的数据实现边界框的预测,在此过程中损失了较多的空间信息而导致定位精度不足。回顾而言,在提取卷积特征图时采用滑窗方法确定锚框中心位置,并基于此预测不同尺寸与之对应的目标边界框。由此可见,在Yolo v2版本中引入锚框概念的做法确实超前于当时的技术发展水平。

为了通过anchor boxes来进行bounding box的预测,在网络架构中作者主动去除了全连接层。具体而言,在移除一个池化层之后的操作是为了确保输出后的卷积特征图具有更高的分辨率。随后将输入图片分辨率设定为416×416像素这一做法旨在使生成的卷积特征图宽度和高度均为奇数数值,并且能够形成一个中心单元格(center cell)。作者观察到较大的物体通常占据图像中心区域时只需使用该中心单元格即可实现位置预测;而当物体位于边缘区域时则需使用相邻的四个单元格进行预测以提高准确性。YOLOv2采用了卷积层降采样技术(采样因子为32),最终将经过处理后的输入(即416×416像素)转换为大小为13×13的空间分辨率的卷积特征图(计算过程如416÷32=13所示)。

举个有趣的例子吧, ResNet模型的出现是在实验的基础上发展起来的理论体系, 实验结果得到了验证的有效性之后, 后续学者开始深入探究其背后的有效性的原因, 比如《The Shattered Gradients Problem: If ResNets are the Answer, then what is the Question?》这篇文章探讨的就是这一问题. 这听起来就像是深度学习训练中的常见现象.

参考资料

什么是Bottlenet layer?

  • TODO

ResNet如何解决梯度消失?

  • TODO

ResNet网络越来越深,准确率会不会提升?

  • TODO

ResNet v2

image

参考资料

ResNet v1 与 ResNet v2的区别

ResNet V2与 ResNet V1 的主要差异在于,研究者发现通过分析残差学习单元的传播关系,可以直接将前馈与反馈信息传递到下一个阶段,因此,在 skip connection 中采用 identity mappings (y=x)取代了传统的非线性激活函数。同时,ResNet V2 在每层结构中均采用了批归一化技术进行处理,这种改进使得新的残差学习单元相较于传统模型而言,在训练效率和泛化能力上均有显著提升

ResNet v2 的 ReLU 激活函数有什么不同?

  • TODO

ResNeXt

当ResNet提出采用更深层的结构时(...),而WideResNet则认为扩大宽度同样有助于提升网络性能(...)。传统的思路通常要么增加深度要么增加宽度(...),但为了打破这一传统框架(...),The ResNeXt architecture introduces a new dimension known as cardinality.

Image
  • ResNeXt算法详解
  • ResNet的其他变体包括Wide Residual Networks(WRNs)、RSN(Resident Squeeze Network)以及RexNeXt。

Inception系列(V1-V4)

InceptionV1

  • TODO

InceptionV2

023 R-CNN系列

InceptionV3

  • TODO

InceptionV4

  • TODO

参考资料

DenseNet

在以往的网络都是从

  • 要么深(例如ResNet类算法,在面对网络深度时能够有效克服梯度消失的问题) * 要么宽(例如基于GoogleNet设计的Inception模块构建而成的网络),其主要特点在于能够有效地并行处理多个尺度特征。

而作者则是以feature为核心,并通过充分运用这一核心要素来提升效果并减少参数数量。

DenseNet网络有以下优点:

  • 基于密集连接的设计框架显著地提升了梯度反向传播的效果,
    从而使得网络在训练过程中更加高效可靠。
  • 在参数规模和计算效率方面均达到最优平衡的特性确实令人意外。
    具体而言,
    DenseNet通过将相邻层的特征进行合并并直接传递至后续层,
    实现了特征的有效复用,
    并且通过限制每层新增的特征数量(即设置较小的增长率),
    确保了模型的整体参数规模得以控制。
  • 得益于特征复用机制的应用,
    在最终的分类器中主要依赖于较低层级提取出的关键信息。

为了解决随着网络深度增长导致的梯度消失问题,在ResNet之后

Image
Image

为什么 DenseNet 比 ResNet 好?

  • TODO

为什么 DenseNet 比 ResNet 更耗显存?

  • TODO

SE-Net

  • TODO

Squeeze-Excitation结构是怎么实现的?

TODO

FCN

一句话概括就是:FCN采用了将传统网络后续的全连接层替换为卷积层的方法,并使输出结果从单一类别判断转变为位置热图的表示形式;同时提出了一种通过上采样机制来恢复图像尺寸的技术方案以解决由于卷积操作及池化层对输入图像尺度造成的压缩问题。

作者的FCN主要使用了三种技术:

卷积化(Convolutional)

上采样(Upsample)

跳跃结构(Skip Layer)

卷积化

卷积化即为普通分类网络的转换方式。例如,在VGG16、ResNet50/101等网络中通常会丢弃全连接层并替换成相应的卷积层。

上采样

在本上下文中所指的上采样操作等同于反卷积运算(亦称作Deconvolution)。这有助于明确上下文中的术语定义。值得注意的是,在不同的深度学习框架中这一术语的具体称呼存在差异。具体来说,在Caffe和Keras中通常称为Deconvolution,在TensorFlow中则使用 conv_transpose 来表示这一操作。根据CS231n课程中的建议,在学术界普遍认为 conv_transpose 更为合适。

众所周知,常规池化(其原因请查阅后续内容)会导致图像尺寸的缩减,例如在VGG16架构中,经过五次池化处理后的图像尺寸将缩减至原来的三分之一左右。为了使分割结果与原始图像保持一致的尺寸,我们需要运用上采样或者反卷积技术进行恢复

反卷积网络在正向与逆向传播过程中都涉及乘法与加法操作。值得注意的是,后者属于多对一的操作类型而前者则是单对多的操作模式。对于反卷积网络在正向与逆向传播过程中的具体实现细节,则可以通过反转该网络的标准前馈与反馈传播方法来完成其正向与逆向传播过程。从优化算法到反向传播过程均无需担心任何问题。

跳跃结构(Skip Layers)

虽然名称有些直白但我将其译为忽略连接结构这种术语在学术界较为常见。其主要功能在于提升输出质量。由于直接对全卷积后的特征进行上采样会导致输出精度不足因此作者通过融合不同池化层的特征实现了更高品质的输出。

通过upsampling技术实现图像尺寸与输入一致。
文章采用的网络经过5次卷积加池化操作后,在各层分别减少了两倍至三十二倍的尺寸。
通过三十二倍的upsampling重建,在最后一层恢复到了原始图像的大小

作者注意到,在深度学习模型中仅在第五层应用了32倍放大率的反卷积操作(deconvolution),但观察到输出结果不够精确。因此他决定不仅对第五层进行操作,并依次对其进行第四层和第三层输出的数据处理(如图5所示)。

参考资料

【总结】图像语义分割之FCN和CRF

图像语义分割(1)- FCN

全卷积网络 FCN 详解

U-Net

本文介绍了一种基于编码器-解码器架构的设计方案。该方案通过逐步降低池化层的空间维度来实现特征的浓缩与降维。接着,解码器则通过逐步修复物体细节及空间维度来实现目标的重建与恢复。在编码器与解码器之间通常会设置跳跃连接以促进信息的有效传递与重建效果的提升。U-Net架构在此类方法中应用最为广泛。

fcnn(fully convolutional network)的概念是将普通逐层收缩的网络进行优化,在其后部加入上采样(upsampling)操作来替代传统的池化操作。这种设计使得中间各层能够有效提升输出的空间分辨率。为了充分利用局部特征信息,在网络收缩过程中生成的高分辨率特征与之关联地与修改后的网络输出结果相结合。在此基础上再引入一个卷积层对这些特征进行融合处理后就能获得更加精确的结果

与FCN(fully convolutional network)不同之处在于,在我们设计的网络中,并非所有的模块都遵循严格的 contracting-decontracting模式。具体而言,在上采样过程中仍然保留了丰富的特征通道(feature channels),使得网络能够有效地将环境信息向更高分辨率的层级(higher resolution layers)传递下去。其结果表明,在解码器部分(decoder path),扩张路径基本上是对称地与收缩路径(encoder path)相互对应。值得注意的是,在本网络中并不存在任何全连接层(fully connected layers),并且只利用每个卷积操作的有效部分来进行特征提取:例如,在分割结果(segmentation map)中所包含的每一个像素点都必须满足以下两个条件——即该像素点及其周边区域在输入图像中都有明确定义;同时,在预测图像边界区域的相关像素时,则采用了镜像反射的方法补充缺失的环境像素区域(missing environmental pixels)。这种补全策略在处理大图像分割问题时非常关键:如果不采取此类措施,则会导致GPU显存不足以支持高分辨率图像的处理需求

由于训练数据量相对有限,在本研究中我们采用了弹性形变的数据增强策略来提升模型泛化能力

参考资料

DeepLab 系列

  • TODO

参考资料

Semantic Image Partitioning -- DeepLab(1, 2, 3) 系列综述 【

边框回顾(Bounding-Box Regression)

如下图所示:
绿色方框代表真实值Ground Truth,
红方框是由Selective Search算法提取出的候选区域或框。
即使被分类器识别为飞机,
但定位不够准确(IoU<0.5),
因此这张图实际上没能正确检测到飞机。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果我们将被选中的区域进行精细调整(fine-tuning),使得调整后的窗口与Ground Truth之间的差距更加贴近,则可以看出定位效果将得到显著提升。而Bounding-box regression则是专门用于完成这一精细调整过程的技术手段。

边框回归是什么?

通常用四元组(x,y,w,h)来表示窗口,在图2中红色框P代表原始的提议框(Proposal),绿色框G代表目标的真实框(Ground Truth)。我们的目标是通过一种映射关系使输入的原始框P经过变换后得到一个更接近真实框G的回归框G^。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

为了解释边框回归的目的及其工作原理... 基于输入参数(Px, Py, Pw, Ph)... 建立一个映射函数f... 确保计算得到的结果与预期结果一致

边框回归怎么做的?

如何实现从窗口P变为窗口G^的具体步骤是什么?最直接的办法就是:通过平移和缩放操作来完成。

如何实现从窗口P变为窗口G^的具体步骤是什么?最直接的办法就是:通过平移和缩放操作来完成。

先做平移(Δx,Δy),Δx=Pwdx§,Δy=Phdy§这是R-CNN论文的:
G^x=Pwdx§+Px,(1)
G^y=Phdy§+Py,(2)

接着进行尺度缩放操作(Sw, Sh),其中Sw = exp(dw§),Sh = exp(dh§)。在论文中对应的公式为:其中G^w = Pw exp(dw§),(3) G^h = Ph exp(dh§),(4)

观察(1)-(4)我们发现, 边框回归学习就是dx§,dy§,dw§,dh§这四个变换。

下一步就是设计算法那得到这四个映射。

即给定输入特征向量X,在线性回归中我们训练一组参数W,使得预测值与真实值Y(Ground Truth)非常接近。 在Bounding-box中,请问我们的输入通常是指待检测的目标图像区域的特征向量X,请问我们的输出具体指的是什么呢?

这是什么?RegionProposal被转换成P=(Px, Py, Pw, Ph)的形式。那么输入是否仅仅是这四个数值呢?实际上,在R-CNN中,Pool5层的特征向量对应于该窗口区域。(注:在训练阶段中除了上述内容外还包括Ground Truth信息t∗=(tx, ty, tw, th),即下文将要介绍的内容)

应用平移变换与尺度缩放操作 dx^{\S}dy^{\S}dw^{\S}dh^{\S}(也可理解为 \Delta x\Delta yS_wS_h)。那么我们的预期输出结果应当是 Ground Truth 对吗?确实是这样的,在应用了这四个变换之后我们就能直接获得对应的 Ground Truth 结果。

还存在一个问题;基于(1)至(4)的结果可以看出;P通过dx§、dy§、dw§和dh§计算所得并非真实G值;相反地;这四个参数应当是基于Ground Truth以及Proposal计算出的真实平移量(tx,ty)与尺度缩放(tw,th)

这也就是 R-CNN 中的(6)~(9):
tx=(Gx−Px)/Pw,(6)

ty=(Gy−Py)/Ph,(7)

tw=log(Gw/Pw),(8)

th=log(Gh/Ph),(9)

那么该目标函数由 d^s 表示,并被定义为 d^s = \mathbf{w}^\top \Phi^{(5)}_s。其中 \Phi^{(5)}_s 是输入 Proposal 的特征向量。\mathbf{w}^\ast 是需要通过训练确定的学习参数,并且 * 表示 x, y, w, h 四个变量中的某一个(即每个变量对应一个独立的目标函数)。即每个变换都对应一个独立的目标函数计算过程。最终计算得到的结果 d^s 即是模型输出的结果。

我们希望预测结果尽可能接近真实目标t\ast=(tx,ty,tw,th),并采用以下损失函数来衡量差异:

Loss=\sum_{i=1}^{N}(ti\ast-w^\top\phi_5(P_i))^2

函数优化目标为:

W∗=argminw∗∑iN(ti∗−wT∗ϕ5(Pi))2+λ||w∗||2

利用梯度下降法或者最小二乘法就可以得到 w∗。

参考资料

bounding box regression

边框回归(Bounding Box Regression)详解

什么是Bounding Box回归?它是一种用于定位物体边界的技术,在计算机视觉和图像处理中具有重要意义。为什么要进行Bounding Box回归?因为准确检测物体位置对计算机视觉系统至关重要。如何进行Bounding Box回归?通常我们会使用深度学习模型来训练一个预测边界框位置的函数。

反卷积(deconv)/转置卷积(trans)

参考资料

空洞卷积(dilated/Atrous conv)

  • TODO

参考资料

Pooling层原理

  • TODO

depthwise卷积加速比推导

  • TODO

为什么降采用使用max pooling,而分类使用average pooling

  • TODO

max pooling如何反向传播

  • TODO

反卷积

TODO

组卷积(group convolution)

  • TODO

在说明分组卷积之前我们用一张图来体会一下一般的卷积操作。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

通过观察图片可知,在常规的操作流程中(即从输入到输出),传统的二维池化层会对整个输入图像进行一次完整的特征提取。在这一过程中涉及多个关键参数设置:输入的空间尺寸是H_1 \times W_1 \times C_1;池化核大小为h_1 \times w_1;通道数为C_1;池化层数量则决定了最终输出的空间尺寸H_2 \times W_2 \times C_2。在这里我们假设所有池化操作后的分辨率都是相同的。这个过程通常被视为一次性完成,并且这使得计算资源的要求更高了。

然而分组卷积的参数数量显著减少。
通过图片直观地观察分组卷积的过程。
类似的问题可以通过下图进一步说明。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

可以看到,在图中输入数据被划分为两个主要部分(其中分组数量设为g)。值得注意的是,在这种划分中仅涉及深度方向上的分割操作——即将若干通道组合为一组,并且这一具体组合的数量由(C₁/g)决定。由于输出数据的变化情况会导致相应地进行调整——即每组中的卷积参数数量也会变为(C₁/g)。然而,在此过程中卷积核的空间尺寸并不会发生任何变化。这样一来,在每一组内部都会有(C₂/g)个独立且并行执行的卷积操作。具体来说,在每一组内都会对对应的输入特征图应用上述定义好的卷积操作,并通过concatenate模块将各组处理后的结果拼接起来作为最终输出特征图的一部分。需要注意的是,在整个过程中输出特征图的空间维度始终保持H₂×W₂不变的同时其通道数目依然维持在C₂个。换句话说,在给定分组数目g的情况下我们需要并行执行g次相同的卷积操作每一次操作都会对特定的一组输入特征图应用相应的滤波器然后将处理后的结果拼接在一起从而得到最终的结果特征图其通道数目仍然与初始设置一致均为C₂个

举个例子:

Group conv自身显著降低了计算量。例如,在输入通道数和输出通道数均为256的情况下,并且kernel尺寸设定为3×3时,默认情况下不使用分组卷积所需的参数数量将是256×3×3×256=744, 然而当采用分组卷积(group=8)策略时,则每个小组内的input channel及output channel数量均为32个,在这种情况下所需的参数仅为8 × 32 × 3 × 3 × 32 = 744 ÷ 8 = 91. 在应用分组卷积时,默认情况下其每一组输出特征图通常通过连接操作整合起来形成最终的特征图集合。
Alex指出分组卷积的方法能够在一定程度上增强filter之间的对角相关性,并且能够有效减少训练过程中的参数规模从而避免模型发生过拟合现象这与正则化技术的作用机制具有相似效果。

参考资料

An Introduction to Convolutional Filter Groups (Grouped Convolution)

深入探讨深度学习中的四种关键卷积操作:深度可分离卷积技术、基于分组机制的网络模块、基于扩张模块的设计框架以及转置层(反向传播用)的应用机制。这些核心技术在提升模型性能方面发挥着重要作用,并且在实际应用中展现出显著的优势。

交错组卷积(Interleaved group convolutions,IGC)

参考资料

空洞/扩张卷积(Dilated/Atrous Convolution)

Dilated convolution/Atrous convolution被称为空洞卷积或扩张卷积。

语义分割中的池化层与上采样层分别承担着不同的功能。池化操作通过降低图像的空间分辨率来扩大特征点之间的相互作用范围;而上采样操作则通过增加图像的空间分辨率来恢复尺寸,在此过程中可能会导致细节信息在恢复过程中被丢失。

是否有可能开发一种新的操作方法,在无需使用池化的情况下实现较大范围的感受域并捕捉到更多细节?

目的:替代pooling和up-sampling运算,既增大感受野又不减小图像大小。

通过在标准的convolution map中引入空洞来扩大reception field,在此过程中多出一个关键参数称为dilation rate用于表示kernel之间的间距数量(例如,在传统的情况下该参数值设为1)

空洞卷积的概念源自图像分割领域,在网络中输入的图像是经由卷积神经网络(CNN)提取特征,在经过池化层处理时既能够降低图像尺度又能增大感受野。由于在像素级别进行预测以获得分割结果,因此需要借助上采样操作将缩小后的图像恢复至原始尺寸。其中上采样过程通常采用转置卷接(deconvolution)来实现。这一过程包含两个关键步骤:池化操作不仅能够增大感受野还能保持图像尺寸不变;而上采样则负责扩大目标区域的空间分辨率。值得注意的是,在使用上采样恢复图像尺寸的过程中可能会导致细节信息的丢失。那么有没有办法既增大了感受野又不减小图像大小呢?Dilated conv横空出世。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

注意事项:

1.为什么不直接使用5x5或者7x7的卷积核?这不也增加了感受野么?

回答问题时,扩大卷积核大小能够增加感受野范围;然而其扩展程度仅呈线性。如参考答案所示的公式(kernel-1)×layer,则无法实现其显著的指数扩展效果。

2.2-dilated要在1-dilated的基础上才能达到7的感受野(如上图a、b所示)

关于空洞卷积的另一种概括:

为了更好地解决采样过程中input与output尺寸不一致的问题 我们需要进行上采样操作但上采样过程可能会导致信息丢失 如果放弃池化操作则无需进行下采样与上采样步骤 但这样又会导致卷积核的感受野变窄从而影响预测精度 如果选择较大的kernel尺寸一方面会导致模型参数数量激增 另一方面由于缺少较小尺寸卷积核叠加带来的正则化效果将会缺失 因此较大的kernel尺寸并不适用

由此Dilated Convolution是在不改变kernel size的条件下,增大感受野。

参考资料

《多尺度背景融合:基于扩张卷积的方法》

《多尺度背景融合:基于扩张卷积的方法》

This paper re-examines the role of atrous convolution in semantic image segmentation tasks, offering new insights into its application and effectiveness.

如何理解空洞卷积(dilated convolution)?

空洞式卷积/Dilated conv 空洞式卷积

空洞式/D atrous conv 空洞式

空洞型/D atrous conv 空洞型

空洞型/Dilated convolution

基于多尺度语境整合的空洞卷积研究:从感受野到网络架构的探讨

对深度可分离架构中的卷积操作、基于通道划分的深度学习模型中的特征提取技术、通过增加输出通道数量以捕捉更多细节的机制以及用于上采样的逆向传播过程中的关键组件的理解

该函数名为 tf.nn.atrous_conv2d ,其完整引用地址为 https://tensorflow.google.cn/api_docs/python/tf/nn/atrous_conv2d

转置卷积(Transposed Convolutions/deconvlution)

转置卷积(transpose convolutions)也称为反卷积(deconvolve),有时也被称作分段步长卷积(fractional-strided convolutions)。最初提出于Zeiler在2010年发表的论文《Deconvolutional networks》中。

转置卷积和反卷积的区别

那什么是反卷积?从字面意思上说就是对卷积操作的一种逆向过程。值得注意的是尽管存在所谓的"反
卷 积 " 概念 但 它 在 深 度 学 习 领域 中 并 不 常 见 。而 转 置 卷 积 虽 然 也 被 称 作 反 卷 积 但它
实际上并不是严格意义上的" 反 卷 积 " 。根据 反 卷 积 的 概念 定义 反 卷 积 运算 可以将经过
卷 积 处 理 后 的 输出 信 号 完 全 还 原 成 输 入 信 号 。然而事 实 上 转 置 卷 积 只 能 复 制 输出
的 形 状 维 数度 而无法还原原始数值信息 。因此你可以理解为至少在数值层面而言 转置
卷 积 是 不 能 实 现 正 确 的 " 反 卷 积 " 运算 的 。由此可见尽管被称为" 反 卷 积 "但这种称谓并不准确因为它违背了" 反
卷 积 "的本质内涵 。

简单来说,转置矩阵就是一种上采样过程。

正常卷积过程如下,利用3x3的卷积核对4x4的输入进行卷积,输出结果为2x2

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

转置卷积的操作流程如下:通过使用一个3×3的卷积核对经过补零处理后的2×2输入数据进行卷积操作,输出结果呈现4×4的空间维度。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

涉及的卷积运算及其转置对应于尺寸。其输入大小与相应转置层输出保持一致,在实际应用中可分别视为下采样及上采样操作。

参考资料

Group Normalization

  • [ ]

Xception

  • TODO

SENet

SENet

论文:《Squeeze-and-Excitation Networks》

论文链接:https://arxiv.org/abs/1709.01507

代码地址:https://github.com/hujie-frank/SENet

研究出发点是基于特征通道间的相互作用关系进行分析与建模

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

参考资料

SKNet

  • TODO

参考资料

GCNet

  • TODO

参考资料

Octave Convolution

  • TODO

参考资料

MobileNet 系列(V1-V3)

  • TODO

MobileNetV1

参考资料

MobileNetV2

  • TODO

MobileNetV3

TODO

如何评价google Searching for MobileNetV3?

MobileNet系列为什么快?各有多少层?多少参数?

  • TODO

MobileNetV1、MobileNetV2和MobileNetV3有什么区别

MobileNetv1在基于深度可分离卷积(参考Xception)的方法上提供了两种先进的模型设计途径:宽度因子(width multiplier)和分辨率因子(resolution multiplier)。其本质是以稀疏化的形式表达并减少更多冗余信息以实现高效的模型结构设计。

下面介绍两幅Xception中 depthwise separable convolution的图示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

该网络架构通过16组3×3深度可分离卷积核(每组均为单通道)对输入信号进行特征提取运算,在完成特征提取后采用逐层深度可分离卷积的方式生成各通道特征图。随后采用32组1×1深度可分离卷积核(每组均为单通道),通过对各通道特征图进行信息融合运算生成最终输出结果。经计算可知该网络架构总共消耗了656个参数量。

在标准卷积架构中存在显著差异,在实际应用中采用非单通道卷积核时每个输出通道都对应一个独立的滤波器这种设计方式使得每层输出仅包含单通道特征而在标准设计中每个滤波器都是多通道的从而能够捕获不同方向的空间信息。这种设计选择不仅简化了模型结构还显著提升了计算效率。此外通过引入多个独立的一维卷积层来实现跨通道特征的融合能够有效提升模型对复杂模式的学习能力同时降低了对计算资源的需求。

常规卷通的通道单元也被称作深度参数(depth),也被称作深度可分离机制。如原先采用多通道组合的方式进行信息处理,则现在实现的是单通道分离机制。

参考资料

MobileNetv2为什么会加shotcut?

  • TODO

MobileNet V2中的Residual结构最先是哪个网络提出来的?

  • TODO

ShuffleNet 系列(V1-V2++)

  • TODO

ShuffleNetV1

TODO

轻量级网络–ShuffleNet论文解读

轻量级网络ShuffleNet v1

CNN模型之ShuffleNet

ShuffleNetV2

  • TODO

参考资料

  • ShuffleNetV2:成为轻量级CNN架构中的引领者
  • 轻量级神经网络巡礼系列(第一回):ShuffleNetV2的崛起
  • 探秘高效网络:ShufflenetV2的四条实用准则
  • ShuffleNet v1与ShuffleNet v2:探索高效设计路线

IGC 系列(V1-V3)

  • TODO

参考资料

深度可分离网络(Depth separable convolution)

  • TODO

学习率如何调整

  • TODO

神经网络的深度和宽度作用

  • TODO

网络压缩与量化

  • TODO

参考资料

Batch Size

  • TODO

参考资料

怎么选取训练神经网络时的Batch size?

谈谈深度学习中的 Batch_Size

BN和Dropout在训练和测试时的差别

  • TODO

参考资料

深度学习调参有哪些技巧?

参考资料

为什么深度学习中的模型通常采用奇数尺寸(如3×3和5×5)的卷积核而非偶数尺寸(如2×2和4×4)的卷积核?

参考资料

深度学习训练中是否有必要使用L1获得稀疏解?

  • TODO

参考资料

EfficientNet

  • TODO

参考资料

如何理解归一化(Normalization)对于神经网络(深度学习)的帮助?

BN最初被认为是通过降低内部协变量偏移来实现其效果的设想源自Understanding the difficulty of training deep feedforward neural networks这篇论文的研究成果。然而这一设想缺乏系统性验证,在去年NeurlPS期刊上发表的一篇论文中作者进行了验证性研究:在应用了BN层后引入了均值非零且方差非一的人工协变量偏移(即人为引入了协变量偏移),结果显示即使在这样的情况下BN层依然表现出较好的效果。那么为何将其置于层之间环节之后而非之前呢?这是因为为了质疑该理论:即质疑是否仅仅通过正向传递过程减少协变量偏移就能提升网络训练效率这一假设是否成立。由此展开的故事确实非常耐人寻味:我们大概都理解了BN在前向噪声抑制方面的优势所在;那么是否也应探究其对后一层的影响呢?这些探索主要从优化角度出发形成了以下几种观点

BN通过重新定义loss function使得loss及其梯度均同时满足L-Lipschitz性质以及其梯度的Lipschitz性质。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

-smooth,令L和

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

更小,后者其实等同于f Hessian的eigenvalue小于

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

,可以作为光滑程度的度量,其实吧我觉得,一般convex optimization里拿这个度量算convergence rate是神器,对于non-convex optimization,不懂鸭,paper里好像也没写的样子),这么做的好处是当步子迈得大的时候,我们可以更自信地告诉自己计算出来的梯度可以更好地近似实际的梯度,因此也不容易让优化掉进小坑里。有意思的地方来了,是不是我在某些地方插入一个1/1000 layer,把梯度的L-Lipschitz变成1/1000L-Lipschitz就能让函数优化的更好了呢?其实不是的,因为单纯除以函数会改变整个优化问题,而BN做了不仅仅rescale这件事情,还让原来近似最优的点在做完变化之后,仍然保留在原来不远的位置。这也就是这篇文章的核心论点,BN做的是问题reparametrization而不是简单的scaling。 [1]
2. BN把优化这件事情分解成了优化参数的方向和长度两个任务,这么做呢可以解耦层与层之间的dependency因此会让curvature结构更易于优化。这篇证了convergence rate,但由于没有认真读,所以感觉没太多资格评价。[2]

归一化手段之间是否存在异同?很可能是这样,在文献[1]第3.3节中作者也尝试过Lp正则化方法,并获得了与Batch Normalization相似的效果。对于Layer normalization与Weight normalization的选择,则都值得在此基础上展开进一步探索。无论是在文献[1]还是文献[2]的研究成果中, 我们都有理由相信今年将会有一些突破性的进展, 来吧, 让我们拭目以待吧。

  1. 探讨Batch Normalization如何促进优化过程
  2. 在非凸优化中探讨Batch Normalization的指数收敛速率及其基于长度与方向解耦的优势

参考资料

从以下几个方面来理解归一化在神经网络中的作用:包括数据预处理、加速训练过程以及提升模型性能等方面。具体而言,归一化的具体操作包括标准化输入数据、使得不同特征具有相似的分布以及减少梯度消失或爆炸的问题。

多标签分类怎么解决?

  • TODO

TODO

全部评论 (0)

还没有任何评论哟~