CNN之图像识别
Inception
Inception网络成为CNN发展史上的重要里程碑。在此之前,在CNN领域中流行的技术主要依赖于不断堆叠更多的卷积层来增加深度,在这种架构下尽管深度有所提升但性能并未显著改善。然而这一过程中仍存在一些局限性
-
图像中的显著部分之间存在明显的差异。
-
在实际应用中选择适当的卷积核尺寸会面临诸多挑战。对于具有全局性信息分布的图像而言,在实际应用中选择适当的卷积核尺寸会面临诸多挑战;而对于仅具有局部特征的信息则更适合采用较小尺寸的卷积核。
-
当神经网络的深度显著增加时,容易导致容易发生过拟合现象。传递梯度更新过程在深度神经网络中是具有挑战性的。
-
连续叠加多个大尺寸卷积层会带来巨大的计算开销。
解决方案: 不在同一层级上设置不同尺寸的滤波器会导致网络变得稍微复杂一些而不是变得更深层次。为了平衡这种复杂性作者提出了Inception模块的概念
- 方面增加了网络的宽度,另一方面增加了网络对尺度的适应性

通过降维技术实现Inception模块:如所述,深度神经网络在计算资源方面表现较为苛刻.为了降低运算成本,作者通过在3×3和5×5卷积层前增加一层1×1卷积层来限制输入通道数量.虽然加入额外的操作看似与预期相悖,但相较于5×5卷积而言,1×1卷积的操作更为经济,同时减少输入通道数量也有助于降低运算成本.

InceptionV1–Googlenet
- GoogleNet采用了基于Inception模块化的架构设计(九个模块),包含总共22层结构;
为了防止梯度消失,在网络中增添两个辅助的Softmax层用于向前传播梯度信息(仅在训练过程中使用)。
Inception V2 incorporates batch normalization when processing inputs. All outputs are ensured to fall within the range of 0 to 1.
- 输出数据均值为0且标准差为1呈标准正态分布。
- 该分布使模型避免梯度消失并加速收敛过程。
- 模型具有良好的泛化性能。
- 该方法有助于减少Dropout层的应用。


- 研究者创新性地提出采用两个连续的3×3卷积层(stride=1)的小型网络模块来替代单个5×5卷积层的操作,并将其命名为Inception V2结构。
- 5×5卷积核所包含的参数数量是单个3×3卷积核的约2.78倍。


- 此外,作者将 n * n的卷积核尺寸分解为 1 * n 和 n * 1 两个卷积

- 并联计算的效率高于串联计算 *

InceptionV3-网络结构图
- InceptionV3整合了前面Inception v2中提到的所有升级,还使用了7x7卷积

- 目前,InceptionV3是最常用的网络模型
Inception V3的设计思想与技巧如下:
(1) 采用细粒度的空间分割策略能够显著提升模型性能。具体而言,在降低模型复杂度的同时减少过拟合风险,并增强网络对复杂模式的捕捉能力。
(2) 在卷积神经网络的整体架构中,在输入层到输出层的过程中应当实现空间分辨率逐步降低、特征图数量不断攀升的过程。这种设计有助于实现空间信息的有效组织与转化。
(3) InceptionModule的设计理念是通过多支并行的小尺寸卷积模块分别捕捉图像的不同层次细节特征从而实现对复杂模式的有效建模
InceptionV4

左边展示的是经典的Inception v2和v3模块结构。通过替换两个连续的3×3卷积层来实现对传统5×5卷积效果的模拟,并结合平均池化操作。该模块主要作用于分辨率约为48×48像素的特征图。
中图模块采用1×n及n×1卷积替代n×n卷积,并同时应用平均池化操作。该模块的主要功能是负责处理大小为17×17的空间特征图。
- 右图将3x3卷积用1x3卷积和3x1卷积代替。
总体而言,在Inception v4中的基础Inception模块仍然继承了来自v2和v3的架构。然而其结构更加简洁统一的同时通过引入更多的模块优化提升了实验结果

Inception模型优势:
-
应用了1x1卷积核设计,在保证高效性的同时仅需微乎其微的计算资源即可完成一层特征转换与非线性变换。
-
引入Batch Normalization技术后,在每一层神经元输入端施加特定的方法处理后可使输入数据服从均值为0、方差为1的标准正态分布。
-
采用Inception模块设计时会将信息流划分为四个分支进行并行计算并最终融合输出。
-
现代工程中应用最广的深度学习网络结构主要包括vgg网络、resnet系列以及inception模型等。
-
工程实践中采用的模型必须兼顾高精度与快速运算能力。
-
常见的模型压缩方法主要包括减小卷积核数量以及精简resnet模块数量等主要途径。
Mobilenet
MobileNet模型是由Google为手机及类似设备开发的一种低功耗且高效的深度神经网络。该技术的核心是深度可分离卷积技术depthwise separable convolution。
Mobilenet-深度可分离卷积depthwise separable convolution
*通俗地说,在深度仅设为一层的情况下,在输入张量上依次进行滑动操作。每完成一次卷积运算后会产生一个新的输出通道。当所有卷积操作完成后,则通过1×1尺寸的卷积进行深度调节。

- 假设有一个3x3 _16大小的卷积层,其输入通道数量为16,输出通道数量为32.具体而言,通过应用32个独立的3x3大小的卷积核,每个卷积核会依次作用于输入数据的不同通道,最终生成所需的32个输出通道.该过程所需的总参数数量为16 \times 32 \times 3 \times 3 = 4608个.
- 应用深度可分离卷积后,首先使用16个独立的3x3 _1大小的卷积核分别作用于输入数据的不同通道,生成16个特征图谱.随后再利用32个独立的1x1 _1大小的点态卷积核对上述特征图谱进行处理,最终得到所需的输出结果.整个过程所需的总参数数量为(16 \times 3 \times 3) + (16 \times 32 \times 1 \times 1) = 656个.
- 深度可分离卷积结构显著减少了模型所需的有效参数数量.

MobileNet
MobileNet网络结构是Google为手机及类似嵌入式设备设计的一种轻量级深度神经网络架构。该架构的主要设计理念基于深度可分离卷积机制。
卷积神经网络设计技巧
问题背景: .
掌握训练神经网络的能力并非易事。与传统的机器学习思维不同,细节确实会对结果产生关键影响,但训练神经网络涉及更为复杂的细节。在面对数据和硬件限制时,你应该如何着手?建议从什么类型的网络架构开始构建,同时需要考虑设置多少层卷积层以及选择何种激励函数等技术问题
- 学习速率是神经网络训练中最关键的超参数之一。若设置过小,则可能导致无法获得有效的解决方案;若设置过大,则可能错失最佳优化机会。若采用自适应学习速率方法,则需投入大量资源用于硬件配置。
- 设计选择与超参数配置对CNN的训练效果及其性能表现具有重要影响。对于刚涉足深度学习领域的研究者而言,在缺乏充足资源的情况下培养架构直觉可能会面临挑战。

-
从ResNet18到ResNet50性价比较高, 而从ResNet50到ResNet152性价比较低.
-
圆圈的大小反映了不同数据集之间的波动幅度, 常用InceptionV3和ResNet50作为基准模型.
- 架构遵循应用
你也许会被GoogleBrain或DeepMind这类充满创造力的地方所研发出来的令人瞩目的创新成果所吸引。然而其中很多项目可能是难以实现或是不具备实际应用价值对于你的需求而言。也许你应该寻找最适合你需求的应用方案这种解决方案可能看似简单却蕴含着强大的能力例如VGG这样的经典架构。

卷积神经网络设计技巧
每年参加ImageNet Challenge的胜者都采用比上一年更深层的网络架构。经历了AlexNet、Inception和ResNets的发展历程后,在这一领域呈现出显著增长的趋势。
- 追求简约
更大的并不一-定是更好的。
不论在建筑领域还是在生物领域中,对称性被视为品质和技术的标志。
- 金字塔式结构
你总是需要在表现力与缩减冗余或无用信息之间权衡。卷积神经网络(CNNs)通常会缩减激活函数的采样,并提升从输入层到最终层之间的连接数量。
以ResNet命名的模型中包含了两个关键组成部分:卷积块(Convolutional Block)与恒等映射块(Identity Mapping Block)。其中卷积块(Convolutional Block)的设计特点在于其输入与输出的空间维度存在差异因此无法直接将它们串联起来。该模块的主要功能便是调整整个网络的空间维度;而恒等映射块则具备相同输入与输出空间尺寸的特点因而能够直接进行串联从而有助于提升网络深度


- 过渡训练
另一个重要考量是平衡训练准确度与模型的泛化能力。通过使用正则化方法类似于dropout或DropPath的方式,
不仅能够增强模型的泛化能力这一显著特点,
这体现了神经网络的一个显著特点。
通过使用比实际应用中更为复杂的问题来训练网络模型,则能够有效提升其泛化性能。
为了扩展覆盖问题的空间并提升解决方案的有效性范围,在设计算法时应充分考虑边界条件。例如通过引入边界优化方法来确保算法在极端情况下依然表现良好
-
逐步增强的功能模块
当体系达到一定深度时(即架构变得成功),各层的工作将被逐步简化以适应整体功能需求。在非常深的神经网络中(即非常深的网络),每个模块将逐级增强其对输入数据处理的能力。
ResNet架构中的各层输出通常与前一层具有相似性(即输出可能类似于输入)。因此,在实践中,请根据具体情况调整跳跃连接的长度。 -
标准化层的输入
标准化是一种使计算过程变得更为顺畅的一种有效途径,并且在实践中能够显著提高模型训练的准确性。标准化
通过将所有层的输入样本置于同一基准水平上(如同归一处理),这使得反向传播过程能够更加高效地进行。 -
使用经过微调处理的预训练网络(fine-tuning)。
Diffbot公司的首席执行官Mike Tung表示:"如果你的视觉数据与ImageNet具有相似性,则使用预训练网络将有助于加快模型收敛速度。"低水平的卷积神经网络(CNN)通常能够被有效地重用,因为它们大多能够检测到像常见的几何形状和边缘特征这样的基本模式。例如,采用以下方法:首先将现有的分类层替换成自定义设计的层;其次基于你的特定数据集进行最终几层的微调。 -
采用循环调整的学习率策略。
进行学习率实验将耗费大量时间,并可能导致错误。自适应学习算法在计算资源上的需求较高,
相比之下, 循环学习策略则无需较高的计算开销. 通过设定一个最大值与最小值的边界范围,
并在该区间内动态调整学习速率来实现优化目标.
