神经网络内存消耗

对于神经网络,在进行终端部署时,需要考虑内存消耗问题,大体来说:

内存=模型大小+特征图消耗

resnet

resnet+FPN

1、模型大小指的是模型参数所占的比特数,参数的不同量化方式会影响大小。
以resnet18为例,原始的resnet18模型的参数所占空间约为45M,但是经过8bit量化后,所占空间为12M。
2、特征图消耗指的是网络在前向推理时中间或者最后的计算结果。

  • 最后的计算结果即输出,比如FPN的输出结果,需要存下来,因此需要纳入到内存消耗的计算中去;
  • 中间的输出结果,即各层的特征图,由于送到下一层进行计算后,此结果可以丢掉,对于这些特征图的内存消耗,程序往往开设一块大的内存空间,可以进行复用。因此这部分内存空间的消耗,我们可以取空间消耗最大的那层特征层进行粗略估算。

比如对于832*448*3图像输入到resnet18+FPN,中间特征层最大消耗为(832/2)*(448/2)*64*4=23M,64为通道数;输出结果为FPN各层输出,(832/4)*(448/4)*64*4 + (832/8)*(448/8)*64*4 + ....=6M + 1.5M + ...

所以为了减小神经网络的内存消耗,可以考虑以下几个方面:

  • 低比特量化
  • 减小网络通道数或层数
  • 减小输入大小
  • 根据实际情况,可能只需取FPN的某个尺度输出结果即可。比如目标都很大,只取FPN最后P5和P4层输出结果就行了。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容