图像卷积及其计算(特征图尺寸、参数量、计算量)

图像卷积及其计算(特征图尺寸、参数量、计算量)

卷积前后特征图尺寸的计算

定义参数如下:

  • 输入特征图尺寸: W×WW×WW×W
  • 卷积核尺寸: F×FF×FF×F
  • 步长: SSS
  • 填充的像素数:PPP

则有输出特征图尺寸为 N×NN×NN×N
N=(W−F+2P)/S+1N = (W − F + 2P )/S+1 N=(WF+2P)/S+1

参数量的计算

卷积层的参数量

卷积的参数量即卷积核的参数量,设我们有如下参数:

  • 卷积核尺寸:KKK
  • 前一层的通道数:CinC_{in}Cin
  • 当前层的卷积核个数:CoutC_{out}Cout

单个卷积核的参数量:
Paramskernel=Cin×K2Params_{kernel}=C_{in}\times K^2 Paramskernel=Cin×K2
CoutC_{out}Cout 个卷积核,故:
Paramsconv=K2×Cin×CoutParams_{conv} = K^2\times C_{in}\times C_{out} Paramsconv=K2×Cin×Cout

全连接层的参数量

上面已经说过卷积层的参数量计算方法了,那如何计算全连接层的参数量?其实和卷积层参数量的计算方法是一样的。我们在进行全连接层的计算之前需要将最后一层卷积得到的特征图展开为一维的向量,即 Din=H×W×CD_{in}=H\times W\times CDin=H×W×C ,其中 H,W,CH,\ W,\ CH, W, C 是最后一层卷积输出特征图的高宽和通道数,DinD_{in }Din 即为本全连接层的输入特征维度,又设 DoutD_{out}Dout 为输出特征维度,则有:
ParamsFC=Din×DoutParams_{FC}=D_{in}\times D_{out} ParamsFC=Din×Dout
可以理解为是一个卷积层,我们就是用4096个 7×7×5127\times 7\times 5127×7×512 的卷积核去做卷积。

验证

我们用VGG16, PyTorch来验证我们的公式是否正确。

VGG16的第一个卷积层输入为原图像 224×224×3224\times 224\times 3224×224×3,卷积核个数为 646464,尺寸为3,则根据公式,我们有VGG16第一个卷积层的参数量:
Paramsconv=K2×Cin×Cout=32×3×64=1728Params_{conv} = K^2\times C_{in}\times C_{out}= 3^2\times 3\times 64=1728 Paramsconv=K2×Cin×Cout=32×3×64=1728
VGG16第一个全连接层的输入维度数为最后一张特征图的尺寸拉直:Din=7×7×512D_{in}=7\times 7\times 512Din=7×7×512,输出维度数为4046,则:
ParamsFC=Din×Dout=4096×4096=102760448Params_{FC}=D_{in}\times D_{out}=4096\times 4096=102760448 ParamsFC=Din×Dout=4096×4096=102760448
手动计算好之后我们用PyTorch来打印输出以下看一下:

import torch
from torchvision.models import resnet50, vgg16
import numpy as npmodel = vgg16()
for name, parameters in model.named_parameters():print(name, ':', np.prod(parameters.size()))

输出:

features.0.weight : 1728
features.0.bias : 64
...
classifier.0.weight : 102760448
classifier.0.bias : 4096

计算正确。

卷积的计算量

参考:FLOPs、FLOPS、Params的含义及PyTorch中的计算方法

MAC

MAC:Multiply Accumulate,乘加运算。乘积累加运算(英语:Multiply Accumulate, MAC)是在数字信号处理器或一些微处理器中的特殊运算。实现此运算操作的硬件电路单元,被称为“乘数累加器”。这种运算的操作,是将乘法的乘积结果和累加器的值相加,再存入累加器:
a←a+b×ca\leftarrow a+b\times c aa+b×c
使用MAC可以将原本需要的两个指令操作减少到一个指令操作,从而提高运算效率。

计算量FLOPs的计算

以下不考虑激活函数的计算量。

卷积层

(2×Ci×K2−1)×H×W×C0(2\times C_i\times K^2-1)\times H\times W\times C_0(2×Ci×K21)×H×W×C0

CiC_iCi=输入通道数, KKK=卷积核尺寸,H,WH,WH,W=输出特征图空间尺寸,CoC_oCo=输出通道数。

一个MAC算两个个浮点运算,所以在最前面×2\times 2×2。不考虑bias时有−1-11,有bias时没有−1-11。由于考虑的一般是模型推理时的计算量,所以上述公式是针对一个输入样本的情况,即batch size=1。

理解上面这个公式分两步,括号内是第一步,计算出输出特征图的一个pixel的计算量,然后再乘以 H×W×CoH\times W\times C_oH×W×Co 拓展到整个输出特征图。

括号内的部分又可以分为两步,(2⋅Ci⋅K2−1)=(Ci⋅K2)+(Ci⋅K2−1)(2\cdot C_i\cdot K^2-1)=(C_i\cdot K^2)+(C_i\cdot K^2-1)(2CiK21)=(CiK2)+(CiK21)。第一项是乘法运算数,第二项是加法运算数,因为 nnn 个数相加,要加 n−1n-1n1 次,所以不考虑bias,会有一个−1-11,如果考虑bias,刚好中和掉,括号内变为 2⋅Ci⋅K22\cdot C_i\cdot K^22CiK2

全连接层

全连接层: (2×I−1)×O(2\times I-1)\times O(2×I1)×O

III=输入层神经元个数 ,OOO=输出层神经元个数。

还是因为一个MAC算两个个浮点运算,所以在最前面×2\times 2×2。同样不考虑bias时有−1-11,有bias时没有−1-11。分析同理,括号内是一个输出神经元的计算量,拓展到OOO了输出神经元。

可以用 thop 库来验证。

Ref

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

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

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

相关文章

图解自监督学习(CV)

图解自监督学习(CV) 译自:https://amitness.com/2020/02/illustrated-self-supervised-learning/ 作者:Amit Chaudhary 注:译者在某些地方对原文的表述做了调整,使其适合汉语的阅读习惯,并在…

机器学习中的归纳偏置

机器学习中的归纳偏置 带着偏见看世界,否则你根本没有看待世界的方式。 本文主要参考整理自知乎问题:如何理解Inductive bias? No-Free-Lunch(NLF)定理指出学习是不可能的,除非有先验知识。通常情况下&…

编译型与解释型、动态语言与静态语言、强类型语言与弱类型语言概念辨析

编译型与解释型、动态语言与静态语言、强类型语言与弱类型语言概念辨析 转自:https://blog.csdn.net/u010533843/article/details/76215487 编译型和解释型 我们先看看编译型,其实它和汇编语言是一样的:也是有一个负责翻译的程序来对我们的…

Linux环境变量详解

Linux环境变量详解 环境变量是操作系统环境设置的变量,适用于整个系统的用户进程。 环境变量分类 按照权限分类 系统级:系统级的环境变量是每个登录到系统的用户都要读取的系统变量用户级:用户级的环境变量则是该用户使用系统时加载的环境…

[分布式训练] 单机多卡的正确打开方式:PyTorch

[分布式训练] 单机多卡的正确打开方式:PyTorch 转自:https://fyubang.com/2019/07/23/distributed-training3/ PyTorch的数据并行相对于TensorFlow而言,要简单的多,主要分成两个API: DataParallel(DP&am…

上学期C语言复习

C语言&#xff1a;面向过程例&#xff1a;完成两个单元内容的交换 &#xff1a; #include<stdio.h> //定义一个完成两个数据交换的函数 //void swap(int m,int n) void swap(int*m,int* n) { int temp;//临时单元 temp*m; *m*n; *ntemp; } int main() {int a5,b10; print…

[分布式训练] 单机多卡的正确打开方式:Horovod

[分布式训练] 单机多卡的正确打开方式&#xff1a;Horovod 转自&#xff1a;https://fyubang.com/2019/07/26/distributed-training4/ 讲完了单机多卡的分布式训练的理论、TensorFlow和PyTorch分别的实现后&#xff0c;今天瓦砾讲一个强大的第三方插件&#xff1a;Horovod。 …

【c语言数据结构笔记】1.2 数据结构

1.2数据结构 数据元素并独立 结构实体关系 形式定义&#xff08;D&#xff0c;S&#xff09; 其中D是数据元素的有限集&#xff0c;S是D上关系的有限集 eg&#xff1a;12位数&#xff1a;132423451233 分成三组四位数 次序关系<a1,a2><a2,a3> 遵守次序关系 eg&…

使用Apex进行混合精度训练

使用Apex进行混合精度训练 转自&#xff1a;https://fyubang.com/2019/08/26/fp16/ 你想获得双倍训练速度的快感吗&#xff1f; 你想让你的显存空间瞬间翻倍吗&#xff1f; 如果我告诉你只需要三行代码即可实现&#xff0c;你信不&#xff1f; 在这篇博客里&#xff0c;瓦砾…

【数据结构1.3笔记】研究内容

1.3研究内容 数据结构&#xff08;D&#xff0c;S&#xff09; {逻辑结构&#xff1a; {物理结构&#xff08;存储结构&#xff09; {数据的运算 1.逻辑结构 1 集合&#xff1a;集合&#xff0c;没有逻辑关系 2 线性结构 “一对一” 3树形结构 层次关系 4图形结构 练习&…

Linux下的LD_PRELOAD环境变量与库打桩

Linux下的LD_PRELOAD环境变量与库打桩 LD_PRELOAD是Linux系统的一个环境变量&#xff0c;它可以影响程序的运行时的链接&#xff08;Runtime linker&#xff09;&#xff0c;它允许你定义在程序运行前优先加载的动态链接库&#xff0c;一方面&#xff0c;我们可以以此功能来使…

2019年蓝桥杯第一题

第一题 标题&#xff1a;组队&#xff08;本题总分&#xff1a;5 分&#xff09; 作为篮球队教练&#xff0c;你需要从以下名单中选出 1 号位至 5 号位各一名球员&#xff0c; 组成球队的首发阵容。 每位球员担任 1 号位至 5 号位时的评分如下表所示。请你计算首发阵容 1 号位…

深度学习编译:MLIR初步

深度学习编译MLIR初步 深度模型的推理引擎 目前深度模型的推理引擎按照实现方式大体分为两类&#xff1a;解释型推理引擎和编译型推理引擎。 解释型推理引擎 一般包含模型解析器&#xff0c;模型解释器&#xff0c;模型优化器。 模型解析器负责读取和解析模型文件&#xff…

深入浅出LLVM

深入浅出LLVM 转自&#xff1a;https://www.jianshu.com/p/1367dad95445 什么是LLVM&#xff1f; LLVM项目是模块化、可重用的编译器以及工具链技术的集合。 美国计算机协会 (ACM) 将其2012 年软件系统奖项颁给了LLVM&#xff0c;之前曾经获得此奖项的软件和技术包括:Java、A…

蓝桥杯真题训练 2019.2题

2019第二题 标题&#xff1a;年号字串&#xff08;本题总分&#xff1a;5 分&#xff09; 小明用字母 A 对应数字 1&#xff0c;B 对应 2&#xff0c;以此类推&#xff0c;用 Z 对应 26。对于 27 以上的数字&#xff0c;小明用两位或更长位的字符串来对应&#xff0c;例如 AA…

一分钟系列:什么是虚拟内存?

一分钟系列&#xff1a;什么是虚拟内存&#xff1f; 转自&#xff1a;https://mp.weixin.qq.com/s/opMgZrXV-lfgOWrNUMKweg 注&#xff1a;一分钟系列的篇幅都不长&#xff0c;适合吃饭蹲坑、地铁公交上食用&#xff5e; 内存对于用户来说就是一个字节数组&#xff0c;我们可…

蓝桥杯真题训练 2019.3题

标题&#xff1a;数列求值 &#xff08;本题总分&#xff1a;10 分&#xff09;### 给定数列 1, 1, 1, 3, 5, 9, 17, …&#xff0c;从第 4 项开始&#xff0c;每项都是前 3 项的和。求 第 20190324 项的最后 4 位数字。 【答案提交】 这是一道结果填空的题&#xff0c;你只需…

11-Kafka

1 Kafka Kafka是一个分布式流式数据平台&#xff0c;它具有三个关键特性 Message System: Pub-Sub消息系统Availability & Reliability&#xff1a;以容错及持久化的方式存储数据记录流Scalable & Real time 1.1 Kafka架构体系 Kafka系统中存在5个关键组件 Producer…

虚拟内存精粹

虚拟内存精粹 标题&#xff1a;虚拟内存精粹 作者&#xff1a;潘建锋 原文&#xff1a;HTTPS://strikefreedom.top/memory-management–virtual-memory 导言 虚拟内存是当今计算机系统中最重要的抽象概念之一&#xff0c;它的提出是为了更加有效地管理内存并且降低内存出错的概…

蓝桥杯真题训练 2019.4题

标题&#xff1a; 数的分解&#xff08;本题总分&#xff1a;10 分&#xff09; 【问题描述】 把 2019 分解成 3 个各不相同的正整数之和&#xff0c;并且要求每个正整数都不包 含数字 2 和 4&#xff0c;一共有多少种不同的分解方法&#xff1f; 注意交换 3 个整数的顺序被视…