计算CNN的模型的算力FLOPS

YOLOv3中的有一输入日志显示了BFLOPS,代表了这一卷积层的算力具体有多少。下面是我输入的前面38层的日志;

layer filters size         input                output 
0 conv 32 3 x 3 / 1 416 x 416 x 3 -> 416 x 416 x 32 0.299 BFLOPs 
1 conv 64 3 x 3 / 2 416 x 416 x 32 -> 208 x 208 x 64 1.595 BFLOPs 
2 conv 32 1 x 1 / 1 208 x 208 x 64 -> 208 x 208 x 32 0.177 BFLOPs 
3 conv 64 3 x 3 / 1 208 x 208 x 32 -> 208 x 208 x 64 1.595 BFLOPs 
4 res 1 208 x 208 x 64 -> 208 x 208 x 64 
5 conv 128 3 x 3 / 2 208 x 208 x 64 -> 104 x 104 x 128 1.595 BFLOPs 
6 conv 64 1 x 1 / 1 104 x 104 x 128 -> 104 x 104 x 64 0.177 BFLOPs 
7 conv 128 3 x 3 / 1 104 x 104 x 64 -> 104 x 104 x 128 1.595 BFLOPs 
8 res 5 104 x 104 x 128 -> 104 x 104 x 128 
9 conv 64 1 x 1 / 1 104 x 104 x 128 -> 104 x 104 x 64 0.177 BFLOPs 
10 conv 128 3 x 3 / 1 104 x 104 x 64 -> 104 x 104 x 128 1.595 BFLOPs 
11 res 8 104 x 104 x 128 -> 104 x 104 x 128 
12 conv 256 3 x 3 / 2 104 x 104 x 128 -> 52 x 52 x 256 1.595 BFLOPs 
13 conv 128 1 x 1 / 1 52 x 52 x 256 -> 52 x 52 x 128 0.177 BFLOPs 
14 conv 256 3 x 3 / 1 52 x 52 x 128 -> 52 x 52 x 256 1.595 BFLOPs 
15 res 12 52 x 52 x 256 -> 52 x 52 x 256 
16 conv 128 1 x 1 / 1 52 x 52 x 256 -> 52 x 52 x 128 0.177 BFLOPs 
17 conv 256 3 x 3 / 1 52 x 52 x 128 -> 52 x 52 x 256 1.595 BFLOPs 
18 res 15 52 x 52 x 256 -> 52 x 52 x 256 
19 conv 128 1 x 1 / 1 52 x 52 x 256 -> 52 x 52 x 128 0.177 BFLOPs 
20 conv 256 3 x 3 / 1 52 x 52 x 128 -> 52 x 52 x 256 1.595 BFLOPs 
21 res 18 52 x 52 x 256 -> 52 x 52 x 256 
22 conv 128 1 x 1 / 1 52 x 52 x 256 -> 52 x 52 x 128 0.177 BFLOPs 
23 conv 256 3 x 3 / 1 52 x 52 x 128 -> 52 x 52 x 256 1.595 BFLOPs 
24 res 21 52 x 52 x 256 -> 52 x 52 x 256 
25 conv 128 1 x 1 / 1 52 x 52 x 256 -> 52 x 52 x 128 0.177 BFLOPs 
26 conv 256 3 x 3 / 1 52 x 52 x 128 -> 52 x 52 x 256 1.595 BFLOPs 
27 res 24 52 x 52 x 256 -> 52 x 52 x 256 
28 conv 128 1 x 1 / 1 52 x 52 x 256 -> 52 x 52 x 128 0.177 BFLOPs 
29 conv 256 3 x 3 / 1 52 x 52 x 128 -> 52 x 52 x 256 1.595 BFLOPs 
30 res 27 52 x 52 x 256 -> 52 x 52 x 256 
31 conv 128 1 x 1 / 1 52 x 52 x 256 -> 52 x 52 x 128 0.177 BFLOPs 
32 conv 256 3 x 3 / 1 52 x 52 x 128 -> 52 x 52 x 256 1.595 BFLOPs 
33 res 30 52 x 52 x 256 -> 52 x 52 x 256 
34 conv 128 1 x 1 / 1 52 x 52 x 256 -> 52 x 52 x 128 0.177 BFLOPs 
35 conv 256 3 x 3 / 1 52 x 52 x 128 -> 52 x 52 x 256 1.595 BFLOPs 
36 res 33 52 x 52 x 256 -> 52 x 52 x 256 
37 conv 512 3 x 3 / 2 52 x 52 x 256 -> 26 x 26 x 512 1.595 BFLOPs 
38 conv 256 1 x 1 / 1 26 x 26 x 512 -> 26 x 26 x 256 0.177 BFLOPs 
根据darkent代码中给出的计算公式(2.0 * l.n * l.size*l.size*l.c/l.groups * l.out_h*l.out_w)/1000000000.其中n属于当前层输出的卷积核的个数,size为卷积核的尺寸大小,c为当前网络层的通道数即输入卷积核的大小,groups一般默认为1,out_h和out_w为输出feature map的大小,因此第一层卷积的浮点数运算次数为2.0*32*3*3*3/1*416*416/1000000000.=0.299BFLOP依次计算以下的卷积层可以得出上图中的结果。

这里的BFLOPs表示每次卷积有多少次十亿次的浮点数运算,将各个层的BFLOPs加起来就是表示该模型的运算复杂度,侧面反映出了该模型的运算速度。

解释下上述公式各个的意义

2.0 表示 一次乘法和一次加法浮点运算

l.n表示 卷积核数目

l.size表示 卷积核大小(size*size)

l.c表示 待卷积图像的个数

l.out_h和l.out_w表示卷积后图像的大小,也等于完成某个卷积核扫描完该图像所需要卷积次数。 它取决于输入图像大小,卷积核大小,stride,以及pad等因素,其计算公式如下:(l.h + 2*l.pad - l.size) / l.stride + 1;   (l.w + 2*l.pad - l.size) / l.stride + 1
 

PS:网上查找到的关于卷积层的参数及FLOPS的方法有很多种,与darknet中的计算方法不太一样。

按照上述的计算方法,计算了openpose算法中特征提取层的算力,包括VGG19的前面10层和openpose自己构建的两层

每一层的BFLOPS按照上述计算方式如下图所示

接下来要计算VGG16、resnet50等典型网络结构的BFLOPS

通过一上午的努力,终于按照计算公式整理了各个经典网络的结构的FLOPs,在整理过程中重新理解了下卷积层参数的计算方法和浮点数的运算方法

参考VGG16学习笔记_dta0502的博客-CSDN博客_vgg16原文。如下图所示;

图片中最后一列的参数的计算方法为(输入卷积核的大小+1)*卷积核个数。比如第一层1792= (3*3*3+1)*64,这里的卷积核个数为当前层的卷积核的通道数。要计算FLOPs的话需要再乘以当前层的输出,但是不知道为什么darknet给出的公式需要乘以2。如果还是不明白可以参考链接卷积神经网络中的参数计算 - hejunlin - 博客园

以下是resnet50的网络的机构并参考计算了BFLOPs

  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值