0


踩坑记录2——RK3588跑通YOLO v5+DeepSORT


上篇说到RK3588编译OpenCV, 这篇记录一下跑通YOLO v5+DeepSORT的愉(chi)快(shi)历程.


1. 保证编译OpenCV时关联了ffmpeg

如果本身缺少ffmpeg而编译了没有ffmpeg版本的OpenCV, 则视频无法读取.

解决方案参照CSDN, 首先安装ffmpeg:

sudoaptinstall -y ffmpeg

之后安装一堆dev:

libavcodec-dev 、libavformat-dev、libavutil-dev 、libavfilter-dev、 libavresample-dev、 libswresample-dev、 libswscale-dev

这个时候再去编译OpenCV, 可以看到ffmpeg的选项可以检测出版本了. (我没有做原博客将头文件加入

/usr/include

, 也是可以的).

在这里插入图片描述

2. 下载代码

采用的代码是Zhou-sx大神的https://github.com/Zhou-sx/yolov5_Deepsort_rknn, 代码到手后, 要跑通自己的视频, 做如下改动:

2.1 更改CMakeLists.txt中OpenCV的位置

./CMakeLists.txt

./deepsort/CMakeLists.txt

中, 更改

set(OpenCV_DIR /home/wjp/opencv-4.6.0/install/lib/cmake/opencv4)  # 填入OpenCVConfig.cmake

后面的路径是OpenCV的OpenCVCondif.cmake的路径

2.2 更改图像大小和目标类别个数

./include/common.h

中修改

IMG_WIDTH, IMG_HEIGHT, IMG_PAD, OBJ_CLASS_NUM

, 例如:

#define BYTE unsigned char
#define IMG_WIDTH 1024
#define IMG_HEIGHT 540
#define IMG_CHANNEL 3
#define IMG_PAD 640
#define OBJ_CLASS_NUM     1

./yolov5/src/decode.cpp

中修改

LABEL_NALE_TXT_PATH

, 该txt储存的是视频中类别名称, 必须与

 OBJ_CLASS_NUM

对应:

#define LABEL_NALE_TXT_PATH "../model/hongwai_2_labels_list.txt"

例如只有一类car, 则txt的内容就是

car

2.3 更改主文件中的路径

./yolov5_deepsort.cpp

中, 更改模型, 读取视频与写入视频的路径. 模型必须是对应的rknn格式, 如何产生的以后补充.

string PROJECT_DIR = "/home/codes/yolov5_Deepsort_12_28";

string YOLO_MODEL_PATH = PROJECT_DIR + "/model/best.rknn";
string SORT_MODEL_PATH = PROJECT_DIR + "/model/osnet_x0_25_market.rknn";

string VIDEO_PATH = PROJECT_DIR + "/data/M1401.mp4";
string VIDEO_SAVEPATH = PROJECT_DIR + "/data/M1401_results.mp4";

2.4 编译运行

cd build
cmake ..make
./yolov5_deepsort

3. 优化

原来的代码有输出跟踪框漂移和没有处理检测框异常的功能, 我fork并完善了一下, 改善了这些问题, 减少了报错的可能. 并增加了如下功能, 欢迎star:

本仓库在原仓库的基础上:

  1. 改善了边界框漂移, 完善了当图中没有目标等其他情形出现的bug, 增加了对cost matrix出现nan时的处理
  2. 加入了隔帧检测的功能. 设置方法:

./yolov5/include/detect.h

中 将

const int det_interval = 1;

改成期望的数值, 例如3, 表示每隔3帧检测一次, 这样可以显著提升速度.
同时, 也需要更改

./deepsort/include/deepsort.h

line 39

const int track_interval = 1; 

, 数值要和检测的保持一致.

  1. 加入Re-ID多线程的功能

如果您不希望使用多线程, 则在

./deepsort/src/deepsort.cpp

line 144

if (numOfDetections < 2)

改成

if (true)

自己使用时, 除了更改OpenCV的路径外, 要在

./include/common.h

中修改

IMG_WIDTH, IMG_HEIGHT, IMG_PAD, OBJ_CLASS_NUM

./yolov5/src/decode.cpp

中修改

LABEL_NALE_TXT_PATH

.

https://github.com/JackWoo0831/yolov5_Deepsort_rknn


本文转载自: https://blog.csdn.net/wjpwjpwjp0831/article/details/128476469
版权归原作者 wjpwjpwjp0831 所有, 如有侵权,请联系我们删除。

“踩坑记录2——RK3588跑通YOLO v5+DeepSORT”的评论:

还没有评论