【论文阅读基础知识整理】CNN经典结构的总结

【论文阅读基础知识整理】CNN经典结构的总结

​ 在论文阅读过程中,常常会遇到将提取特征后的特征图输入论文的网络结构中,而这些特征图大部分是通过现有实验的经典CNN结构得到的。本篇文章将一些经典的CNN结构进行介绍。

1. AlexNet

在这里插入图片描述

卷积层C1:
输入:227x227x3的图片
卷积:使用96个11x11x3的卷积核,步长为4,得到55x55x96的特征图,分为两组(论文指出用两个GPU分别进行计算),因此每组55x55x48
激活:将两组55x55x48的特征图输入到ReLU函数中
池化:池化运算尺寸3x3,步长为2,得到两组27x27x48的特征图
LRN:局部响应归一化(特征图维度不变,相当于一个归一化操作)
输出:两组27x27x48的特征图

卷积层C2:
输入:两组27x27x48的特征图
卷积:使用两组128个5x5x48的卷积核,步长为1,填充padding=2,输出两组27x27x128的特征图
激活:将两组27x27x128的特征图输入到ReLU函数中
池化:池化运算尺寸3x3,步长为2,得到两组13x13x128的特征图
LRN:局部响应归一化(特征图维度不变,相当于一个归一化操作)
输出:两组13x13x128的特征图

卷积层C3:
输入:两组13x13x128的特征图
卷积:使用两组192个3x3x128的卷积核,步长为1,填充padding=1,输出两组13x13x192的特征图
激活:将两组13x13x192的特征图输入到ReLU函数中
输出:两组13x13x192的特征图

卷积层C4:
输入:两组13x13x192的特征图
卷积:使用两组192个3x3x192的卷积核,步长为1,填充padding=1,输出两组13x13x192的特征图
激活:将两组13x13x192的特征图输入到ReLU函数中
输出:两组13x13x192的特征图

卷积层C5:
输入:两组13x13x192的特征图
卷积:使用两组128个3x3x192的卷积核,步长为1,填充padding=1,输出两组13x13x128的特征图
激活:将两组13x13x128的特征图输入到ReLU函数中
池化:池化运算尺寸3x3,步长为2,得到两组
输出:两组6x6x128的特征图

全连接层FC6:
输入:两组6x6x128的特征图
全连接:得到两组分别含2048个神经元的全连接层
激活:将两组分别含2048个神经元的全连接层输入到ReLU函数中
dropout:不激活某些神经元
输出:两组分别含2048个神经元的全连接层

全连接层FC7:
输入:两组分别含2048个神经元的全连接层
全连接:得到两组分别含2048个神经元的全连接层
激活:将两组分别含2048个神经元的全连接层输入到ReLU函数中
dropout:不激活某些神经元
输出:两组分别含2048个神经元的全连接层

输出层:
输入:两组分别含2048个神经元的全连接层
全连接:与1000个神经元进行全连接
输出:1000个float类型的值(即1000个类别的预测结果)
主要贡献1:Dropout

​ 论文提出了Dropout这个概念,主要目的是为了防止过拟合。主要过程即随机将神经元设置为0,则这个神经元无法进行前向传播和反向传播。主观来说就是删除掉部分神经元(常用在全连接层),使运算参数减少,防止过度训练特征。

主要贡献2:LRN

​ LRN是一种归一化的方式,目的在于提高模型的泛化能力。主观来说就是将响应反馈大的神经元,抑制反馈小的神经元。但LRN在如今网络结构应用性并没有很广。参数K,n,alpha,belta都是超参数,一般设置k=2,n=5,alpha=1*e-4,belta=0.75
在这里插入图片描述
tensorflow封装了一个LRN的函数tf.nn.lrn。

import tensorflow as tf
import numpy as np

import cv2
img=cv2.imread('D:/desktop/1.jpg')
img = np.array(img.reshape([1,600,899,3]))
y = tf.nn.lrn(input=img,depth_radius=2,bias=2,alpha=1,beta=1)
with tf.Session() as sess:
    print(img)
    print('.......................................')
    print(y.eval())

2. VGG

在这里插入图片描述
在这里插入图片描述
​ VGG框架有两种结构,分别为VGG16和VGG19,两者的差别在于网络深度的不同。VGG结构相比AlexNet的改进在于使用连续的小尺度卷积核代替大尺度卷积核,更好的保存图像性质。该网络结构归结为13个卷积层,3个全连接层。

主要贡献1:小尺寸卷积层代替大尺寸卷积层

​ VGG通过将几个小尺寸(3x3)的卷积层的组合代替一个大尺寸的卷积层(5x5或7x7),这样加深了网络的深度,以提高性能。

网络缺点

​ 由于VGG采用了3个全连接层,因此训练的参数较大,花费时间长。

3.ResNet

​ ResNet是现在众多论文所用到的网络,它最主观的特点在于它的神经网络层数很深。那不免就会有疑问,我们不能在VGG的基础上进行网络层数的增加吗?ResNet论文给出了答案。
在这里插入图片描述
​ 从上面两组曲线图可以看出当网络层数增加时,错误率却提高了,论文将这种现象称为退化问题。退化问题简单来说就是网络越深越不好训练,也就是更难拟合。

主要贡献1:提出了残差的概念

在这里插入图片描述

通过上图简单理解一下什么是残差,以及为什么使用残差
假设F是残差,F'是为引入残差求和的网络映射,H是引入残差后求和的网络映射
设将1映射为1.1
F'(1)=1.1,H'(1)=F(1)+1=1.1可推出残差F(1)=0.1

未引入残差,F'(1)作为映射参数(计算变化率的参数):
若输出1.1变为1.2:变化率(1.2-1.1)/1.1=1%
引入残差,F(1)作为映射参数(计算变化率的参数):
若输出1.1变为1.2:变化率[(1.2-1)-(1.1-1)]/(1.1-1)=100%

可以看到引入残差后,变化率更大也就意味着对输出变化更加敏感。这样对权重的更新会更加合理不会大改动。

​ 我们拿梯度下降的例子来说,我们在训练权重的时候,目的是为了使损失最小,此时的梯度近乎为0,也称是最优状态。假设当网络层数已经到一定层数达到最优状态,则下一次的权重更新,必须依旧保持最优状态,此时深层网络和浅层网络就没什么区别,反而增添了大量的参数导致信息丢失,降低网络效率。从客观角度分析,网络很难达到最优状态,那么当近乎接近最优状态时,引入残差F(x)可以很敏感的进行权重调整,以学习到新的特征,使其无限接近最优状态。

网络总结

在这里插入图片描述
​ 上图为两个残差块,从结构可以看出最后的shape是没有变化的,目的是计算的残差维度和跳跃连接(那条实线)维度相同可以进行相加操作。(升维操作:1.全0填充;2.采用1*1卷积)
在这里插入图片描述
​ 网络结构图基本由两种不同的残差块进行组合,ResNet50和ResNet101在论文中经常使用。
在这里插入图片描述
​ 加残差结构和未加残差结构网络图的比较,实线指shortcut连接,虚线没有(维度不匹配)

总结来说,理解resnet只需要理解几个知识:
1.shortcut连接为了获得x
2.经过残差块获得H(x)
3.残差函数F(x) = H(x) - x
4.通过残差F(x)进行权重调整,理解为迈着小步稳步前进
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值