如何计算模型的复杂度(参数量,FLOPs)

参考

如何计算神经网络模型的复杂度
深度学习卷积、全连接层、深度可分离层参数量和FLOPs计算公式

概念

  1. Params:模型的参数量。(空间复杂度
  2. FLOPs:FLoating point Operations,前向推理的计算量。(时间复杂度
  3. MAC:Memory Access Cost。基本上看每个计算输出结果 C o u t × H o u t × W o u t C_{out} \times H_{out} \times W_{out} Cout×Hout×Wout 相加的总和。
  4. MACC(MADD):multiply-accumulate operations:先乘起来再加起来的运算次数。 也就是 乘加 看做一次运算。
    所以 1个 MACC = 2个 FLOPs。
  5. 内存量

H i n H_{in} Hin: 输入的 height
W i n W_{in} Win: 输入的 width
H o u t H_{out} Hout: 输出的 height
W o u t W_{out} Wout: 输入的 width
K K K: 卷积核size
C i n C_{in} Cin: 输入的channel 数
C o u t C_{out} Cout: 输出的 channel数

参数量计算

全连接层

在这里插入图片描述

卷积层

普通卷积: 输入尺寸 C i ∗ H i ∗ W i C_i * H_i * W_i CiHiWi, 卷积核的大小为 K ∗ K K*K KK, 输出的尺寸大小为 C o ∗ H o ∗ W o C_o * H_o * W_o CoHoWo.

  • 不考虑 bias
    K 2 × C i × C o K^2 \times C_{i} \times C_{o} K2×Ci×Co
  • 考虑bias
    ( K 2 × C i + 1 ) × C o (K^2 \times C_{i} + 1) \times C_{o} (K2×Ci+1)×Co

池化层

对于池化层而言,常用的Max-pooling,Avg-pooling等是不存在参数量的。

batch norm

每个 batch 减均值,除方差。
再根据参数 α \alpha α, β \beta β 做缩放
在训练时计算的均值方差是直接计算,在预测时是用 running mean,running var.
在这里插入图片描述
所以参数量是?2HW*C, 错了, 是
2 × C i 2 \times C_{i} 2×Ci

激活函数

无参数

FLOPs

卷积层

  • 不考虑 bias
    ( 2 × ( K 2 × C i ) − 1 ) × ( C o × H o × W o ) (2\times (K^2 \times C_{i} ) -1 ) \times (C_{o} \times H_{o} \times W_{o}) (2×(K2×Ci)1)×(Co×Ho×Wo)

先计算输出的feature中一个元素需要的计算量。 ( K 2 × C i ) (K^2 \times C_{i} ) (K2×Ci) 表示乘法次数, ( K 2 × C i ) − 1 (K^2 \times C_{i} ) -1 (K2×Ci)1 表示加法次数。

  • 考虑bias
    带bias 的计算(一部分是乘法,一部分是加法)
    2 × ( K 2 × C i ) × ( C o × H o × W o ) 2\times (K^2 \times C_{i} ) \times (C_{o} \times H_{o} \times W_{o}) 2×(K2×Ci)×(Co×Ho×Wo)

全连接层

输入维度 C i C_i Ci, 输出 C o C_o Co. 全连接层就理解为一个矩阵,矩阵行数,矩阵列数,如考虑bias,则先计算输出向量中一个元素需要多少计算量,首先要做 C i C_i Ci 次乘法,然后做 C i − 1 C_i -1 Ci1 次加法。若考虑 bias,则做的加法会多一次。

  • 不考虑 bias : ( 2 N i n − 1 ) N o u t (2N_{in}-1)N_{out} (2Nin1)Nout
    N i n N o u t N_{in}N_{out} NinNout 为乘法的运算量,
    ( N i n − 1 ) N o u t (N_{in} - 1)N_{out} (Nin1)Nout为加法的运算量
  • 考虑 bias : ( 2 N i n ) N o u t (2N_{in})N_{out} (2Nin)Nout

工具

torchinfo
mmdetection 工具代码

在这里插入图片描述

More

https://github.com/sovrasov/flops-counter.pytorch
https://github.com/open-mmlab/mmcv/blob/2.x/mmcv/cnn/utils/flops_counter.py

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/449641.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL中去除重复(十一)

MySQL中去除重复(十一) 一、相同的行 我们要去除相同行要使用DISTINCT关键字 SELECT DISTINCT 列名 FROM 表名; distinct 是针对查询的结果集合进行去重而不是针对某一行或者某一列。 二、查询中的行选择 用 WHERE 子句限制从查询返回的行。一个 WHERE 子句包含一个 必须满…

计算机网络——链路层(1)

计算机网络——链路层(1) 小程一言专栏链接: [link](http://t.csdnimg.cn/ZUTXU)前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家, [跳转到网站](https://www.captainbed.…

嵌入式中C 语言中的三块技术难点

C 语言在嵌入式学习中是必备的知识,甚至大部分操作系统都要围绕 C 语言进行,而其中有三块技术难点,几乎是公认级别的“难啃的硬骨头”。 今天就来带你将这三块硬骨头细细拆解开来,一定让你看明白了。 0x01 指针 指针是公认最难理…

智慧文旅:驱动文化与旅游融合发展的新动力

随着科技的快速发展和人们生活水平的提高,文化和旅游的融合成为了时代发展的必然趋势。智慧文旅作为这一趋势的引领者,通过先进的信息技术手段,推动文化与旅游的深度融合,为产业的发展注入新的活力。本文将深入探讨智慧文旅如何成…

element-ui icon 组件源码分享

今日简单分享 element-ui 源码中的 icon 组件,主要从以下两个方面来分享: 一、源码中 icon 设计思想是什么呢?主要从页面结构、数据、 icon 样式三个方面来分享。 1.1 源码中 icon 组件的页面结构,可以在 package 目录下找到 ico…

C++集群聊天服务器 数据模块+业务模块+CMake构建项目 笔记 (上)

跟着施磊老师做C项目,施磊老师_腾讯课堂 (qq.com) 本文在此篇博客的基础上继续实现数据模块和业务模块代码: C集群聊天服务器 网络模块业务模块CMake构建项目 笔记 (上)-CSDN博客https://blog.csdn.net/weixin_41987016/article…

Autonomous_Exploration_Development_Environment的PathFollower学习笔记

1.PathFollow算法简介: PathFollow算法是路径跟踪算法,是在得到由localplanner算法发布的无碰撞路径话题”/path”中的路径数据start_path(相对于车体坐标系的一系列路径点(101个点)),根据车体与目标之间的角度和距离,控制车辆的…

Ubuntu18.04安装Matlab流程笔记

提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 Ubuntu18.04 安装Matlab流程 下载安装包和破解文件安装Matlab注册并运行 下载安装包和破解文件 matlabR2019A源码 提取码:2ztb 下载的Linux matlab2018a文件夹内有三个文件: # 解压Matlab201…

【unity小技巧】unity3d环境带雾的昼夜系统变化

最终效果 文章目录 最终效果眩光素材眩光配置全局灯光配置天空盒配置天空盒资产配置天空盒,开启雾 代码控制天空盒 环境 雾 灯光昼夜交替变化参考完结 眩光素材 链接:https://pan.baidu.com/s/1qlFSJSju6ZjwCylwkh14eA?pwdveww 提取码:veww…

了解 Redis Channel:消息传递机制、发布与订阅,以及打造简易聊天室的实战应用。

文章目录 1. Redis Channel 是什么2. Redis-Cli 中演示使用3. 利用 Channel 打造一个简易的聊天室参考文献 1. Redis Channel 是什么 Redis Channel 是一种消息传递机制,允许发布者向特定频道发布消息,而订阅者则通过订阅频道实时接收消息。 Redis Cha…

N-142基于springboot,vue停车场管理系统

开发工具:IDEA 服务器:Tomcat9.0, jdk1.8 项目构建:maven 数据库:mysql5.7 项目采用前后端分离 前端技术:vueelementUI 服务端技术:springbootmybatis-plus 本项目分为普通用户和管理员…

OceanBase 4.2.2 GA 发布,全新特性快速预览!

在 2023 年度发布会上,OceanBase 沿着“一体化”产品战略思路,发布了一体化数据库的首个长期支持版本 4.2.1 LTS。作为 4.0 系列的首个 LTS 版本,该版本的定位是支撑客户关键业务稳定长久运行,我们非常认真的打磨了这个版本&#…