YOLOv3 实时检测人像
YOLO是怎么运行的?
yolo将单个神经网络应用于完整图像。该网络将图像划分为区域并预测每个区域的边界框和概率。这些边界框由预测的概率加权。
先前的检测系统重新利用分类器或定位器来执行检测。他们将模型应用于多个位置和比例的图像。图像的高评分区域被认为是检测。
v3有什么新功能?
YOLOv3使用一些技巧来改进训练并提高了性能,包括:多尺度预测,更好的骨干分类器等。
快速体验YOLOv3
- 先安装个Darknet
Darknet 由 C 语言和 CUDA 实现, 对GPU显存利用效率较高(CPU速度差一些, 通过与SSD的Caffe程序对比发现存在CPU较慢,GPU较快的情况). Darknet 对第三方库的依赖较少,且仅使用了少量GNU linux平台C接口,因此很容易移植到其它平台,如Windows或嵌入式设备.
git clone https://github.com/pjreddie/darknet
cd darknet
make
现在我们的cfg
目录中就拥有了yolo的配置文件了
下载作者训练好的重量模型文件(由于我机子太渣了,就下个非常小的模型玩)
wget https://pjreddie.com/media/files/yolov3-tiny.weights
需要其他模型可以进官网,点击后面的权重就可以下载,记得解压
试着检测单张图片
./darknet detect cfg/yolov3-tiny.cfg yolov3-tiny.weights data/dog.jpg
会输出这样的结果
layer filters size input output 0 conv 32 3 x 3 / 1 416 x 416 x 3 -> 416 x 416 x 32 0.299 BFLOPs 1 conv 64 3 x 3 / 2 416 x 416 x 32 -> 208 x 208 x 64 1.595 BFLOPs ....... 105 conv 255 1 x 1 / 1 52 x 52 x 256 -> 52 x 52 x 255 0.353 BFLOPs 106 detection truth_thresh: Using default '1.000000' Loading weights from yolov3.weights...Done! data/dog.jpg: Predicted in 0.029329 seconds. dog: 99% truck: 93% bicycle: 99%
结果已经出来了,不过没显示效果对吧,因为我们没有用
Opencv
编译Darknet
,不能实时检测。
但刚才的结果已经保持在predictions.png
,可以打开图片看下效果。检测多张图片
./darknet detect cfg/yolov3-tiny.cfg yolov3-tiny.weights
会提示你输入图片路径尝试不同图像,按
Ctrl+c
退出layer filters size input output 0 conv 32 3 x 3 / 1 416 x 416 x 3 -> 416 x 416 x 32 0.299 BFLOPs 1 conv 64 3 x 3 / 2 416 x 416 x 32 -> 208 x 208 x 64 1.595 BFLOPs ....... 104 conv 256 3 x 3 / 1 52 x 52 x 128 -> 52 x 52 x 256 1.595 BFLOPs 105 conv 255 1 x 1 / 1 52 x 52 x 256 -> 52 x 52 x 255 0.353 BFLOPs 106 detection Loading weights from yolov3.weights...Done! Enter Image Path:
更改检测阈值
./darknet detect cfg/yolov3-tiny.cfg yolov3-tiny.weights data/dog.jpg -thresh 0
摄像头实时检测
- 先安装CUDA
因为我们默认是使用cpu运行,但我们要是在GPU上运行,速度会更快
使用命令行sudo pacman -S cuda
或者去NVIDIA官网查看版本下载
安装过程可能会遇到很多坑。。可惜我忘了记录了
使用nvidia-smi
命令查看是否列出你的显卡
更改默认显卡
./darknet -i 1 imagenet test cfg/alexnet.cfg alexnet.weights
- 再安装Opencv
可以实时显示效果了,就不用保存到磁盘了
https://opencv.org/
都装完之后
修改配置文件(Makefile)
把GPU,Opencv都修改1
GPU=1 ## using GPU for train or test
CUDNN=0 ## using CUDNN to improve speed
OPENCV=1 ## using opencv
OPENMP=0
DEBUG=0 ## the arch of your GPU
##如果电脑性能低的话就改低一点
ARCH = -gencode arch=compute_60,code=sm_60 \
-gencode arch=compute_61,code=sm_61 \
-gencode arch=compute_62,code=compute_62
保存后执行命令make
,要想提高编译速度可以用make -j4
或者make -j8
每次修改完都要记得编译
连接摄像头
./darknet detector demo cfg/coco.data cfg/yolov3-tiny.cfg yolov3-tiny.weights -c 0
已经更改Makefile中的选项编译了CUDA,但又想用CPU运算咋办?
加个-nogpu
命令即可
./darknet -nogpu imagenet test cfg/alexnet.cfg alexnet.weights
本作品采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 进行许可。