手把手教你用yolov3模型实现目标检测教程(一) - 环境配置

手把手教你用yolov3模型实现目标检测(一)

写在前面:
由于项目需要,使用yolov3模型做了各种现实场景物体的目标检测。做完了过了好长时间,感觉有些遗忘,还是该留下点东西,方便自己查找,也希望能惠及他人。
同时,为了督促自己补充理论体系,尽量做到知其然知其所以然

1、环境配置

首先,本教程是完全在ubuntu 18.04下进行的,你能找到的成熟框架不外乎以下三个:

https://github.com/qqwweee/keras-yolo3 ,基于keras编写

https://github.com/pjreddie/darknet ,基于c++编写

https://github.com/AlexeyAB/darknet , 基于c++编写

其中,第一个keras-yolo3需要搭建tensorflow-gpu,keras等很多环境。比较麻烦,有时间学习可以用这个。
推荐使用第二个官方框架pjreddie/darknet,官网(教程)如下:https://pjreddie.com/darknet/yolo/
第三个AlexeyAB/darknet项目近期一直在维护,而且文档特别详细。但个人感觉第二个官方框架实践起来更简单。
建议训练和检测过程中有任何问题,先到第二第三个仓库的issues中查找,也许会找到你想要的
好,那我们开始:
先下载该项目:https://github.com/pjreddie/darknet

CPU/GPU编译:

编译过程中,检查环境:
我的环境:cmake version 3.10.2; 别的版本应该也可
Python 3.6.3 |Anaconda custom (64-bit)| (default, Oct 13 2017, 12:02:49)
教程也很清楚哦:https://pjreddie.com/darknet/install/

注意:darknet不支持gcc和g++6以上的版本,而ubuntu18.04默认安装的gcc-7
因此,需要将gcc和g++分别降级:
(1) gcc/g++降级为4.8版本

	(1)在Ubuntu 16.04上安装老版gcc十分简单,直接用apt-get命令下载即可.
sudo apt-get install gcc-4.8
(2)安装完成后输入命令gcc --verison查看gcc的版本,此时还是高版本
(3)查看版本gcc-4.8版本是否安装成功
ls /usr/bin/gcc*
(4)输入命令设置默认版本:
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 100
(5)查看默认结果(非必须)
sudo update-alternatives --config gcc
(6)最终gcc --version 发现变成4.8版本了

g++的降级,只需把上面gcc改称g++。gcc和g++的版本应该必须一致。

CPU:

cd darknet-master 
make

就完事了,一般不会有问题。

GPU:
yolov3是十分高效快速的!这点不用过多介绍,虽然CPU版本以及很快,但GPU号称快了500倍!
修改根目录下的makefile文件的GPU和CUDNN为1即可:

GPU=1
CUDNN=1
OPENCV=0
OPENMP=0
DEBUG=0

改完然后同样的,根目录 -> make就ok了
我的环境:
ubuntu18.04+CUDA9.0+CUDNN7+nvidia1050 4G显存
安装教程:(很多链接)
https://blog.csdn.net/Hu_helloworld/article/details/102614562
CPU和GPU实测yolov3检测同一张图片,cpu到7、8s,GPU就是0.几s的量级
如果对于精确度要求不是特别高,而机器配置低对速度要求更高,建议使用yolov3-tiny版本(轻量,速度也可)

2、下载与训练模型

yolov3.weights
模型文件包括**.cfg配置文件和.weights**权重文件
.cfg文件在项目中 /cfg目录
下载权重文件:
https://pjreddie.com/media/files/yolov3.weights
或者
https://pjreddie.com/media/files/yolov3-tiny.weights

3、使用预训练模型测试目标检测

最简单的检测命令,在根目录下执行

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

另一种命令写法:

./darknet detector test cfg/coco.data cfg/yolov3.cfg yolov3.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%

其中data文件夹中提供了一些示例图像,以备不时之需。尝试data/eagle.jpg,data/dog.jpg,data/person.jpg,或data/horses.jpg!
以下是我训练tiny模型的检测结果
在这里插入图片描述
到此位置我们可以使用官方提供的预训练模型进行目标检测,后面想在我们自己的场景下使用还需要自己训练样本,调整参数,调用自己的模型进行检测。
下篇介绍,标注自己的PASCAL VOC图片数据集,训练自己的yolov3-tiny模型。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章