一、环境
Ubuntu 20.04
Cuda 11.7
cudnn8
Opencv
python3.8
Cmake
ZED SDK
Python API
二、环境配置
2.1 使用docker镜像
这里可以参考stereolabs/zed-yolo/docker
但是最好自己重新编写Dockerfile,然后按照readme文件的方法构建镜像,因为官方给出的dockerfile太旧了,我当时尝试很多遍都失败了
2.2 在主系统配置环境
按照官方文档给出的方法安装环境就可以了。
How to Use YOLO with ZED
注意!
Cuda版本一定要与ZED SDK对应,在安装好ZED SDK之后,可以在
/usr/local/zed/tools/ZED Diagnostic 对相机检测一下,看看版本有没有问题以及相机是否成功连接在了USB3.0接口上。
如果要用C++运行,那么最好把cmake升级一下,因为原来的cmake版本可能很旧。
三、下载darknet
git clone https://github.com/AlexeyAB/darknet.git
四、C++ 运行darknet模块
4.1 修改MakeFile文件
//根据自己ZED相机种类来进行对应的设置
GPU=1
CUDNN=1
CUDNN_HALF=1
OPENCV=1
AVX=0
OPENMP=0
LIBSO=1
ZED_CAMERA=1
ZED_CAMERA_v2_8=0
# set GPU=1 and CUDNN=1 to speedup on GPU
# set CUDNN_HALF=1 to further speedup 3 x times (Mixed-precision on Tensor Cores) GPU: Volta, Xavier, Turing and higher
# set AVX=1 and OPENMP=1 to speedup on CPU (if error occurs then set AVX=0)
# set ZED_CAMERA=1 to enable ZED SDK 3.0 and above
# set ZED_CAMERA_v2_8=1 to enable ZED SDK 2.X
USE_CPP=1
DEBUG=1
//查看自己显卡,找到对应的算力并修改
ARCH= -gencode arch=compute_35,code=sm_35 \
-gencode arch=compute_50,code=[sm_50,compute_50] \
-gencode arch=compute_52,code=[sm_52,compute_52] \
-gencode arch=compute_61,code=[sm_61,compute_61]
//77行需要把NVCC指定到cuda位置
NVCC=/usr/local/cuda-11.7/bin/nvcc
4.2 编译
cd darknet
make
4.3下载权重地址
编译成功之后需要下载权重地址。我是在yolov4.weights文件找到的。
4.4 测试
4.4.1 图片
./darknet detect cfg/yolov4.cfg yolov4.weights data/dog.jpg
4.4.2 相机
./uselib data/coco.names cfg/yolov4.cfg yolov4.weights zed_camera
4.4.3 可能遇到的问题
1、相机打不开
ZED 3D相机需要在USB3.0接口才可以正常使用,但是电脑主机前面的USB3.0接口可能有时候会失灵,于是就会检测不到ZED相机,主机后面还有USB3.0接口,可以在那些接口试一试。
2、使用相机检测的时候可能报错“核心段错误”(这个有点记得不太清楚了)之类的,有可能是因为在MakeFile文件中设置ZED_CAMERA_v2_8=1
,可以把这个改成ZED_CAMERA_v2_8=0
,并且设置 ZED_CAMERA=1
重新编译并运行试一下。
五、python运行yolov4
5.1 安装ZED Python
可参考Stereolabs ZED - Python API.
5.2 下载代码
https://github.com/stereolabs/zed-yolo.git
5.3 修改文件zed-yolo文件
网上说如果用原来这个代码文件编译可能会报错,因为最新cudnn是8.x版本的,那么要对文件进行修改
1、删除libdarknet文件,下载darknet文件(git clone https://github.com/AlexeyAB/darknet.git
),并且把darknet文件改成libdarknet文件。
2、设置MakeFile文件
//根据自己ZED相机种类来进行对应的设置
GPU=1
CUDNN=1
CUDNN_HALF=0
OPENCV=1
AVX=0
OPENMP=0
LIBSO=1
ZED_CAMERA=1
ZED_CAMERA_v2_8=0
3、
cd libdarknet
make
4、进入zed_python_sample文件,修改darknet_zed.py
//将路径改成libdarknet.so的绝对路径
else:
lib = CDLL("/home/huang/program/zed-yolo-master/libdarknet/libdarknet.so", RTLD_GLOBAL)
5、下载权重
6、原来的代码是yolov3-tiny的,要改成yolov4需要在darknet_zed.py做以下更改:
//334、335行(原来)
config_path = darknet_path + "cfg/yolov3-tiny.cfg"
weight_path = "yolov3-tiny.weights"
改成(这个我有点记不太清楚了,如果报错,可以根据错误提示进行相应的修改)
//334、335行(现在)
config_path = darknet_path + "cfg/yolov4.cfg"
weight_path = "yolov4.weights"
7、进入zed_python_sample
目录,运行
python3 darknet_zed.py
然后就可以识别成功。
参考
[1]stereolabs官方文档
[2]Ubuntu18.04用Zed结合yolo进行目标检测by努力自律开心
[3]AlexeyAB/darknet