安装⽅式:
'''
pip install thop
'''
使⽤⽅法,话不多说,直接上代码。
'''
import torch
from torchvision import models
from thop import profile
model = models.densenet121()
input = torch.randn(1,3,224,224)
flops, params =profile(model, inputs=(input,))
'''
运⾏的最终结果为模型的计算量和参数量——评价模型压缩⽅法的重要指标。
Flops of DenseNet-121 is 2913996800.0
Parameters of DenseNet-121 is 7978856.0
当然,也可以添加⾃⼰定义的⽹络模块,前提是你知道参数量和计算量计算的⽅法。
class YourModule(nn.Module):
# your definition
def count_your_model(model, x, y):
# your rule here
input = torch.randn(1,3,224,224)
flops, params =profile(model, inputs=(input,),
custom_ops={YourModule: count_your_model})
模型压缩评价指标
模型压缩将会是⼤数据任务(Big Data)的⼀种常⽤⼿段,所要解决的问题就是庞⼤的模型与有限的计算资源之间的⽭盾。官⽅措辞“在过去的⼏年中,我们见证了(卷积)神经⽹络在xxx领域所取得的成功。”精⼼设计的⽹络结构功不可没,但很⼤程度上还是得益于⽹络的加深、加⼤。这就导致了⽹络的参数量暴增,为训练和应⽤带来挑战。模型训练可以使⽤更多的GPU($$$↑↑),但是在应⽤场景下就不⼀样了,受制于成本、体积、功耗等因素,有时候应⽤平台的硬件性能较差(算⼒低,带宽⼩,内存⼩),偏偏任务的实时性要求很⾼(如⼈脸识别)。既然硬件资源受限,那么必然从模型的⾓度⼊⼿,减少模型参数量和计算量。
参数量和计算量只是理论上的压缩⽐与加速⽐,具体的加速效果还要结合特定的硬件平台。值得注意的是,已经有模型压缩⽅向相关的论⽂开始以CPU时间作为加速效果的衡量指标。
https://wk.baidu.com/view/731e2f10f211f18583d049649b6648d7c1c7089f