圖像卷積及其計算(特征圖尺寸、參數量、計算量)

圖像卷積及其計算(特征圖尺寸、參數量、計算量)

卷積前后特征圖尺寸的計算

定義參數如下:

  • 輸入特征圖尺寸: 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=(W?F+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?×K2?1)×H×W×C0?

CiC_iCi?=輸入通道數, KKK=卷積核尺寸,H,WH,WH,W=輸出特征圖空間尺寸,CoC_oCo?=輸出通道數。

一個MAC算兩個個浮點運算,所以在最前面×2\times 2×2。不考慮bias時有?1-1?1,有bias時沒有?1-1?1。由于考慮的一般是模型推理時的計算量,所以上述公式是針對一個輸入樣本的情況,即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)(2?Ci??K2?1)=(Ci??K2)+(Ci??K2?1)。第一項是乘法運算數,第二項是加法運算數,因為 nnn 個數相加,要加 n?1n-1n?1 次,所以不考慮bias,會有一個?1-1?1,如果考慮bias,剛好中和掉,括號內變為 2?Ci?K22\cdot C_i\cdot K^22?Ci??K2

全連接層

全連接層: (2×I?1)×O(2\times I-1)\times O(2×I?1)×O

III=輸入層神經元個數 ,OOO=輸出層神經元個數。

還是因為一個MAC算兩個個浮點運算,所以在最前面×2\times 2×2。同樣不考慮bias時有?1-1?1,有bias時沒有?1-1?1。分析同理,括號內是一個輸出神經元的計算量,拓展到OOO了輸出神經元。

可以用 thop 庫來驗證。

Ref

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/532708.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/532708.shtml
英文地址,請注明出處:http://en.pswp.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 個整數的順序被視…