深度卷机网络(Deep CNNs)的GFLOPS与参数量计算

2024-06-10 05:48

本文主要是介绍深度卷机网络(Deep CNNs)的GFLOPS与参数量计算,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

转载来源:深度学习分类网络

关于model参数量计算1.CNN学习笔记——理解结构,LeNet5介绍

1 VGG-16

VGG16[1]是非常经典的模型,好用,是2014 ImageNet的亚军(有可能是vgg-19)。核心思想:小核,堆叠。主要分成5stages,2233313个卷积层,16的意思应该是加上3FC层。每个stage后面都跟着一个pool来减小尺寸,参数方面fc占了很多,所以后面大多用conv或者global pool来代替。在做分割时,一般会把第四个poolstride设成1,然后stage 5convdilation conv来增加尺寸。192的感受野还是比较小的,并且按照一些论文的分析实际的感受野一般会比理论上的小很多,因此如果用它来做检测等任务的话,感受野也许这个是个问题。 


2 Inception-V4

inception v1(Googlenet)应该是获得了image net 2014的冠军 vgg应该是亚军(有可能是vgg19),这个V4[2]版本是在2016年出来。在15年初还出现了一篇对深度学习网络影响比较大的论文,所以基本后面的网络都会在conv后面加BN,在caffe里一般会用两个层组合来实现这个功能bn/scale.所以画的图中用bsr来表示batchNormalizationrelu的组合.Inception结构中嵌入了多尺度信息,集成了多种不同感受野上的特征,另外一个思想是将cross channelcorrelationspatial corrections分离开。一般用1*1pointwise conv去提取cross channel的信息,然后3*3或者其他大核去提取空间信息。可以从架构图中看出来Incetpion还是比较乱的,要设置的参数太多。


3 ResNet

ResNet[3]2015image net的冠军。同等条件下,ResNet的速度和精度都会比VGG要好。个人觉得ResNet还是受到了Inception的启发,采用了多路的架构。但是ResNet有很好的解释性,它的核心是下面的ResUnitB.每一个这样的buildingblock都有一条通路加input通过某种方式叠加在输出中,就好比output = input+branch2,其中inputoutput类似,那么branch2就类似于一个残差的东西,因此就叫做残差网.


4 Identity mappings ResNet

在原始的ResNet中,左边的通道经过了Relu,因此并不是一个纯粹的等价映射通道,所以在这篇论文中作者利用了full pre-activation构建了一个Identity mapping[4]building block来替换原有的,以便于信息和梯度传播,不过后面会介绍的WRN论文指出网络小于100层的用preActivation影响不太大。


5 ResNet-InceptionV2

结合了Resnetinception的思想[2]




6 WRN  (wide residual network)

WRN[5]的思想非常简单,主要把ResNetbuilding blockchannel增大,把网络变宽,从而能用不是很深的网络也能达到很好的效果.具体地说,比如对应于ResNet1-3-1这样bottleneck架构,WRN就是把前两个卷积的通道数量增加了一倍,参考的是caffe版本,未对照是否与原作者的有出入.同时这篇论文还指出了bottleneck的架构也许更适用于imagenet,其他一些数据库可能使用其他的building block更合适些。


7 SqueezeNet V1.1

在把网络做宽做深的同时,为了一些物联网、移动应用,学术界也在研究精简网络架构,在不损失很多精度下减小model size和提高速度。当然有些分支是利用裁剪,权重量化等方法,不在这里的讨论范围。

SqueezeNet[6]主要利用三个思想。第一个是大量使用1*1卷积,这会造成空间关系提取的困难,因此在每一个fire unit有还有3*3的通路,其实也是inception的思想,一个提取空间,一个提取cross channel;第二个,通过bottleneck的方式降低3*3输入测channel数量;第三个,推迟下采样,使得后面的feature map的分辨率大一些。个人觉得还是降的挺快的,不过确实不想其他网络降到了32倍,squeezeNet只降到16倍。注意论文中作者还利用了其他方法对模型进行压缩,压到了0.5M.


8 Xception

Xception[7]开始使用depthwise conv的方式提高速度和降低model size.它基于这样的假设,空间的联系和cross channel的联系可以完全独立。所以它用了3*3depthwise conv的核提取空间关系,而用1*1pointwise conv提取corss channel特征。另外它的building block应该也受到了[4]的影响,采用了Identity mapping的架构,而且感觉它的分辨率降得很快。Xception用的是keras或者tensorflow的实现,featuremap的大小是向上取整.下图中groupA3右侧多了个relu,画图方便,也不影响结果

9 ResNetXt

ResNetXt[8]结合了WRNgroup conv的思想。下图中的c就是group的数量。


10 MobileNet

MobilieNet[9]的思想跟 X ception 一致,不过它的 building block 变简单了,没有采用 residual 结构


11 ShuffleNet

像上面的几种网络采用group conv后,很多计算都集中在1*1conv,如果1*1conv也能用group的话那对模型压缩和速度都有好处,但是不利于精度,因为cross channel的很多信息丢了,那怎么能提取cross channel的一些特征,作者就提出了shuffle的概念[10],比如原来有两组,第一组是1234通道,第二组是5678,那么重排后第一组是1526,第二组是3748,这样就还能拿到这些信息。

12 DenseNet

resnet的的基础模块不同,虽然也用了bottleneck的结构,densnet[11]concat代替element add,因此输出的通道数量都比输入要多一些,论文中这个值一般是32。未优化下Densenet训练时特别耗显存.



13 Dual PathNetwork

Dual Path Network[12]结合了ResNetDenseNet.一个path照着ResNet把不同分支的特征element add,另外一个path照着ResNet把不同分支的特征concat.因此叫双路网络。



14 SENet

SENet[13]设计了一个gating(reweighting)模块让网络可以自学习各个channel的权重。下图展示的是将SE block加入到了ResNet UnitA中的情况。大体的意思还是比较好理解。


这篇关于深度卷机网络(Deep CNNs)的GFLOPS与参数量计算的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1047364

相关文章

史上最全nginx详细参数配置

《史上最全nginx详细参数配置》Nginx是一个轻量级高性能的HTTP和反向代理服务器,同时也是一个通用代理服务器(TCP/UDP/IMAP/POP3/SMTP),最初由俄罗斯人IgorSyso... 目录基本命令默认配置搭建站点根据文件类型设置过期时间禁止文件缓存防盗链静态文件压缩指定定错误页面跨域问题

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

SpringBoot请求参数接收控制指南分享

《SpringBoot请求参数接收控制指南分享》:本文主要介绍SpringBoot请求参数接收控制指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring Boot 请求参数接收控制指南1. 概述2. 有注解时参数接收方式对比3. 无注解时接收参数默认位置

Python使用getopt处理命令行参数示例解析(最佳实践)

《Python使用getopt处理命令行参数示例解析(最佳实践)》getopt模块是Python标准库中一个简单但强大的命令行参数处理工具,它特别适合那些需要快速实现基本命令行参数解析的场景,或者需要... 目录为什么需要处理命令行参数?getopt模块基础实际应用示例与其他参数处理方式的比较常见问http

Python中__init__方法使用的深度解析

《Python中__init__方法使用的深度解析》在Python的面向对象编程(OOP)体系中,__init__方法如同建造房屋时的奠基仪式——它定义了对象诞生时的初始状态,下面我们就来深入了解下_... 目录一、__init__的基因图谱二、初始化过程的魔法时刻继承链中的初始化顺序self参数的奥秘默认

Linux内核参数配置与验证详细指南

《Linux内核参数配置与验证详细指南》在Linux系统运维和性能优化中,内核参数(sysctl)的配置至关重要,本文主要来聊聊如何配置与验证这些Linux内核参数,希望对大家有一定的帮助... 目录1. 引言2. 内核参数的作用3. 如何设置内核参数3.1 临时设置(重启失效)3.2 永久设置(重启仍生效

SpringMVC获取请求参数的方法

《SpringMVC获取请求参数的方法》:本文主要介绍SpringMVC获取请求参数的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下... 目录1、通过ServletAPI获取2、通过控制器方法的形参获取请求参数3、@RequestParam4、@

Spring Boot项目部署命令java -jar的各种参数及作用详解

《SpringBoot项目部署命令java-jar的各种参数及作用详解》:本文主要介绍SpringBoot项目部署命令java-jar的各种参数及作用的相关资料,包括设置内存大小、垃圾回收... 目录前言一、基础命令结构二、常见的 Java 命令参数1. 设置内存大小2. 配置垃圾回收器3. 配置线程栈大小

SpringBoot利用@Validated注解优雅实现参数校验

《SpringBoot利用@Validated注解优雅实现参数校验》在开发Web应用时,用户输入的合法性校验是保障系统稳定性的基础,​SpringBoot的@Validated注解提供了一种更优雅的解... 目录​一、为什么需要参数校验二、Validated 的核心用法​1. 基础校验2. php分组校验3

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子