zoukankan      html  css  js  c++  java
  • 相关Flops的介绍

    2020CVPR文章已陆续发出,现在开始要跟进 成果(干掉张伟)。

     今天主要看的这篇GhostNet,但是我们并不是主要说的是GhostNet中的Ghost Module,后期在专门整理一篇,关于ShuffleNet V1/V2以及MobileNet V1/V2等轻量级网络的资料整理,我们今天主要分析的是里面做的指标分析FLOPs。关于这个FlOPs是啥,如何计算FLops,以及Flops是不是越大就越好。带着几个问题,我们一个一个来看。

    1. 首先关于FLOPs:

    有个很相似的词儿,叫FLOPS,字母 全大写,指每秒浮点运算次数,可以理解为计算的速度。是衡量硬件性能的一个指标。(硬件)这个不是我们深度学习里面说的运算量,我们说的Flops是指s小写,指浮点运算数,理解为计算量。可以用来衡量算法/模型的复杂度。(模型) 在论文中常用GFLOPs(1 GFLOPs = 10^9 FLOPs)。

    Flops最早是于2017年,ICIR收录了NVIDIA发表的一篇论文,在这篇论文的附录里,NVIDIA详细的讲解了一下FLOPs的计算。PRUNING CONVOLUTIONAL NEURAL NETWORKS FOR RESOURCE EFFICIENT INFERENCE

    2. 如何计算FLops

    其中就是指计算量的大小,表示FLOPs。对于卷积层而言,FLOPs的计算公式如下:

    egin{equation}
    mathrm{FLOPs}=2 H Wleft(C_{i n} K^{2}+1 ight) C_{o u t}
    end{equation}

    其中的$C_{in}$是指卷积层输入tensor的通道数,$C_{out}$指的是卷积层输出tensor的通道数。K指的是卷积核大小。

    而后把常数项去掉,简化小操作:

    egin{equation}
    mathrm{FLOPs}=H Wleft(C_{i n} K^{2} ight) C_{o u t}
    end{equation}

     而在实际中,我们不可能自己计算FLOPs,所以,本着能找库就找库的聪明才能,查了一下,还真有相关计算FLOPs的库,现查到的有两个库,一个是torchstat以及thop。经过测试,基本上两个可以对齐的,所以说,任意选择一个就好。具体用法写两个小demo吧。

    对于torchstat:

    from torchstat import stat
    import torchvision.models as models
    
    model = model.densenet121()
    stat(model, (3, 224, 224))

    对于thop:

    from torchvision.models import densenet121
    from thop import profile
    model = densenet121()
    input = torch.randn(1, 3, 224, 224)
    macs, params = profile(model, inputs=(input, ))

    3. Flops是不是越大就越好

    其实在文章中,指出FLOPs是一个不直接的衡量指标,不像延迟跟速度,是很直观的指标。

     具有相似FLOPs的网络,执行的速度却不一样,有的相差还是很大的,具体的图可以在一下参考中,找到大佬们简书中写的文章。

    所以,不能只使用FLOPs来当做指标。还得考虑更多的MAC跟并行度等。

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

  • 相关阅读:
    【NOIP2018PJ正式赛】摆渡车
    【NOIP2018PJ正式赛】龙虎斗
    【NOIP2018PJ正式赛】标题统计
    高精度除单精度
    关于输出的东东
    高精度乘单精度
    【NOIP2012模拟10.26】电影票
    【NOIP2012模拟10.26】雕塑
    【NOIP2012模拟10.26】火炬手
    【NOIP2016提高A组模拟9.7】千帆渡
  • 原文地址:https://www.cnblogs.com/zonechen/p/12371590.html
Copyright © 2011-2022 走看看