专栏首页GiantPandaCV基于Caffe格式部署YOLOV5模型

基于Caffe格式部署YOLOV5模型

【GiantPandaCV导语】本文为大家介绍了一个caffe部署yolov5 模型的教程,并开源了全部代码。主要是教你如何搭建caffe推理环境,对yolov5模型做onnx格式转换,onnx模型转caffe模型,实测在1070显卡做到了11ms一帧!

部署简介

如果说目标检测落地最广的是哪个算法,yolo系列肯定有一席之地,本文为大家介绍yolov5s 4.0模型如何转换为caffe模型并推理,据我所知,华为海思NNIE只支持caffe模型的转换,所以yolov5模型要想在海思芯片上部署,转换为caffe模型是有必要的(在我的1070显卡上,yolov5s 4.0 的模型inference做到了11ms一帧!)

推理速度截图

环境配置

  • ubuntu:18.04
  • cuda:10.0
  • cudnn:7.6.5
  • caffe: 1.0
  • OpenCV:3.4.2
  • Anaconda3:5.2.0
  • 相关的安装包我已经放到百度云盘,可以从如下链接下载: https://pan.baidu.com/s/17bjiU4H5O36psGrHlFdM7A 密码: br7h
  • cuda和cudnn的安装
  • 可以参考我的TensorRT量化部署yolov5模型的文章(https://zhuanlan.zhihu.com/p/348110519)
  • Anaconda安装
  • chmod +x Anaconda3-5.2.0-Linux-x86_64.sh(从上面百度云盘链接下载) .- /Anaconda3-5.2.0-Linux-x86_64.sh
  • 按ENTER,然后按q调至结尾
  • 接受协议 yes
  • 安装路径 使用默认路径
  • 执行安装
  • 在使用的用户.bashrc上添加anaconda路径,比如
  • export PATH=/home/willer/anaconda3/bin:$PATH
  • caffe安装
  • git clone https://github.com/Wulingtian/yolov5_caffe.git
  • cd yolov5_caffe
  • 命令行输入如下内容:
  • export CPLUS_INCLUDE_PATH=/home/你的用户名/anaconda3/include/python3.6m
  • make all -j8
  • make pycaffe -j8
  • vim ~/.bashrc
  • export PYTHONPATH=/home/你的用户名/yolov5_caffe/python:$PYTHONPATH
  • source ~/.bashrc

编译过程踩过的坑

libstdc++.so.6: version `GLIBCXX_3.4.21' not found

解决方案:https://blog.csdn.net/phdsky/article/details/84104769?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.add_param_isCf&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.add_param_isCf#commentBox

ImportError: No module named google.protobuf.internal

解决方案:https://blog.csdn.net/quantum7/article/details/83507364

wrap_python.hpp:50:23: fatal error: pyconfig.h: No such file or dir

解决方案:https://blog.csdn.net/weixin_37251044/article/details/79158823

yolov5s模型转换onnx模型

  • pip安装onnx和onnx-simplifier
  • pip install onnx
  • pip install onnx-simplifier
  • 拉取yolov5官方代码
  • git clone https://github.com/ultralytics/yolov5.git
  • 训练自己的模型步骤参考yolov5官方介绍,训练完成后我们得到了一个模型文件
  • cd yolov5
  • python models/export.py --weights 训练得到的模型权重路径 --img-size 训练图片输入尺寸
  • python -m onnxsim onnx模型名称 yolov5s-simple.onnx 得到最终简化后的onnx模型

onnx模型转换caffe模型

  • git clone https://github.com/Wulingtian/yolov5_onnx2caffe.git
  • cd yolov5_onnx2caffe v- im convertCaffe.py
  • 设置onnx_path(上面转换得到的onnx模型),prototxt_path(caffe的prototxt保存路径),caffemodel_path(caffe的caffemodel保存路径)
  • python convertCaffe.py 得到转换好的caffe模型

caffe模型推理

  • 定位到yolov5_caffe目录下
  • cd tools
  • vim caffe_yolov5s.cpp
  • 设置如下参数:
  • INPUT_W(模型输入宽度)
  • INPUT_H(模型输入高度)
  • NUM_CLASS(模型有多少个类别,例如我训练的模型是安全帽检测,只有1类,所以设置为1,不需要加背景类)
  • NMS_THRESH(做非极大值抑制的阈值)
  • CONF_THRESH(类别置信度)
  • prototxt_path(caffe模型的prototxt路径)
  • caffemodel_path(caffe模型的caffemodel路径)
  • pic_path(预测图片的路径)
  • 定位到yolov5_caffe目录下
  • make -j8
  • cd build
  • ./tools/caffe_yolov5s 输出平均推理时间,以及保存预测图片到当前目录下,至此,部署完成!

华为海思NNIE部署拙见

如果有小伙伴,想把caffe模型部署到海思芯片,建议把yolov5的focus层替换为conv层(stride为2),upsample层替换为deconv层,如下图所示修改:

修改后的模型配置yaml文件

预测图片展示

预测效果展示


欢迎关注GiantPandaCV, 在这里你将看到独家的深度学习分享,坚持原创,每天分享我们学习到的新鲜知识。( • ̀ω•́ )✧

本文分享自微信公众号 - GiantPandaCV(BBuf233),作者:willer

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-03-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • ICCV 2019 | 精确的端到端的弱监督目标检测网络

    由于没有实例级类别标注,对于弱监督目标检测网络要精确的预测目标的位置具有挑战性。大多数现有的方法倾向于通过使用双阶段的学习过程来解决该问题,即多实例学习检测器,...

    BBuf
  • C++实现yolov5的OpenVINO部署

    本文编辑的时间是2020年12月3日,官方最新的releases是v3.1,在v3.0的版本中,官网有如下的声明

    BBuf
  • 【从零开始学深度学习编译器】二,TVM中的scheduler

    在【从零开始学深度学习编译器】一,深度学习编译器及TVM 介绍我们已经知道TVM可以将各种深度学习训练框架的模型(计算图)转化为内部的Graph IR(Rela...

    BBuf
  • 基于Caffe格式部署YOLOV5模型

    如果说目标检测落地最广的是哪个算法,yolo系列肯定有一席之地,本文为大家介绍yolov5s 4.0模型如何转换为caffe模型并推理,据我所知,华为海思NNI...

    3D视觉工坊
  • nginx代理

    版权声明:本文为博主原创文章,未经博主允许不得转载。 ...

    用户1215343
  • 高效开发Android App的10个建议

    假如要Google Play上做一个最失败的案例,那最好的秘诀就是界面奇慢无比、耗电、耗内存。接下来就会得到用户的消极评论,最后名声也就臭了。即使你的应用设计...

    用户2192970
  • CUDA优化的冷知识 3 |男人跟女人的区别

    https://docs.nvidia.com/cuda/cuda-c-best-practices-guide/index.html 来阅读原文。

    GPUS Lady
  • 揭秘知乎大V [Python数据分析]

    知乎,可以说是国内目前最大的问答类社区。与微博、贴吧等产品不同,知乎上面的内容更多是用户针对特定的问题分享知识、经验和见解。咱们编程教室就有不少读者是从知乎上了...

    Crossin先生
  • VC下提前注入进程的一些方法2——远线程带参数

            在前一节中介绍了通过远线程不带参数的方式提前注入进程,现在介绍种远线程携带参数的方法。(转载请指明出处)

    方亮
  • 2020年终总结

    其实在找工作期间,我是非常脆弱、迷茫的。 想象着能拿到几个大厂 offer,然而现实给了我沉重的一击。

    进击的小进进

扫码关注云+社区

领取腾讯云代金券