利用YOLOv3实现第一个视频物体检测小程序

YOLO: Real-Time Object Detection

https://pjreddie.com/darknet/yolo/
本文测试了yolov3 demo,实现对视频的物体检测。

一、安装Darknet

step1:下载darknet

git clone https://github.com/pjreddie/darknet

如果没有git:

sudo apt-get install git

step2:Make操作:

cd darknet
make

step3:下载 pre-trained weight文件

wget https://pjreddie.com/media/files/yolov3.weights

建议浏览器下载,速度快一些

step4:测试一下

下载好之后,把yolov3.weight剪切到darknet文件夹里,然后执行命令:

./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg

/darknet文件夹内,predictions.jpg就是识别结果。
利用YOLOv3实现第一个视频物体检测小程序_第1张图片

二、用CUDA编译Darknet

如果想利用darknet对视频进行处理,则需要分别用CUDA和OpenCV编译Darknet。

安装OpenCV和CUDA教程可以参考。

step1:修改Makefile,并make
/darknet/Makefile里第一句改成GPU=1;
NVCC的路径修改为自己的:NVCC = /usr/local/cuda-11.0/bin/nvcc

#进入文件后,按【i】进入编辑模式
vi Makefile
make

STEP2:执行 ./darknet -i 0 imagenet test cfg/alexnet.cfg alexnet.weights


1. 可能有报错:`Not an option: imagenet`


解决方法:

```powershell
修改命令为:./darknet -i 0 test ./data/horses.jpg cfg/alexnet.cfg alexnet.weights

三、用OpenCV编译Darknet

step1:修改Makefile,并make
/darknet/Makefile里第一句改成OPENCV=1:

#进入文件后,按【i】进入编辑模式,或者用文本文件打开
vi Makefile
make
  1. 出现错误:No package ‘opencv’ found
    ./src/image_opencv.cpp:5:10: fatal error:

解决方法:安装这个库:

sudo apt install libopencv-dev
  1. 出现错误:nvcc fatal : Unsupported gpu architecture ‘compute_30’
    Makefile:92: recipe for target ‘obj/convolutional_kernels.o’ failed
    make: *** [obj/convolutional_kernels.o] Error 1

解决方法:

修改Makefile,只保留一行。

ARCH= -gencode arch=compute_35,code=sm_35
#-gencode arch=compute_30,code=sm_30 
#-gencode arch=compute_50,code=[sm_50,compute_50] \
#-gencode arch=compute_52,code=[sm_52,compute_52]

step2:测试

./darknet imtest data/eagle.jpg

如果得到了很多eagle的窗口,就成功了!
CTRL+c退出。

四、用本地视频测试物体检测效果

step1:下载一段dogs.MP4的视频,放在/darknet/data文件夹内

step2:执行

./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights data/dogs.MP4

出现错误:CUDA Error: out of memory
darknet: ./src/cuda.c:36: check_error: Assertion `0’ failed.

原因:GPU性能不够;

解决方法:修改cfg/yolov3.cfg(用到哪个修改哪个)

batch=1
subdivisions=1
减少其batch数量能大大缓解内存紧张;

如果上面这样做还是出现内存不足的现象,那么只有两种方案了,要么用小一点的模型,要么就更改yolov3.cfg的height和width值了,我修改为宽高都为416,再测试就没问题了。

利用YOLOv3实现第一个视频物体检测小程序_第2张图片

你可能感兴趣的:(利用YOLOv3实现第一个视频物体检测小程序)