嵌入式开发板上部署目标检测模型mobilenetv2_ssdlite

项目地址

mobilenetv2_ssdlite_ncnn

目标

  • 在RK3308嵌入式开发板(Arm Linux)上使用ncnn部署mobilenetv2_ssdlite模型
  • 模型量化

细节

模型量化

https://github.com/Tencent/ncnn/tree/master/tools/quantize

优化图

https://github.com/Tencent/ncnn/wiki/use-ncnnoptimize-to-optimize-model

./ncnnoptimize mbv2_ssdlite/mobilenetv2_ssdlite_voc.param mbv2_ssdlite/mobilenetv2_ssdlite_voc.bin mbv2_ssdlite_nobn/mobilenetv2_ssdlite_voc.param mbv2_ssdlite_nobn/mobilenetv2_ssdlite_voc.bin 0

算子合并

  • batchnorm - scale
  • convolution - batchnorm
  • convolutiondepthwise - batchnorm
  • deconvolution - batchnorm
  • deconvolutiondepthwise - batchnorm
  • innerproduct - batchnorm
  • convolution - relu
  • convolutiondepthwise - relu
  • deconvolution - relu
  • deconvolutiondepthwise - relu
  • innerproduct - relu

消除空算子

  • innerproduct - dropout
  • flatten after global pooling

偏好更好的算子

  • replace convolution with innerproduct after global pooling
创建校准表文件

我们建议使用验证数据集进行校准,该数据集应超过5000张图像。

ncnn2table --param=mbv2_ssdlite_nobn/mobilenetv2_ssdlite_voc.param --bin=mbv2_ssdlite_nobn/mobilenetv2_ssdlite_voc.bin --images=../images/ --output=mbv2_ssdlite_nobn.table --mean=127.5,127.5,127.5 --norm=0.007843,0.007843,0.007843 --size=300,300 --thread=10
量化
ncnn2int8 mbv2_ssdlite_nobn/mobilenetv2_ssdlite_voc.param mbv2_ssdlite_nobn/mobilenetv2_ssdlite_voc.bin mbv2_ssdlite_int8/mobilenetv2_ssdlite_voc.param mbv2_ssdlite_int8/mobilenetv2_ssdlite_voc.bin mbv2_ssdlite_nobn.table

修改输入分辨率

  • 修改模型文件mobilenetv2_ssdlite_voc.param的分辨率为192x192,原分辨率为300x300

    Input                    data                     0 1 data 0=192 1=192 2=3
    
  • 修改mobilenetv2ssdlite.cpp中的输入图像的分辨率为192x192,原分辨率为300x300

        const int target_size = 192;
    
        int img_w = bgr.cols;
        int img_h = bgr.rows;
    
        ncnn::Mat in = ncnn::Mat::from_pixels_resize(bgr.data, ncnn::Mat::PIXEL_BGR, bgr.cols, bgr.rows, target_size, target_size);
    

加速效果

分辨率300 x 300

模型量化后,运行时间减少25%,加速效果明显,目标检测结果保持不变。
若要进一步提升速度,可考虑调整mobilenetv2的通道数,减小模型。
在这里插入图片描述

分辨率192 x 192

模型量化后,运行时间减少28%,加速效果明显,目标检测结果保持不变。
由于是直接修改分辨率,没有使用相应分辨率微调模型,导致检测的边界框不是很准确。
在这里插入图片描述

相关文章

https://blog.csdn.net/sinat_31425585/article/details/101607785

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
嵌入行业中,开发和工具链的选择对于实现openpose嵌入部署非常重要。根据引用,在嵌入行业中,除了嵌入开发,还存在外包的形,供应商可以根据用户的定制要求提供硬件设计和驱动移植等方面的服务。因此,选择适合openpose部署嵌入开发可以更好地满足项目的需求。 根据引用,选择特定的开发时,应该考虑厂商提供的推理框架和示例。对于openpose的嵌入开发,可以考虑选择支持NNIE或其他相关底层加速实现的特定开发。比如,如果使用nvidia显卡,可以选择TensorRT作为推理框架;如果使用Intel的CPU,可以选择OpenVINO;如果使用arm的CPU,可以选择NCNN或MNN。这些特定开发通常会提供一些经典的视觉任务的示例,如分类和检测,使用它们的工具链进行部署的例子。因此,熟悉这些示例,并关注如何进行Debug和内存释放等操作是很重要的。 此外,引用提到了一些知名大佬们的文章,他们对于AI移动端优化和算法优化的经验和见解也可以作为学习的参考。搜索知乎的AI移动端优化专栏,可以找到一些有关优化部署的文章,从中学习优化算法的方法。 综上所述,为了实现openpose嵌入部署,你可以选择适合openpose的嵌入开发,并熟悉其对应的工具链和官方示例。同时,可以参考一些大佬们的文章,学习优化部署的方法和技巧。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [嵌入开发的功能及选择](https://download.csdn.net/download/weixin_38740130/12699059)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [视觉算法的工业部署及落地方面的技术知识,怎么学?](https://blog.csdn.net/Yong_Qi2015/article/details/109541838)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值