基于Caffe格式部署YOLOV5模型
【GiantPandaCV導(dǎo)語】本文為大家介紹了一個(gè)caffe部署yolov5 模型的教程,并開源了全部代碼。主要是教你如何搭建caffe推理環(huán)境,對(duì)yolov5模型做onnx格式轉(zhuǎn)換,onnx模型轉(zhuǎn)caffe模型,實(shí)測在1070顯卡做到了11ms一幀!
部署簡介
如果說目標(biāo)檢測落地最廣的是哪個(gè)算法,yolo系列肯定有一席之地,本文為大家介紹yolov5s 4.0模型如何轉(zhuǎn)換為caffe模型并推理,據(jù)我所知,華為海思NNIE只支持caffe模型的轉(zhuǎn)換,所以yolov5模型要想在海思芯片上部署,轉(zhuǎn)換為caffe模型是有必要的(在我的1070顯卡上,yolov5s 4.0 的模型inference做到了11ms一幀!)

環(huán)境配置
ubuntu:18.04 cuda:10.0 cudnn:7.6.5 caffe: 1.0 OpenCV:3.4.2 Anaconda3:5.2.0 相關(guān)的安裝包我已經(jīng)放到百度云盤,可以從如下鏈接下載: 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調(diào)至結(jié)尾 接受協(xié)議 yes 安裝路徑 使用默認(rèn)路徑 執(zhí)行安裝 在使用的用戶.bashrc上添加anaconda路徑,比如 export PATH=/home/willer/anaconda3/bin:$PATH caffe安裝 git clone https://github.com/Wulingtian/yolov5_caffe.git cd yolov5_caffe 命令行輸入如下內(nèi)容: 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模型轉(zhuǎn)換onnx模型
pip安裝onnx和onnx-simplifier pip install onnx pip install onnx-simplifier 拉取yolov5官方代碼 git clone https://github.com/ultralytics/yolov5.git 訓(xùn)練自己的模型步驟參考yolov5官方介紹,訓(xùn)練完成后我們得到了一個(gè)模型文件 cd yolov5 python models/export.py --weights 訓(xùn)練得到的模型權(quán)重路徑 --img-size 訓(xùn)練圖片輸入尺寸 python -m onnxsim onnx模型名稱 yolov5s-simple.onnx 得到最終簡化后的onnx模型
onnx模型轉(zhuǎn)換caffe模型
git clone https://github.com/Wulingtian/yolov5_onnx2caffe.git cd yolov5_onnx2caffe v- im convertCaffe.py 設(shè)置onnx_path(上面轉(zhuǎn)換得到的onnx模型),prototxt_path(caffe的prototxt保存路徑),caffemodel_path(caffe的caffemodel保存路徑) python convertCaffe.py 得到轉(zhuǎn)換好的caffe模型
caffe模型推理
定位到y(tǒng)olov5_caffe目錄下 cd tools vim caffe_yolov5s.cpp 設(shè)置如下參數(shù): INPUT_W(模型輸入寬度) INPUT_H(模型輸入高度) NUM_CLASS(模型有多少個(gè)類別,例如我訓(xùn)練的模型是安全帽檢測,只有1類,所以設(shè)置為1,不需要加背景類) NMS_THRESH(做非極大值抑制的閾值) CONF_THRESH(類別置信度) prototxt_path(caffe模型的prototxt路徑) caffemodel_path(caffe模型的caffemodel路徑) pic_path(預(yù)測圖片的路徑) 定位到y(tǒng)olov5_caffe目錄下 make -j8 cd build ./tools/caffe_yolov5s 輸出平均推理時(shí)間,以及保存預(yù)測圖片到當(dāng)前目錄下,至此,部署完成!
華為海思NNIE部署拙見
如果有小伙伴,想把caffe模型部署到海思芯片,建議把yolov5的focus層替換為conv層(stride為2),upsample層替換為deconv層,如下圖所示修改:

預(yù)測圖片展示

歡迎關(guān)注GiantPandaCV, 在這里你將看到獨(dú)家的深度學(xué)習(xí)分享,堅(jiān)持原創(chuàng),每天分享我們學(xué)習(xí)到的新鮮知識(shí)。( ? ?ω?? )?
有對(duì)文章相關(guān)的問題,或者想要加入交流群,歡迎添加BBuf微信:
為了方便讀者獲取資料以及我們公眾號(hào)的作者發(fā)布一些Github工程的更新,我們成立了一個(gè)QQ群,二維碼如下,感興趣可以加入。
