基于 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.****.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.****.net/quantum7/article/details/83507364
wrap_python.hpp:50:23: fatal error: pyconfig.h: No such file or dir
解决方案:https://blog.****.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层,如下图所示修改:
预测图片展示
欢迎关注GiantPandaCV, 在这里你将看到独家的深度学习分享,坚持原创,每天分享我们学习到的新鲜知识。( • ̀ω•́ )✧
有对文章相关的问题,或者想要加入交流群,欢迎添加BBuf微信:
为了方便读者获取资料以及我们公众号的作者发布一些Github工程的更新,我们成立了一个QQ群,二维码如下,感兴趣可以加入。
推荐阅读
-
LLM 对基于 llama-index 部署本地嵌入与 GLM-4 模型的 rag 系统的评估
-
基于 Caffe 格式部署 YOLOV5 模型
-
包婷婷 (201550484)作业一 统计软件简介与数据操作-SPSS(Statistical Product and Service Solutions),"统计产品与服务解决方案"软件。最初软件全称为"(SolutionsStatistical Package for the Social Sciences),但是随着SPSS产品服务领域的扩大和服务深度的增加,SPSS公司已于2000年正式将英文全称更改为"统计产品与服务解决方案",标志着SPSS的战略方向正在做出重大调整。为IBM公司推出的一系列用于统计学分析运算、数据挖掘、预测分析和决策支持任务的软件产品及相关服务的总称SPSS,有Windows和Mac OS X等版本。 1984年SPSS总部首先推出了世界上第一个统计分析软件微机版本SPSS/PC+,开创了SPSS微机系列产品的开发方向,极大地扩充了它的应用范围,并使其能很快地应用于自然科学、技术科学、社会科学的各个领域。世界上许多有影响的报刊杂志纷纷就SPSS的自动统计绘图、数据的深入分析、使用方便、功能齐全等方面给予了高度的评价。 R统计软件介绍 R是一套完整的数据处理、计算和制图软件系统。其功能包括:数据存储和处理系统;数组运算工具(其向量、矩阵运算方面功能尤其强大);完整连贯的统计分析工具;优秀的统计制图功能;简便而强大的编程语言:可操纵数据的输入和输出,可实现分支、循环,用户可自定义功能。 与其说R是一种统计软件,还不如说R是一种数学计算的环境,因为R并不是仅仅提供若干统计程序、使用者只需指定数据库和若干参数便可进行一个统计分析。R的思想是:它可以提供一些集成的统计工具,但更大量的是它提供各种数学计算、统计计算的函数,从而使使用者能灵活机动的进行数据分析,甚至创造出符合需要的新的统计计算方法。 该语言的语法表面上类似 C,但在语义上是函数设计语言(functional programming language)的变种并且和Lisp 以及 APL有很强的兼容性。特别的是,它允许在"语言上计算"(computing on the language)。这使得它可以把表达式作为函数的输入参数,而这种做法对统计模拟和绘图非常有用。 R是一个免费的*软件,它有UNIX、LINUX、MacOS和WINDOWS版本,都是可以免费下载和使用的。在R主页那儿可以下载到R的安装程序、各种外挂程序和文档。在R的安装程序中只包含了8个基础模块,其他外在模块可以通过CRAN获得。 二、R语言 R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个*、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。 R作为一种统计分析软件,是集统计分析与图形显示于一体的。它可以运行于UNIX,Windows和Macintosh的操作系统上,而且嵌入了一个非常方便实用的帮助系统,相比于其他统计分析软件,R还有以下特点: 1.R是*软件。这意味着它是完全免费,开放源代码的。可以在它的网站及其镜像中下载任何有关的安装程序、源代码、程序包及其源代码、文档资料。标准的安装文件身自身就带有许多模块和内嵌统计函数,安装好后可以直接实现许多常用的统计功能。[2] 2.R是一种可编程的语言。作为一个开放的统计编程环境,语法通俗易懂,很容易学会和掌握语言的语法。而且学会之后,我们可以编制自己的函数来扩展现有的语言。这也就是为什么它的更新速度比一般统计软件,如,SPSS,SAS等快得多。大多数最新的统计方法和技术都可以在R中直接得到。[2] 3. 所有R的函数和数据集是保存在程序包里面的。只有当一个包被载入时,它的内容才可以被访问。一些常用、基本的程序包已经被收入了标准安装文件中,随着新的统计分析方法的出现,标准安装文件中所包含的程序包也随着版本的更新而不断变化。在另外版安装文件中,已经包含的程序包有:base一R的基础模块、mle一极大似然估计模块、ts一时间序列分析模块、mva一多元统计分析模块、survival一生存分析模块等等.[2] 4.R具有很强的互动性。除了图形输出是在另外的窗口处,它的输入输出窗口都是在同一个窗口进行的,输入语法中如果出现错误会马上在窗口口中得到提示,对以前输入过的命令有记忆功能,可以随时再现、编辑修改以满足用户的需要。输出的图形可以直接保存为JPG,BMP,PNG等图片格式,还可以直接保存为PDF文件。另外,和其他编程语言和数据库之间有很好的接口。[2] 5.如果加入R的帮助邮件列表一,每天都可能会收到几十份关于R的邮件资讯。可以和全球一流的统计计算方面的专家讨论各种问题,可以说是全世界最大、最前沿的统计学家思维的聚集地.[2] R是基于S语言的一个GNU项目,所以也可以当作S语言的一种实现,通常用S语言编写的代码都可以不作修改的在R环境下运行。 R的语法是来自Scheme。R的使用与S-PLUS有很多类似之处,这两种语言有一定的兼容性。S-PLUS的使用手册,只要稍加修改就可作为R的使用手册。所以有人说:R,是S-PLUS的一个“克隆”。 但是请不要忘了:R是免费的(R is free)。R语言源代码托管在github,具体地址可以看参考资料。[3] 。 R语言的下载可以通过CRAN的镜像来查找。 R语言有域名为.cn的下载地址,有六个,其中两个由Datagurn,由 中国科学技术大学提供的。R语言Windows版,其中由两个下载地点是Datagurn和 USTC提供的。 三、stata Stata 是一套提供其使用者数据分析、数据管理以及绘制专业图表的完整及整合性统计软件。它提供许许多多功能,包含线性混合模型、均衡重复反复及多项式普罗比模式。用Stata绘制的统计图形相当精美。 新版本的STATA采用最具亲和力的窗口接口,使用者自行建立程序时,软件能提供具有直接命令式的语法。Stata提供完整的使用手册,包含统计样本建立、解释、模型与语法、文献等超过一万余页的出版品。 除此之外,Stata软件可以透过网络实时更新每天的最新功能,更可以得知世界各地的使用者对于STATA公司提出的问题与解决之道。使用者也可以透过Stata. Journal获得许许多多的相关讯息以及书籍介绍等。另外一个获取庞大资源的管道就是Statalist,它是一个独立的listserver,每月交替提供使用者超过1000个讯息以及50个程序。 四、PYTHON
-
YoloDeployCsharp]深度学习模型部署测试平台基于 .NET 的 YOLO 深度学习模型部署测试平台
-
基于 NFC 的无线电池管理 BMS - ● 主动读取内部传感器:利用 NFC 技术,BMS 能够主动读取内部传感器的数据 [... 考虑车辆外使用案例中的空闲状态场景:NFC 技术可用于处理闲置状态下的电池组读取,例如在第二次生命转移期间进行存储。 主动诊断读取:在邻近系统中部署了 BMS 的情况下,使用 NFC 技术进行主动诊断读取。 (ii) 系统结构 系统架构如图所示,在建立安全通道之前,需要对设备进行身份验证。数据链路通信层由 NDEF 记录处理,而数据存储可以是离线的,也可以是数据库中的在线存储。活动和空闲状态的诊断读数取决于设备和数据方向,需要与外部 NFC 阅读器进行通信。软件架构分为三层,包括硬件抽象层(HAL)、中间层(中间件)和应用层。HAL 处理硬件驱动组件,中间件执行设备验证,而应用层则由开发人员根据安全漏洞和格式扩展*定义。 为确保安全,系统采用了一个安全模型,为 BMS 和主动诊断读取情况格式化应用数据。安全考虑因素包括设备相互验证、使用安全通道(加密和防篡改)以及确保电池组内读数的安全。 考虑到不同的 BMS 拓扑,包括集中式、调制式、分布式和分散式,系统需要满足设备相互验证和使用安全通道的要求。对于每种拓扑结构,都必须考虑将性能开销降至最低。电池是封闭的,对其进行物理攻击不可行或成本太高。外部攻击可能也很困难。基于对称或非对称加密技术的自动验证可用于保护电池组读数。安全协议在验证阶段和会话密钥确认阶段采用双密钥加密,以抵御攻击。中间件在数据格式验证、确认和处理中发挥关键作用,确保数据传输安全。 (iii) 唤醒模型设计
-
模型量化 (6):基于 PTQ 的 yolov5 量化,附完整代码说明
-
部署基于 TensorRT 量化的 YOLOV5s 4.0 模型
-
YOLOv5 车牌识别实用教程(四)模型优化与部署
-
基于 YOLOv8/YOLOv7/YOLOv6/YOLOv5 的癌症图像检测系统(深度学习模型 + UI 界面代码 + 训练数据集) - 结论
-
[完整过程]在 Raspberry Pi 4B 上从头开始部署自己训练有素的 yolov5 模型(使用 NCS2 加速)