基础网络-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版本才注意到这个差别,具体如下:

   

 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可以灵活地插在它的前面或后面。

猜你喜欢

转载自www.cnblogs.com/zhengmeisong/p/11625216.html