Py学习  »  机器学习算法

(附代码)深度学习卷积网络浮点计算量和参数量的计算

小白学视觉 • 1 年前 • 109 次点击  

点击上方小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

编者荐语

 

文章作者介绍了深度学习卷积网络的浮点计算量和参数量的计算,还附上了以Pytorch代码框架示例的案例。非常适合大家学习了解,值得一读!

链接丨https://www.zhihu.com/question/65305385


FLOPS:注意全大写,是floating point operations per second的缩写,意指每秒浮点运算次数,理解为计算速度。是一个衡量硬件性能的指标。FLOPs:注意s小写,是floating point operations的缩写(s表复数),意指浮点运算数,理解为计算量。可以用来衡量算法/模型的复杂度。


不同的网络算子有不同的计算量,其计算方式也不相同。在卷积神经网络中,主要以卷积层和全连接层为主,其他算子的操作一般比较小,可以忽略不计,算作误差。二者其计算量的计算方式如下:

卷积

  表示卷积核大小,  和   表示输入和输出通道数,  和  表示输出特征图大小。

情况一:乘法+加法+bias

其中n个数相加需要n-1次加法运算。

 情况二:乘法+加法,无bias

 情况三:乘法,不计入加法

参数量:

 

全连接层

I表示输入维度,O表示输出维度

情况一:乘法+加法+bias

情况二:乘法+加法,无bias

情况三:乘法,不计入加法 

参数量: 


计算代码--以PyTorch框架为例

第一个推荐的计算库是 thop, 简单好用

① 安装:

推荐从作者的github直接安装最新版本。

pip install --upgrade git+https://github.com/Lyken17/pytorch-OpCounter.git


② 使用:

#计算from torchvision.models import resnet50from thop import profilemodel = resnet50()dummy_input = torch.randn(1, 3, 224, 224)macs, params = profile(model, inputs=(dummy_input, ))#输出from thop import clever_formatmacs, params = clever_format([macs, params], "%.3f")


第二个推荐微软的nni包

nni中有个计算网络模型计算量和参数量的小工具,使用起来也非常简单,并能输出每一层的计算量和参数量。

① 安装:

pip install --upgrade nni

② 使用:

from torchvision.models import resnet18from nni.compression.pytorch.utils.counter import count_flops_paramsmodel = resnet18()dummy_input = torch.randn(1, 3, 224, 224)flops, params, results = count_flops_params(model, dummy_input)



总结:

浮点计算量在一定程度上能估计模型的计算复杂度,但是却不一定能代表真实的推理时间。

这主要是因为,不同的硬件或框架对不同算子的优化程度不同,即使计算量大但计算速度也可能比较快,所以FLOPs这一指标只是网络计算复杂度的一个参考,有理论意义。

好消息!

小白学视觉知识星球

开始面向外开放啦👇👇👇




下载1:OpenCV-Contrib扩展模块中文版教程
在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲
小白学视觉公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲
小白学视觉公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群


欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/151087
 
109 次点击