前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于PyTorch的卷积神经网络经典BackBone(骨干网络)复现

基于PyTorch的卷积神经网络经典BackBone(骨干网络)复现

作者头像
机器学习AI算法工程
发布2022-05-10 19:41:54
1.3K0
发布2022-05-10 19:41:54
举报
文章被收录于专栏:机器学习AI算法工程

向AI转型的程序员都关注了这个号👇👇👇

机器学习AI算法工程   公众号:datayx

前言

卷积神经网络的发展,从上个世纪就已经开始了,让时间回到1998年, 在当时,Yann LeCun 教授提出了一种较为成熟的卷积神经网络架构LeNet-5,现在被誉为卷积神经网络的“HelloWorld”,但由于当时计算机算力的局限性以及支持向量机(核学习方法)的兴起,CNN方法并不是当时学术界认可的主流方法。时间推移到14年后,随着AlexNet以高出第二名约10%的accuracy rate成为了2012年ImageNet图像识别竞赛的第一名,深度学习以及卷积神经网络的研究热潮被彻底引爆,从此CNN进入了飞速发展的阶段,从无人问津到一度成为计算机视觉的主流框架,在此之后,各种基于CNN的图像识别网络开始大放异彩。各种CNN网络层出不穷。

本次博客将介绍如今图像识别领域十分经典的一些CNN网络,虽然现在卷积网络框架也随着研究的深入变得越来越复杂,但我们仍然可以在一些最新的网络结构中发现它们的身影,这些经典CNN网络有时候是整个算法提取特征的骨架(特征的质量往往直接影响到分类结果的准确度,表达能力更强的特征也能给模型带来更强的分类能力),因此又称为“Backbone”(骨干网络)。

本次博客基于代码实战复现经典的Backbone结构,并基于PyTorch分享一些网络搭建技巧。

1.VGG

网络架构:

VGG16网络由13层卷积层+3层全连接层构成。

1.1改进:

更小的卷积核,对比AlexNet,VGG网络使用的卷积核大小不超过3x3,这种结构相比于大卷积核有一个优点,就是两个3x3的卷积核堆叠对于原图提取特征的感受野(特征图一个像素融合了输入多少像素的信息决定了感受野的大小)相当于一个5x5卷积核(如图),并且在同等感受野的条件下,两个3x3卷积之间加入激活函数,其非线性能力比单个5x5卷积要强。

  1. 更深的网络结构,相比于AlexNet只有5层卷积层,VGG系列加深了网络的深度,更深的结构有助于网络提取图像中更复杂的语义信息。

1.2 PyTorch复现VGG19

1.2.1小Tips:

当网络的结构重复时,使用for循环构造避免代码形式冗余

将不同功能的网络各自封装到一个大的Sequential模块中,结构分明

卷积操作输出尺寸计算公式:Out=(In-Kernel+2Padding)/Stride+1 (Kernel:卷积核尺寸,Stride:步长,Padding:边界填充) 若要保证输出尺寸和原尺寸一致,Padding可以设置为:Padding = (kernel-1)/2)

池化操作输出尺寸计算公式同卷积操作一致

在实际深度学习框架实现卷积和全连接的计算中,本质都是矩阵运算:

若输入的特征图深度是N,输出特征图深度是M,则卷积核的维度是:NxMxKxK(K为卷积核大小)。因此全卷积网络对输入图像的尺寸没有要求。

全连接层的尺寸和输入的特征尺寸相关(将特征图展平成为一维向量),若输入的特征向量是1xN,输出是1xM,则全连接层的维度是:MxN。

1.2.2 打印网络信息:

使用torch.summary输出网络架构:

2.Inception(GoogLeNet)

2.1改进(Inception v1)

以往网络的不足:

加深深度导致的网络参数增加

深层网络需要更多的训练数据,容易产生过拟合

深层网络在训练过程中容易导致梯度消失

改进:

引入了Inception模块作为网络的基础模块,整体的网络基于基础模块的堆叠;在模块中使用了通道拼接(Concat)的方法对不同卷积核提取的特征进行拼接

Inception基础的模块如图所示,使用3个不同尺寸的卷积核进行卷积运算,同时还包括一个最大池化,最后将这四个部分输出的结果进行通道拼接,传给下一层:

使用1x1卷积进行数据降维(减少深度),减少训练的参数量。

上图这个结构有一个弊端,即模块中一个分支的输入通道数就是前一个模块所有分支输出通道数之和(通道合并),在多个模块堆叠后计算的参数量将会变得十分巨大,为了解决这个问题,作者在每一个分支的卷积层之前单独加了一个1x1卷积,来进行通道数的降维

我们或许会有一个疑问,为什么不在3x3或5x5卷积输出上直接降维特征,而非得使用1x1卷积呢,(作者认为这样做能够增加网络的非线性能力,因为卷积和卷积之间有激活函数)

引入辅助分类器(在不同深度计算分类最后一并回传计算损失)

作者发现网络中间层的特征和较深层的特征有很大的不同,因此在训练时额外在中间层增加了两个辅助分类器。辅助分类器的结果同输出结果一并计算损失,并且辅助分类器的损失为网络总损失的0.3。作者认为这样的结构有利于增强网络在较浅层特征的分类能力,相当于给网络加了一个额外的约束(正则化),并且在推理时这些辅助网络的结构将被舍弃。

2.2.2改进(Inception v2)

卷积分解

Inception v2较Inception v1将5x5的大卷积分解成两个3x3的小卷积(效仿VGG网络的处理方式,减少了参数量同时增加网络的非线性能力),并加入了BN层:

进一步的,Inception v2将nxn卷积分解为两个1xn和nx1卷积(空间可分离卷积Spatially Separable Convolution),在感受野相当的情况下,进一步减少了网络的参数:

2.2 PyTorch复现Inception v1:

pytorch复现Inception基础模块

将卷积+激活函数作为一个基础的卷积组:

构造一个Inception模块:

搭建完整的Inceptionv1:

2.2.4 小Tips

在构建比较复杂的网络时,将网络重叠使用的一些基础模块封装为一个基础的类(层次分明)。

3.ResNet

在以往的经验上,人们普遍认为通过加深网络的层数能够使得网络具有更强的学习能力,即使网络容易产生过拟合/梯度消失的问题,在现有方法下也可以通过增加数据集,Dropout或者正则化/加入BN层解决。但是通过实验数据发现,即使加入有效的措施抑制网络产生过拟合或者梯度消失,网络的精度也会随着深度的增加而下降,并且还不是由于过拟合引起的(实验数据表明越深的网络training loss反而越高)

事实上,阻碍网络向深度发展的一个主要因素就是梯度不能得到有效的传播,越深的网络反传过程中的梯度相关性会越来越差,接近于白噪声,导致梯度的更新也相当于随机扰动。

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

打个形象的比喻,就如我们小时候玩过的口传悄悄话游戏,随着参与人数的增多,最后一个人口中说出的信息往往早已和原先纸条上的信息大相径庭。

3.1改进

以往的瓶颈:深度网络不可控的梯度消失,深层网络与浅层网络的梯度相关性下降,网络难以训练。

ResNet的改进:引入了一个残差映射的结构来解决网络退化的问题:

何为残差映射?

假设输入的特征为x,期望输出的特征为H(x)。我们知道,对于一般的神经网络而言,每一层的目的无非就是对输入x进行非线性变换,将特征x映射到尽量趋近H(x),即,网络需要直接拟合输出H(x).

而对于残差映射,模块中通过引入一个shortcut分支(恒等映射),将网络需要拟合的映射变为残差F(x):F(x) = H(x) - x.

作者在论文中假设:相较于直接优化H(x),优化残差映射F(x)能有效缓解反向传播过程中的梯度消失问题,解决了深度网络不可训练的困难:[Resnet-50网络结构详解] https://www.cnblogs.com/qianchaomoon/p/12315906.html

ResNet-50网络整体架构

Bottleneck结构

论文中将Resnet-50分成了4个大的卷积组,每一个大的卷积组叫做一个Bottleneck(瓶颈)模块(输入和输出的特征图通道较多,中间的卷积层特征深度较浅,类似瓶颈的中间小两头大的结构)。卷积组与卷积组之间会通过一个shortcut相连。

左:非瓶颈结构,右:瓶颈结构

值得注意的是,ResNet使用Bottleneck结构主要是是为了减小网络的参数量(特征降维),在实际中作者注意到,瓶颈结构的使用同样出现了普通网络的退化问题:

ResNet-50图解及各层参数细节

对于F(x)+x,ResNet采取的是逐通道相加的形式,因此在相加时需要考虑两者的通道数是否相同,相同的情况直接相加即可(图实线处),若两者通道不同,需要用1x1卷积对特征进行升维,将通道数变为相同(图虚线处):

实现一个Bottleneck模块:
实现resnet-50

FPN(特征金字塔)

4.1 特征的语义信息

对于CNN网络,图像通过网络浅层的卷积层,输出的特征图往往只能表示一些简单的语义信息(比如一些简单的线条),越深层的网络,提取特征表示的语义信息也就越复杂(从一些纹理,到一些类别具有的相似轮廓):(图中的特征有经过反卷积上采样)

因此,传统的检测网络通常只在最后一个卷积输出上的高层语义特征图进行后续的步骤,但这也不可避免的存在一些问题。

4.2 改进

我们知道,越是深层的网络,特征的下采样率也就越高,即深层的特征图一个像素就对应浅层特征的一片区域,这对于大目标的检测不会造成太大的影响。但对于图像上的小目标,在深层特征上的有效信息较少,导致网络对于小物体的检测性能急剧下降,这种现象也被称作多尺度问题。

基于多尺度问题,一个直接的解决办法便是利用图像金字塔,将原始的输入变换为多张不同尺寸的多尺度图像,将这些图像分别进行特征提取,生成多尺度的特征后再进行后续的处理,这样一来,在小尺度的特征上检测到小目标的几率就大大增加。这种方法简单有效,曾大量在COCO目标检测竞赛上使用。但这种方法的缺点就在于计算量大,需要消耗大量的时间。

对此,FPN网络(Feature Pyramid Networks)针对这一问题改进了提取多尺度特征的方法。基于4.1的介绍我们知道,卷积网络不同层提取的特征尺寸各不相同,本身就类似于一个金字塔的结构,同时,每一层的语义信息也各不相同,越浅的特征语义信息越简单,显示的细节也就越多,越深层的特征显示的细节越少,语义信息越高级。基于此,FPN网络在特征提取的过程中融合了不同卷积层的特征,较好的改善了多尺度检测问题。

4.3 PyTorch 复现 FPN

4.3.1 FPN网络架构

FPN网络主要包含四个部分,自下而上网络,自上而下网络,横向连接与卷积融合。

自下而上网络(提供不同尺度的特征):

最左侧为普通的特征提取卷积网络(ResNet),C2-C4代表resnet中的四个大的卷积组,包含了多个Bottleneck结构,原始图像的输入就从该结构开始。

自上而下网络(提供高层语义特征):在这一结构中,首先对C5进行1x1卷积降低通道数得到M5,接着依次上采样得到M4,M3,M2.目的是得到与C4,C3,C2相同尺寸但不同语义的特征。方便特征的融合(融合的方式为逐元素相加)。

值得注意的是,在网络的上采样过程中采用的不是反卷积或者非线性插值方法,而是普通的2倍最邻近上采样(可以最大程度保留特征图的语义信息,得到既有良好的空间信息又有较强烈的语义信息的特征图。):【论文笔记】FPN —— 特征金字塔 

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

  1. 横向连接: 将高层的语义特征与浅层的细节特征相融合(中途使用1x1卷积使得两者的通道数相同)
  2. 卷积融合: 得到相加的特征后,再利用3x3卷积对M2-M4进一步融合(论文表示这么做可以消除上采样带来的重叠效应)
复现FPN网络

原文地址

https://blog.csdn.net/SESESssss/article/details/114340066

机器学习算法AI大数据技术

 搜索公众号添加: datanlp

长按图片,识别二维码


阅读过本文的人还看了以下文章:

TensorFlow 2.0深度学习案例实战

基于40万表格数据集TableBank,用MaskRCNN做表格检测

《基于深度学习的自然语言处理》中/英PDF

Deep Learning 中文版初版-周志华团队

【全套视频课】最全的目标检测算法系列讲解,通俗易懂!

《美团机器学习实践》_美团算法团队.pdf

《深度学习入门:基于Python的理论与实现》高清中文PDF+源码

《深度学习:基于Keras的Python实践》PDF和代码

特征提取与图像处理(第二版).pdf

python就业班学习视频,从入门到实战项目

2019最新《PyTorch自然语言处理》英、中文版PDF+源码

《21个项目玩转深度学习:基于TensorFlow的实践详解》完整版PDF+附书代码

《深度学习之pytorch》pdf+附书源码

PyTorch深度学习快速实战入门《pytorch-handbook》

【下载】豆瓣评分8.1,《机器学习实战:基于Scikit-Learn和TensorFlow》

《Python数据分析与挖掘实战》PDF+完整源码

汽车行业完整知识图谱项目实战视频(全23课)

李沐大神开源《动手学深度学习》,加州伯克利深度学习(2019春)教材

笔记、代码清晰易懂!李航《统计学习方法》最新资源全套!

《神经网络与深度学习》最新2018版中英PDF+源码

将机器学习模型部署为REST API

FashionAI服装属性标签图像识别Top1-5方案分享

重要开源!CNN-RNN-CTC 实现手写汉字识别

yolo3 检测出图像中的不规则汉字

同样是机器学习算法工程师,你的面试为什么过不了?

前海征信大数据算法:风险概率预测

【Keras】完整实现‘交通标志’分类、‘票据’分类两个项目,让你掌握深度学习图像分类

VGG16迁移学习,实现医学图像识别分类工程项目

特征工程(一)

特征工程(二) :文本数据的展开、过滤和分块

特征工程(三):特征缩放,从词袋到 TF-IDF

特征工程(四): 类别特征

特征工程(五): PCA 降维

特征工程(六): 非线性特征提取和模型堆叠

特征工程(七):图像特征提取和深度学习

如何利用全新的决策树集成级联结构gcForest做特征工程并打分?

Machine Learning Yearning 中文翻译稿

蚂蚁金服2018秋招-算法工程师(共四面)通过

全球AI挑战-场景分类的比赛源码(多模型融合)

斯坦福CS230官方指南:CNN、RNN及使用技巧速查(打印收藏)

python+flask搭建CNN在线识别手写中文网站

中科院Kaggle全球文本匹配竞赛华人第1名团队-深度学习与特征工程

不断更新资源

深度学习、机器学习、数据分析、python

 搜索公众号添加: datayx  

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器学习AI算法工程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.2 PyTorch复现VGG19
  • 2.2 PyTorch复现Inception v1:
    • pytorch复现Inception基础模块
      • 实现一个Bottleneck模块:
        • 实现resnet-50
        • FPN(特征金字塔)
          • 4.1 特征的语义信息
            • 复现FPN网络
        相关产品与服务
        NLP 服务
        NLP 服务(Natural Language Process,NLP)深度整合了腾讯内部的 NLP 技术,提供多项智能文本处理和文本生成能力,包括词法分析、相似词召回、词相似度、句子相似度、文本润色、句子纠错、文本补全、句子生成等。满足各行业的文本智能需求。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档