估算卷积层与反卷积层运算量

2020 年 4 月 3 日 CVer

点击上方“CVer”,选择加"星标"或“置顶”

重磅干货,第一时间送达

本文转载自:GiantPandaCV

本文首发于知乎 https://zhuanlan.zhihu.com/p/65248401

对于炼丹师来说,针对任务调整网络结构或者在做模型精简的时候,都会去考虑模型的运算量的大概值,虽然这个只是一个间接参考值,网络真正的运行速度还要考虑其他的因素(具体解释可以参考shufflenet v2这篇文章的解读)。

那么对于给定一个卷积神经网络的模型定义,该如何估算其浮点数运算量。对卷积神经网络来说,卷积层的运算量是占网络总运算量的大头,而对于一些像素级别任务,反卷积层也要算上。

网上有很多介绍如何计算卷积网络运算量的文章,基本都是介绍卷积还有全连接等一些常用的层是如何计算的,但很少有介绍反卷积层的运算量如何计算。

本文主要内容是介绍卷积、反卷积、分组卷积和分组反卷积的运算量分别是如何估算出来的。

本文相关代码,计算MXNet网络运算量的小工具:

Python版本:https://github.com/Ldpe2G/DeepLearningForFun/tree/master/MXNet-Python/CalculateFlopsTool

Scala版本:https://github.com/Ldpe2G/DeepLearningForFun/tree/master/Mxnet-Scala/UsefulTools

普通卷积

普通卷积层的运算量很多文章都已经讲过如何计算了,这里也重复讲下,为后面介绍反卷积的运算量做铺垫。卷积的运算一般的实现就是转化为矩阵乘法运算,首先来看一下卷积运算的简单的示意图:

首先左上角定义了输入和输出的feature map的形状,假设卷积核大小是 ,所以权值的形状就是

然后一般来说实现卷积的前向是通过首先对输入的feature map应用im2col操作,从 形状的矩阵,转换成形状是 的矩阵,接着与权值相乘,就得到右边的输出。所以卷积前向的运算量是:

当然卷积运算的时候除了乘法还有加法,而我这了只算了乘法的次数。

如果加上加偏置的计算,运算量就是:

下面这个仓库的代码在计算运算量的时候也是只算了乘法: https://github.com/albanie/convnet-burden

卷积的反向和接下来要介绍和反卷积的前向是对应的,这里简单提一下卷积的反向过程,求输入的梯度的时候是把权值转置,然后与输出的梯度相乘就得到中间结果,然后再做一个col2im操作把中间结果回填到输入梯度矩阵的对应位置上。

普通反卷积

接着我们来看下普通反卷积的运算量的计算方法,首先看一下反卷积前向和后向运算过程的示意图:

左上角也是定义了反卷积的输入与输出的feature map大小,这里反卷积的权值的形状与卷积有点不同,是 ,这是因为反卷积的前向和后向操作分别是对应卷积的后向和前向,也就是刚好反过来的。

然后我们直接看反卷积的前向操作,和卷积的后向操作对应,权值做转置与输入feature map做一个乘法,这里可以看成是一个 的卷积,输出通道数是 ,然后的到中间结果,然后再做一个col2im的操作回填到输出feature map对应的位置上。所以反卷积的运算量如下:

同样 部分也是只考虑了乘法次数,还有后面的col2im回填累加其实也会占据运行时间的,但是这里没有加上这个加法次数的时间。

加上偏置的话则是:

所以计算反卷积的运算量是需要知道输入与输出feature map大小的。

分组卷积

分组卷积的运算量其实就是直接把卷积的运算量除以组数,比如分为g组,继续沿用上面卷积的运算量公式的话,那么分组卷积的运算量为:

加上偏置的话就是:

具体是怎么算出来的呢,直接看下面的示意图就应该很清晰了:

左上角定义了输入与输出feature map的大小还有卷积的分组数,则根据分组卷积的定义,输出feature map的通道 被分成了 组,每组里面的 个feature map链接输入的对应索引的 个通道的feature map。

所以看上图,在把输入作im2col操作的时候也是按组来做的,每组 feature map 都会生成一个 的矩阵,然后与对应的权值做乘法,就是图中的相同颜色部分,每组做完乘法就得到了输出feature map,如果还有偏置则是最后再加上,所以分组卷积的运算量就可以求到的了。

分组反卷积

来看下反卷积,有了分组卷积的铺垫,分组反卷积也不难求,分组反卷积的FP同样也是对应分组卷积的BP:

同样的,左上角定义了分组反卷积的输入和输出feature map大小,分组数为 。同样的输出feature map的通道 被分成了 组,每组里面的 个feature map链接输入的对应索引的 个通道的feature map。

然后在前向过程中,对于每组的计算,权值首先需要转置一下,得到 的权值矩阵然后和输入对应的组数做乘法,然后得到输出对应的组的中间结果,然后每一组的中间结果再通过 col2im 回填到输出 feature map 对应的组的位置。

所以分组反卷积的运算量如下:

如果有偏置的话就是:

如果想更加详细的了解代码上的实现,读者可以参考MXNet中反卷积权值shape的推断部分,还有反卷积前向部分代码,或者一些推理框架,比如NCNN和MNN的实现。

相关资料

  • [1] https://www.zhihu.com/question/328891283/answer/717113611
  • [2] https://www.zhihu.com/question/48279880/answer/838063090


重磅!CVer-论文写作与投稿 交流群已成立


扫码添加CVer助手,可申请加入CVer-论文写作与投稿 微信交流群,目前已满1100+人,旨在交流顶会(CVPR/ICCV/ECCV等)、顶刊(IJCV/TPAMI等)、SCI、EI等写作与投稿事宜。


同时也可申请加入CVer大群和细分方向技术群,细分方向已涵盖:目标检测、图像分割、目标跟踪、人脸检测&识别、OCR、姿态估计、超分辨率、SLAM、医疗影像、Re-ID、GAN、NAS、深度估计、自动驾驶、强化学习、车道线检测、模型剪枝&压缩、去噪、去雾、去雨、风格迁移、遥感图像、行为识别、视频理解、图像融合、图像检索、论文投稿&交流等群。


一定要备注:研究方向+地点+学校/公司+昵称(如论文写作+上海+上交+卡卡),根据格式备注,可更快被通过且邀请进群

▲长按加微信群


▲长按关注CVer公众号

麻烦给我一个在看!

登录查看更多
0

相关内容

在数学(特别是功能分析)中,卷积是对两个函数(f和g)的数学运算,产生三个函数,表示第一个函数的形状如何被另一个函数修改。 卷积一词既指结果函数,又指计算结果的过程。 它定义为两个函数的乘积在一个函数反转和移位后的积分。 并针对所有shift值评估积分,从而生成卷积函数。
【IJCAJ 2020】多通道神经网络 Multi-Channel Graph Neural Networks
专知会员服务
26+阅读 · 2020年7月19日
自回归模型:PixelCNN
专知会员服务
27+阅读 · 2020年3月21日
【Nature论文】深度网络中的梯度下降复杂度控制
专知会员服务
40+阅读 · 2020年3月9日
【ICLR-2020】网络反卷积,NETWORK DECONVOLUTION
专知会员服务
39+阅读 · 2020年2月21日
2020图机器学习GNN的四大研究趋势,21篇论文下载
专知会员服务
136+阅读 · 2020年2月10日
一文读懂图卷积GCN
计算机视觉life
21+阅读 · 2019年12月21日
卷积神经网络四种卷积类型
炼数成金订阅号
18+阅读 · 2019年4月16日
万字长文带你看尽深度学习中的各种卷积网络
AI科技评论
11+阅读 · 2019年2月19日
什么是深度学习的卷积?
论智
18+阅读 · 2018年8月14日
【CNN】一文读懂卷积神经网络CNN
产业智能官
18+阅读 · 2018年1月2日
深度学习中的「卷积层」如何深入理解?
深度学习世界
6+阅读 · 2017年11月30日
徒手实现CNN:综述论文详解卷积网络的数学本质
机器之心
25+阅读 · 2017年11月19日
CNN之卷积层
机器学习算法与Python学习
8+阅读 · 2017年7月2日
精选 | 一张动图看懂卷积神经网络之卷积计算层
七月在线实验室
26+阅读 · 2017年6月21日
Graph Analysis and Graph Pooling in the Spatial Domain
Arxiv
3+阅读 · 2019年3月15日
CoCoNet: A Collaborative Convolutional Network
Arxiv
6+阅读 · 2019年1月28日
Arxiv
7+阅读 · 2018年1月10日
VIP会员
相关资讯
一文读懂图卷积GCN
计算机视觉life
21+阅读 · 2019年12月21日
卷积神经网络四种卷积类型
炼数成金订阅号
18+阅读 · 2019年4月16日
万字长文带你看尽深度学习中的各种卷积网络
AI科技评论
11+阅读 · 2019年2月19日
什么是深度学习的卷积?
论智
18+阅读 · 2018年8月14日
【CNN】一文读懂卷积神经网络CNN
产业智能官
18+阅读 · 2018年1月2日
深度学习中的「卷积层」如何深入理解?
深度学习世界
6+阅读 · 2017年11月30日
徒手实现CNN:综述论文详解卷积网络的数学本质
机器之心
25+阅读 · 2017年11月19日
CNN之卷积层
机器学习算法与Python学习
8+阅读 · 2017年7月2日
精选 | 一张动图看懂卷积神经网络之卷积计算层
七月在线实验室
26+阅读 · 2017年6月21日
Top
微信扫码咨询专知VIP会员