使用Bolt框架部署二值化姿态估计模型

一、二值姿态估计网络

二值网络较难用后训练的方式进行量化,因此本文基于Simple Baselines 提出的模型结构,替换其backbone中的卷积模块为二值卷积(其中实现参考了这篇论文)并使用pytorch框架进行训练。

由于二值网络的权重在训练时仍然是浮点类型,因此在模型转换时需要将pytorch模型中的weight使用torch.sign进行二值化。随后将pytorch模型导出为onnx,再使用bolt提供的转换工具进行转换。

二、实验准备

实验使用的开发板为昇腾的Atlas200,CPU为8*Cortex-A55,但其中只有四核能进行通用计算,剩下四核仅用于NPU的调度。之前刚好跑过NPU的任务,可以看看二值网络的实际性能能否与NPU相竞争。Bolt的安装还算简单,从官方仓库克隆后按照Linux(armv8.2+) 的平台安装即可。
安装时需注意:
1、使用多线程计算需要在install.sh中把openmp的选项打开;
2、默认情况下third_party/install.sh中第96行protoc的版本号会报错,因为github上没有这个版本的release(不知道为什么开发者在linux-aarch64平台下要使用3.1.0版本的?),将其也设为3.14.0后即可成功安装。

三、实验结果

模型线程数卷积耗时 (ms)反卷积耗时 (ms)总时间 (ms)内存占用 (M)精度 (mAP)
Pose_bireal18 (BNN)1145.4402.9588.541.554.0
Pose_bireal18 (BNN)4107.3111.1246.641.054.0
Pose_resnet18 (FP32)1329.8401.8760.6114.066.6
Pose_resnet18 (FP32)4183.0110.7311.4114.166.6
Pose_resnet50 (NPU)4--8.34-70.4

由于simple baseline选择了在模型最后连接反卷积层来做上采样,而这些反卷积层在实验中是没有被二值化的,因此占用了较多的时间。

从BNN和全精度模型对比来看,在卷积层上的加速比为329.8/145.4=2.27(单线程),带来的收益还是可以的。但是在多线程的情况下,全精度反卷积的计算有了接近于线程数的4倍的加速,而二值化卷积的并行加速却没这么明显,此时卷积层的加速比仅为183/107.3=1.70。这就导致了在总推理时间上,二值化网络带来的收益较低,没有达到理想的效果。当然,二值化网络使用一个比特位存储权重,带来的内存占用降低还是实打实的。

最后是二值网络做姿态估计的实际效果图。虽然在精度上和SOTA还有不小的差距,但在图像质量还不错时效果还是可以的~
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值