模型参数量(Parameters)和计算量(FLOPs)获取【使用thop】

Tips: 针对部分开源代码没有提供相关计算网络参数量和计算量的代码。这里给出一个通用的获取网络的参数量和计算量的方法。 使用thop即可快速获取

1 模型参数量和计算量

参数量#params 即为网络模型中含有多少个参数,与输入的数据无关,主要与模型的结构有关系;其主要影响模型运算是所需要的内存或显存

计算量#FLOPs 通常使用FLOPs(Floating point operations,浮点运算数量)来表示计算量,其主要来衡量算法/模型的复杂度。论文中一般用GFLOPs来表示,1GFLOPs=10^9 FLOPs;

2 安装thop

pip install thop

3 示例代码

####(如计算如下网络的参数量和计算量)####

import torch
import torch.nn as nn

# SENet
class SELayer(nn.Module):
    def __init__(self, channel, reduction=16):
        super(SELayer, self).__init__()
        self.avg_pool = nn.AdaptiveAvgPool2d(1)
        self.fc = nn.Sequential(
            nn.Linear(channel, channel // reduction, bias=False),
            nn.ReLU(inplace=True),
            nn.Linear(channel // reduction, channel, bias=False),
            nn.Sigmoid()
        )

    def forward(self, x):
        b, c, _, _ = x.size()
        y = self.avg_pool(x).view(b, c)
        y = self.fc(y).view(b, c, 1, 1)
        return x * y.expand_as(x)

####(thop代码,可以自行优化)####

import thop
if __name__ == '__main__':
    # 输入1 channel
    model = SELayer(channel=64)
    # (1, 64, 640, 640) 输入的图片尺寸
    x = torch.randn(1, 64, 640, 640)
    flops, params = thop.profile(model, inputs=(x,))
    print("%s | %s | %s" % ("Model", "Params(M)", "FLOPs(G)"))
    print("------|-----------|------")
    print("%s | %.7f | %.7f" % ("模型  ", params / (1000 ** 2), flops / (1000 ** 3)))

4 结果展示

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/lafsca5/article/details/130461964