【程序喵笔记】图像分类网络1.0

图像分类网络

来总结一下部分经典的分类网络~

在这里插入图片描述

前言

ImageNet大规模视觉识别比赛(ImageNet Large Scale Visual Recognition Challenge)120万幅高分辨率图像分类为1000个不同的类,虽然2017年就已经宣布停赛,但是里面的一些网络可以说是在特征提取和深度学习之中堪称经典。从12年的AlexNet开始,网络越来越深,越学越好~

在这里插入图片描述

Top5错误率是正确标签不在预测标签的前5中的图像在总样本中比例。

AlexNet

网络构架

AlexNet可以说是对传统神经网络一大突破,错误率直接下跌接近10个百分点,先看看网络构架

在这里插入图片描述

创新点

网络现在看来不是很惊艳,但是也有为后续网络铺路的几点创新:

ReLU激活

为了增加网络的非线性,卷积后使用激活函数,原先使用的是sigmoid或者tanh,RelU就很简单粗暴了f(x) = max(0, x),ReLU的引入大大减少了梯度下降的训练时间,网络更快收敛

在这里插入图片描述

Max Pooling最大池化

池化层总结了特征图的输出,也就是将特征图的大小变小,保留重要的特征,原先常用的是平均池化,但是特征会有所模糊,在AlexNet之后,最大池化开始流行

Dropout

为了防止过拟合(过拟合就是分的太细了,简单看训练集准确率很高,验证集准确率却低)不仅在数据预处理的时候采用数据扩充(data augmentation),也在全连接层引入Dropout。Dropout就是随机舍弃一些神经元,前向传播输出为0,反向传播不更新,下一次训练恢复,然后再随机舍弃一些。可以防止训练数据中复杂的共同适应。

创新点还有局部响应归一化(LRN),这个后续学者证明没多大用处。

VGG

VGG可谓在识别网络中很多都用到了,最经典的是VGG16,16层网络。可是这16层看起来挺浅,但是当时可不容易,网络层数增多会引起梯度爆炸,梯度消失,网络崩了怎么玩?作者就想出一个好办法啊~预训练:先训练一个浅层网络,用浅层网络初始化深层网络的参数,这样就有个引导,不会跑太偏。

网络构架

最常用的VGG16和19在分类,识别网络很多都为特征提取的网络结构

在这里插入图片描述

创新点

3*3小卷积

自从VGG之后,3*3的卷积变得很普遍,更少的参数,更优的效果,更快的训练。

先说感受野,一个5*5的卷积感受野为25,两个3*3步长为1的感受野也是25. 但是参数一个5*5参数为5*5*c*c,两个3*3参数为 2*3*3*c*c,c为特征图维度数(通道数)

再说效果优秀,文章证明2个3*3替换为 5*5,Top1错误率增加了7%

在这里插入图片描述

卷积-池化结构

卷积为 3*3,步长为1,之后接ReLU激活。最大池化为 2*2步长为2,最大池化之后特征图的长和宽都会变为原来的一半。为了弥补这以缺失,在后一层卷积增加卷积核的维度,从而增加特征图的维度。所以VGG特征图是变得越来越小,维度越来越深。

在这里插入图片描述

Inception

这是Google提出的网络,主要是一个Inception结构,并行多次卷积在拼接,有4个版本,最后一个和ResNet结合,着重分析前三个

在这里插入图片描述

创新点

Inception结构

目标识别存在问题:

  • 全局目标大卷积核更优,局部目标小卷积核更优
  • 卷积核堆叠会增加计算量,也会使网络过深,可能存在梯度消失

解决的方法把全连接改成稀疏连接,卷积层也是稀疏连接,但是不对称的稀疏数据数值硬件不能跟上(硬件全是针对密集矩阵优化。)所以,Inception是一种硬件可以跟上并且近似的最优局部稀疏结构。

在这里插入图片描述

上一层卷积经过不同大小的卷积,只要保证padding = 0、1、2,就可以得到相同大小的特征图并连接,增加一个3*3 max pooling会产生更优的效果。

5*5卷积加入很大程度上提取了特征图中远距离的特征,但是计算量增加了很多,但是又不想舍弃 5*5只能在特征图维度上减少。就增加了 1*1的卷积来降低维度。

1*1卷积

降维:对于同样大小的输入输出特征图,增加1*1卷积通过降维,大大减少了网络的参数

在这里插入图片描述

聚合:1*1卷积实际上使跨通道的聚合,将多个输入特征图上相同位置的点做全连接处理,并增加ReLU提取非线性特征。

这样,改进后的Inception模块变成这样

在这里插入图片描述

辅助分类网络

网络太深,如果所有的一起训练,前面几层梯度导数为0,这样就出现梯度消失,为解决这个问题,增加了两个softmax辅助分类网络,在较为低层的网路进行区分,增加返回的梯度信号。辅助分类网络只用于训练阶段,从中间层的分类结果按照比较小的权重(0.3)增加至最终分类层中。

具体GoogLeNet网络如下:

在这里插入图片描述

Batch Normalization

先说说batch,就是一批一批数据训练,好处一是并行计算更高效,二是一批数据上计算梯度和损失,这批数据量越大越好,如果能一次把所有的数据都放到一批那就简直完美,但是硬件不能实现。

每层的输入受到前几层影响,如果前一层的分布变化,后一层需要适应,那么学习起来就很复杂了,这就产生了协方差偏移。训练过程中,深度网络内部节点分布的变化就是 Internal Covariate Shift(内部协方差偏移),需要较低的学习率和合适的初始化参数,训练的很慢。

如果在训练中,把多个样本做归一化,就是变为均值为0,方差为1的正态分布,这样的归一化之后的数据再输入到激活函数中,激活函数的取值靠近中间,不会出现梯度消失,如图,激活函数如果为sigmoid,归一化后输入为蓝色区域

在这里插入图片描述

但是这样激活函数都在线性区域了,激活函数就是要提供非线性啊,对归一化的值还要进行偏移

在这里插入图片描述

在Inception-v3中所有卷积层和辅助分类的全连接层全部使用BN

不对称卷积核

这是Inception-v3在Inception-v1上的改进,形成3种不同的Inception模块,用来对深层特征提取,一种是5*5卷积由两个 3*3替代,更少的参数,更优的效率

在这里插入图片描述

作者想,能不能更小,3*3变成 2*2,但是效果不怎么好,还不如整一个非对称的用 1*33*1两个卷积替代 3*3更节省参数

在这里插入图片描述

这种非对称的卷积在浅层使用意义不大,在深层网络,更有助于生成高维的稀疏表示。还有一种类似的非对称卷积,是最后的Inception模块,用于扩展滤波器组。

在这里插入图片描述

ResNet

网络想要深,但是越深效果反而差了,卷积神经网络遇到的问题:按道理加深网络层数可以提取更深入的信息,但是实际上加深网络会使得网络衰退,就是网络层数增加,错误增加,退化问题。

在这里插入图片描述

突破神经网络深度问题最为颠覆性问题就是ResNet。

网络构架

网络设置很简单,卷积和VGG一样,大多是3*3卷积,遵循两个原则::(i)对于相同的输出特征图尺寸,各层有相同数量的滤波器; (ii)如果将特征图的大小(尺寸)减半(用步长为2的卷积进行下采样),则过滤器的数量将增加一倍,以保持每一层的时间复杂度。卷积之后,Relu激活之前,增加Batch Normalization(BN)防止梯度消失。

在这里插入图片描述

以ResNet50为例,从conv3_x开始,第1个block的第2个卷积会步长为2,特征图尺寸减半,作为补偿,滤波器数量变为2倍.

在这里插入图片描述

创新点

残差模块

解决网络退化问题特别简单,增加了一个恒等映射 x,让网络的输出为卷积之后的 F(x)x相加,这样网络就变成了输出和输入的差,就是残差了

在这里插入图片描述

如果极端而言,右边恒等映射x很优秀了,那么F(x)很容易就变为0,这样也就相当于这层特征提取的太差,就把他扔了,下一层继续提取(但实际不会这么极端)。直接把x拿过来这跟线就是短链接,不会增加网络额外的参数和复杂度,并且不会变为0。

这里的F(x)必须是两层或者更多层的网络,如果是单层那么又等价为线性层。如果F(x)和x维度一致,可以直接相加的;如果不一致对x进行一个维度变换,文章提出两种方案,一是直接加0,二是用1*1的卷积卷一下来增加维度(二效果更好)。

在这里插入图片描述

比较可以看出来,同样网络构造,ResNet中34层要比18层优秀。不仅如此。18层虽然结果相似,但是ResNet更快收敛。针对残差模块的设计,ReLU和BN到底应该放在哪,作者在后续文章做了一些改进

在这里插入图片描述

就是这小小的一个恒等映射,就是网络深度质的突破(千层都不是问题),此后,很多学者的研究都是在ResNet基础上。

ResNeXt

这可以说是一个综合体,借鉴了Inception结构的稀疏模块和ResNet的残差结构。

网络构架

构架和ResNet很相似,不过残差模块增加C,C就是并列的相同的分支

在这里插入图片描述

创新点

Cardinatity

ResNeXt提出一个Cardinatity,作为模型复杂度的一个新度量,指的是一个block中所具有的相同分支的数目,也就是原先玩1个64维度的特征图,现在拿32个4维特征图分别玩。

在这里插入图片描述

这样玩的原因有点像全连接层,就是神经元啊,要分开,转换再聚合

在这里插入图片描述

那么网络也可以先分开,再卷积,最后聚合一起啊。这就是Network-in-Neuron。在保证相似计算复杂度及模型参数大小的前提下,提升cardinatity比提升网络深度或宽度可取得更好的模型表达能力。

在这里插入图片描述

比起来Inception-Resnet更加简单高效,网络看起来清晰不少(我感觉Inception网络结构太复杂),ResNeXt每一个卷积路径有相同的结构,多条路径可以共享,而Inception-ResNet就是挺五花八门的。这样再实际操作的时候就按照群卷积(Group convolution)操作就可以

在这里插入图片描述

【后记】
读完大神的paper总是要赞叹许久,以上是我看陈云霁老师的书和啃网络论文的总结,可能有不全面之处,大家多多交流~
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值