基於Caffe格式部署YOLOV5模型

語言: CN / TW / HK

【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, 在這裡你將看到獨家的深度學習分享,堅持原創,每天分享我們學習到的新鮮知識。( • ̀ω•́ )✧

有對文章相關的問題,或者想要加入交流群,歡迎新增BBuf微信:

二維碼

為了方便讀者獲取資料以及我們公眾號的作者釋出一些Github工程的更新,我們成立了一個QQ群,二維碼如下,感興趣可以加入。

公眾號QQ交流群


本文分享自微信公眾號 - GiantPandaCV(BBuf233)。
如有侵權,請聯絡 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。