yolov5-deepsort python转c++全流程

一、配置tensorrt

见之前写的另一篇博客

二、项目代码下载

1、c++项目代码——用于最后进行推理

git clone https://github.com/RichardoMrMu/yolov5-deepsort-tensorrt.git

2、yolov5模型文件转换项目代码——用于yolov5模型文件转换pt-wts-engine

(1)克隆yolov5源码

git clone -b v5.0 https://github.com/ultralytics/yolov5.git
#其中版本根据自己实际项目需要选择eg.v4.0、v5.0、v6.0、v6.2、v7.0等等

(2)克隆tensorrt转换源码

git clone -b yolov5-v5.0 https://github.com/wang-xinyu/tensorrtx.git
#其中版本根据yolov5源码选择对应版本eg.v4.0、v5.0、v6.0、v6.2、v7.0等等

3、deepsort模型文件转换项目代码——用于deepsort模型文件转换pt-onnx-engine

(1)克隆deepsort源码

git clone https://github.com/RichardoMrMu/deep_sort_pytorch.git

(2)克隆tensorrt转换源码

git clone https://github.com/RichardoMrMu/deepsort-tensorrt.git

三、模型文件转换

1、opencv编译

(1)下载opencv源码

git clone https://github.com/opencv/opencv.git

(2)安装编译工具

apt install cmake3-qt-gui

(3)编译

#首先退出conda环境
conda deactivate
#cd到项目目录中然后
mkdir build
cd build
#进行编译
cmake-gui ..

进入cmake编译界面如下:

yolov5-deepsort python转c++全流程_第1张图片

 第一次进入时这个Name、Value框应该是空的,依次点击Configure、Generate即可

PS.后面安装时出现报错cv::parallel_for_impl\cv::getThreadNum()\cvGetThreadNum\_GLOBAL__sub_I_paral

这几个函数找不到,查了一下这几个函数属于OpenMP包,因此在第一次Configure后,要进行以下操作:1、搜索OpenMP、将以下两项勾选再Configure一次,然后Generate

(4)安装

sudo make install

可能遇到的报错:

[1] 编译过程中可能会遇到IPPIVCV下载不下来的情况

解决方法:手动下载对应tgz包并修改对应.cmake文件的代码。详见以下链接:https://blog.csdn.net/u010739369/article/details/79966263

2、yolov5部分

(1)获得wts文件

#将tensorrt转换源码中的gen_wts.py文件复制到yolov5源码中
cp tensorrtx/gen_wts.py yolov5/
cd yolov5 
#将要转换的pt文件放在yolov5的weights文件夹中(以yolov5s为例)
python3 gen_wts.py -w ./weights/yolov5s.pt -o ./weights/yolov5s.wts
// a file 'yolov5s.wts' will be generated.

(2)获得engine文件

编译tensorrtx/yolov5项目并获取tensorrt engine file
此处请注意,如果你是自己训练的模型,那么要将yololayer.h中的CLASS_NUMINPUT_H,INPUT_W修改为自己的参数。即文件的20,21,22行。

cd tensorrtx/yolov5
// update CLASS_NUM in yololayer.h if your model is trained on custom dataset
mkdir build
cd build
cp {ultralytics}/yolov5/yolov5s.wts {tensorrtx}/yolov5/build
cmake ..
make
// yolov5s
sudo ./yolov5 -s yolov5s.wts yolov5s.engine s
// test your engine file
sudo ./yolov5 -d yolov5s.engine ../samples

可能遇到的报错:

[1] “/usr/bin/ld: cannot find -lnvinfer”  或者  “fatal error: NvInfer.h:没有那个文件”  或者  “目录.compilation terminated”

解决方法:Cmakelist中tensorrt的位置不对,因为一般默认位置如下:

 include_directories(/home/nvidia/TensorRT-8.2.5.1/include)
 link_directories(/home/nvidia/TensorRT-8.2.5.1/lib)

这是debian安装的默认位置,如果tensorrt是tar安装的则需要改为对应的位置eg.

 include_directories(/root/TensorRT-8.2.5.1/include)
 link_directories(/root/TensorRT-8.2.5.1/lib)

在opencv编译及其他编译时都需要注意这个问题

[2] /common.hpp:156: nvinfer1::IScaleLayer* addBatchNorm2d(nvinfer1::INetworkDefinition*, std::map, nvinfer1::Weights>&, nvinfer1::ITensor&, std::__cxx11::string, float): Assertion `scale_1' failed.

问题分析:加载权重参数的时候,wts文件里网络层名字和代码里不一样,很有可能是选的yolov5 pt文件的版本和tensorrt里的不对应

解决方法:项目克隆中提过版本要对应

[3] Eigen/Core: 没有那个文件或目录

解决方法:

1、没安装eigen3 进行安装
sudo apt-get install libeigen3-dev
2、因为 eigen 库默认安装在了 /usr/include/eigen3/Eigen 路径下,需使用下面命令映射到 /usr/include 路径下
sudo ln -s /usr/include/eigen3/Eigen /usr/include/Eigen

3、没有包含.h文件
添加绝对路径

yolov5-deepsort python转c++全流程_第2张图片

3、deepsort部分

cp {deepsort-tensorrt}/exportOnnx.py {deep_sort_pytorch}/
python3 exportOnnx.py
mv {deep_sort_pytorch}/deepsort.onnx {deepsort-tensorrt}/resources
cd {deepsort-tensorrt}
mkdir build
cd build
cmake ..
make 
.onnx2engine ../resources/deepsort.onnx ../resources/deepsort.engine

可能遇到的报错:

[1] deep_sort_pytorch/deep_sort/deep/checkpoint/找不到什么东西(具体忘记了)

解决方法:百度网盘 请输入提取码

密码x5mj 从中下载ckpt.t7文件放到对应路径

4、推理

// 下载c++项目代码
git clone https://github.com/RichardoMrMu/yolov5-deepsort-tensorrt.git
// {}代表该项目的绝对路径
cd {yolov5-deepsort-tensorrt}
mkdir build
// 修改{yolov5-deepsort-tensorrt}/src/main.cpp中deepsort
//char* yolo_engine = ""; 和 char* sort_engine = "";为自己模型的位置
// frame = capture.open("");将open中换成mp4所在的路径,或者如果使用usb摄像头,就写成capture.open(0)
// 然后执行编译链接即可

cmake ..
make
// make成功后,会在build文件夹下生成一个yolosort二进制文件 运行即可
./yolosort // 运行二进制文件

参考文章

TypeError: load() missing 1 required positional argument: ‘Loader‘解决方案_消灭BUG鸭的博客-CSDN博客

源码编译opencv卡在IPPICV: Download: ippicv_2017u3_lnx_intel64_general_20170822.tgz解决办法_eternal_truth的博客-CSDN博客

链接OpenCV静态库相关错误_Yemiekai的博客-CSDN博客_opencv 编译 链接库错误

生成tensorrt引擎错误记录-yolov5_Coding-Prince的博客-CSDN博客_nvinfer.h: 没有那个文件或目录

解决Ubuntu18.04中 Eigen/Core: 没有那个文件或目录_兔子Endeavor的博客-CSDN博客_eigen/core

你可能感兴趣的:(git,github)