深度学习图像检测-yolo算法及使用

因为最近的项目需要,感觉还是应该把图像检测识别相关的知识系统的学下,先以能应用为主,至于算法的原理能理解多少是多少吧,毕竟时间不如在学校时那么集中,这里主要介绍下如何安装和使用yolo处理图像检测的问题。

Yolo简介

一种端到端训练及推断,改革区域建议框式目标检测框架,可以实时目标检测。YOLO将全图划分为SXS的格子,每个格子负责中心在该格子的目标检测,采用一次性预测所有格子所含目标的bbox、定位置信度以及所有类别概率向量来将问题一次性解决。

Yolo安装

Yolo基于darknet编写,而编译draknet的时候最好安装一下opencv,因为没有opencv图不会自动弹出,我最开始是利用Anaconda环境下的conda安装的,但是有问题,最后还是重新安装了下,下面记录下安装流程。

(一)Homebrew 安装
用于在mac终端下安装软件使用

1
2
3
4
5
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”
# 卸载
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)”
# 测试是否成功
brew --version

安装好后会自动创建目录/usr/local/Cellar来存放用Homebrew安装的程序,通过brew install就可以安装软件
(二)OpenCV 安装

1
2
# 安装opencv3
brew install opencv

接下来需要配置下环境变量,先进入到python 模块的目录,我利用的是Anaconda自带的python,因此路径为

1
/usr/local/Cellar/anaconda2/lib/python2.7/site-packages/

制作软连接同时更新numpy:

1
2
3
4
5
6
sudo ln -s /usr/local/Cellar/opencv/3.4.0_1/lib/python2.7/site-packages/cv2.so cv2.so
sudo ln -s /usr/local/Cellar/opencv/3.4.0_1/lib/python2.7/site-packages/cv.py cv.py
sudo pip install numpy --upgrade --ignore-installed
# 测试是否安装成功
python
import cv2

(三)Darknet 安装
为了保证安装的一致性,我把下载的darknet也放到了Cellar文件夹下面

1
2
3
cd "/usr/local/Cellar/ && git clone https://github.com/pjreddie/darknet.git
cd darknet
make

如果显示类似下面的代码,则说明安装成功

1
2
3
4
5
6
mkdir -p obj
gcc -I/usr/local/cuda/include/ -Wall -Wfatal-errors -Ofast....
gcc -I/usr/local/cuda/include/ -Wall -Wfatal-errors -Ofast....
gcc -I/usr/local/cuda/include/ -Wall -Wfatal-errors -Ofast....
.....
gcc -I/usr/local/cuda/include/ -Wall -Wfatal-errors -Ofast -lm....

如果安装了GPU CUDA加速,需要修改配置文件中的参数,由于本人mac上只利用cpu进行测试,只需要修改配置文件中OPENCV的参数0变成1,配置文件位于./darknet/Makefile中,然后在终端进行测试

1
./darknet imtest data/eagle.jpg

如果弹出多个老鹰的图片窗口则代表安装成功

已有数据模型使用

为了有直观的感受,在标注训练自己的数据集之前,可以先利用已经学习好的模型进行检测。

1
wget https://pjreddie.com/media/files/yolo.weights

下载好的模型放入到./darknet文件目录下和data文件夹平级目录,然后运行检测代码

1
./darknet detect cfg/yolo.cfg yolo.weights data/dog.jpg

控制台会显示如下的输出结果,网络结构、预测使用时间、每个识别结果的置信度。

1
2
3
4
5
6
7
8
9
10
11
layer     filters    size              input                output
0 conv 32 3 x 3 / 1 416 x 416 x 3 -> 416 x 416 x 32
1 max 2 x 2 / 2 416 x 416 x 32 -> 208 x 208 x 32
.......
29 conv 425 1 x 1 / 1 13 x 13 x1024 -> 13 x 13 x 425
30 detection
Loading weights from yolo.weights...Done!
data/dog.jpg: Predicted in 0.016287 seconds.
car: 54%
bicycle: 51%
dog: 56%

pic1

训练自己的数据