Darknet+Yolo安装测试并使用VOC数据集训练

项目源代码在github上下载,网址为: pjreddie/darknet
系统:ubuntu

首先创建并激活环境

conda create -n yolo-darknet
conda activate yolo-darknet

安装框架

cd darknet-master
make

安装完成之后测试

./darknet

测试结果为:

usage: ./darknet <function>

使用YOLO提供的模型利用darknet进行预测,在官网地址下载yolov3.weights的权重文件(模型)

执行如下命令

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

person.jpg是darknet/data/person.jpg目录下的一张图片,识别成功的图片位置是darknet/predictions.jpg,能够看到检测效果图
Darknet+Yolo安装测试并使用VOC数据集训练
终端中打印出以下LOG

  ......
  106 yolo
Loading weights from yolov3.weights...Done!
data/person.jpg: Predicted in 22.345468 seconds.
horse: 100%
person: 100%
dog: 99%

配置GPU

程序跑通之后,需要了解一些基本的配置
打开makefile可以看到如下内容

GPU=0
CUDNN=0
OPENCV=0
OPENMP=0
DEBUG=0
......

刚刚使用CPU检测了一张图片,如果你安装好了CUDA,那么现在可以使用GPU来识别。将makefile中的GPU=0修改为

GPU=1

即可,默认是使用第一块显卡(卡槽序号0)。然后再次在项目的根目录打开终端使用

make

重复试验预测命令,就会发现预测速度大大提高。
运行之后会出现的错误:

darknet: ./src/cuda.c:36: check_error: Assertion `0' failed.

将根目录下的cfg文件中yolov3.cfg中的

batch=64
subdivisions=16

改为

batch=16
subdivisions=8

对YOLO训练VOC数据集训练

下载数据集并解压

wget https://pjreddie.com/media/files/VOCtrainval_11-May-2012.tar
wget https://pjreddie.com/media/files/VOCtrainval_06-Nov-2007.tar
wget https://pjreddie.com/media/files/VOCtest_06-Nov-2007.tar
tar xf VOCtrainval_11-May-2012.tar
tar xf VOCtrainval_06-Nov-2007.tar
tar xf VOCtest_06-Nov-2007.tar

上面的数据下载到一起后,解压会同时存在与VOCdevkit/目录。

运行官方提供的脚本生成指定格式的label文件

wget https://pjreddie.com/media/files/voc_label.py
python voc_label.py

运行完成之后根目录下会出现以下几个文件
2007_test.txt
2007_train.txt
2007_val.txt
2012_train.txt
2012_val.txt
这些txt文件汇总了所需训练或者验证的图片的绝对路径,后面训练的时候需要用到。合并这些训练集,然后运行

cat 2007_train.txt 2007_val.txt 2012_*.txt > train.txt

即将所有2007年和2012年的训练时间定为一个大清单,就是我们训练时所需的数据。

修改训练的配置和下载预训练的权重

打开cfg/voc.data文件修改训练集和测试集文件的路径(用放置VOC数据的目录替换)

  1 classes= 20
  2 train  = <path-to-voc>/train.txt
  3 valid  = <path-to-voc>2007_test.txt
  4 names = data/voc.names
  5 backup = backup

然后下载预训练权重

wget https://pjreddie.com/media/files/darknet53.conv.74

训练VOC模型指令

./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74

运行一短时间后报错

Resizing
448
CUDA Error: out of memory
darknet: ./src/cuda.c:36: check_error: Assertion `0' failed.

我在解决此问题时有两个步骤,首先使用

watch -n 10 nvidia-smi

实时查看GPU占用情况,是否有大量占用GPU的程序在运行,使用指令

kill -9 PID

强行关闭大量占用GPU的程序
然后再次运行训练VOC模型指令,如果还是报错,则修改/home/alex/darknet-master/cfg/yolov3.cfg下yolov3-voc.cfg文件中前几行

[net]
# Testing
#batch=1
#subdivisions=1
# Training
 batch=64
 subdivisions=16

subdivision:这个参数的意思是让你的每一个batch不是一下子都丢到网络里。而是分成subdivision对应数字的份数,一份一份的跑完后,在一起打包算作完成一次iteration。这样会降低对显存的占用情况。如果设置这个参数为1的话就是一次性把所有batch的图片都丢到网络里,如果为2的话就是一次丢一半。

经过四天左右的训练时间训练完成,显示结果如下图:
Darknet+Yolo安装测试并使用VOC数据集训练此文章参考了多个博客,仅作学习记录,每天进步一点点

上一篇:YOLO(一):YOLOv3在Windows7(无GPU)下的配置+opencv3.1.0+VS2015


下一篇:某图片网站整合yolo图片特征相似图片获取