ResNet18推理踩坑记录

ResNet18推理踩坑记录

本文记录了将pytorch的resnet18预训练模型使用C进行前向推理的踩坑过程,主要工作是对接软件部分训练出来的浮点权重,使用C模拟网络的运行情况,并做16位均匀量化。

一.单独读取权重文件数据:局部变量过大导致程序崩溃

分析:

二进制文件读写的代码中使用了函数内的数组作为存储的缓冲区,属于局部变量,存放在栈上,

而栈的默认大小为1M,若定义过大的局部变量则会导致栈溢出,

后果包括但不限于程序崩溃,无关变量被改写等。

解决办法:

1.增大栈大小。

2.使用堆内存。

3.使用静态区内存【全局变量或者静态变量】。

综上所述,当读取的数据较多时,用于存储的buffer应该定义为全局!

二.权重文件的一些事

1.权重文件里有什么

该文件里存放着所有训练好的网络数据,根据不同网络稍有不同。以resnet为例,网络中包括CONV,BN,FC等操作,文件中则包含了CONV层的卷积核权重,BN的四个参数(均值,方差,γ,β),FC层的卷积核权重与偏置。

ps:采用bn的网络中,卷积层的输出并不加偏置

如何知道文件中具体有什么数据?这就涉及到权重文件的生成。

2.权重文件的生成

以pytorch的预训练模型为例,下载的.pth文件并不能在

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值