zoukankan      html  css  js  c++  java
  • 基础网络-ResNet/ResNeXt/DenseNet/DPN/SENet

    最近关注了下大模型,整理一下,备忘。

    1. ResNet,原始caffe版本,结构如下:

       

    InsightFace对Resnet的实现有点不同,首先是默认会把第一个7x7的卷积换成3x3,并去掉pool操作(人脸识别输入分辨率112x112比ImageNet小),另外当层数大于101时才使用先1x1再3x3再1x1的bottleneck结构,resnet50里面还是2个3x3卷积,这样简单看的话,同样是50层的resnet,Insightface的版本相当于用16个3x3卷积换之前的1x1,参数量是变多的。后来看ZhaoJ实现的pytorch版本才注意到这个差别,具体如下:

       

        在ZhaoJ代码里这个结构名字是IR-SE,SE好理解,就是加了Squeeze and Exciation Block,起初以为是基于Inception-Resnet backbone,仔细分析其实是每个bottleneck里的差距,所以IR是指Insightface-Resnet或者是Improved Resnet?

     2. ResNeXt,原始版本貌似是lua的,框架不变,修改bottleneck内部,论文切图:

       

       

    就是把ResNet拆成多个组卷积,论文认为像VGG、ResNet这种简单卷积模块的堆叠除了设计/实现简单方便之外,还可以减少对某一特定数据集过拟合的问题;而inception这种复杂的手工设计更容易在有限的计算量下达到更高的准确率,于是将ResNet里bottleneck中的3x3卷积改为分组卷积,以兼收两者之长。

    3. DenseNet,特点是把ResNet里的特征图对应通道相加改成通道拼接,这会导致网络越来约宽,因此每个DenseBlock之间插一个TransitionBlock(1x1卷积)做降维,torchvision有模型Insightface里也有实现:

    展开来大概长这样:

     4. DPN,Dual Path Network,双路指的是Resnet+Desenet,参考Insightface模型描述:

    觉得可以理解成利用ResNet和DenseNet的结构相似性,让两者共用中间的3组卷积。原文还将ResneXt里的分组卷积应用到其中的3x3上,买一得三。。。

    5. SENet,原始实现在这里,是caffe的,所以论文里的图合并时直接用的scale,是一个可以定制化地嵌入到各种网络中的小模块,Squeeze and Exciation Block。主要是想弥补卷积神经网络感受野比较小的话会太过关注局部信息的问题,Sequeeze部分将每个特征图进行全局池化,Excitiation部分引入非线性,操作就是获得每个通道的权重乘回去,结构就如原文所画,展开来大概像这样:

       

    看论文里的图总有种错觉以为SE Block和bottleneck是并联的,但其实是串联的,bottleneck结构没有变,SE Block可以灵活地插在它的前面或后面。

    DenseNet占显存已经被大家诟病很久了,关于速度这里说得比较详细,直接偷图了,侵删。确实加了SE以后训练速度会降,但是之前用caffe,端上的模型mergeBN只能带来比较小的收益,加速没有很明显。

    其他参考:

    卷积网络的进化史   大概参考下就好,不可深究....

    模型结构可视化神器  netron(git)   好东东,众里寻他千百度。

  • 相关阅读:
    数学人眼中的湖北(五)
    数学人眼中的湖北
    范德蒙德恒等式
    日本高中数学的学习范围
    怎样搞数学竞赛
    单色三角形问题
    shell wait 和sleep 对比
    上传本地文件到github仓库
    windows2008服务器设置系统启动时程序自动运行
    小程序运行报错:errMsg: "request:fail url not in domain list"
  • 原文地址:https://www.cnblogs.com/zhengmeisong/p/11625216.html
Copyright © 2011-2022 走看看