1、下载darknet框架
参考官网https://pjreddie.com/darknet/yolo/
git clone https://github.com/pjreddie/darknet
cd darknet
make
2、官网下载预训练权重
wget https://pjreddie.com/media/files/yolo3.weights
3、测试
(1)修改darknet目录下Makefile文件,将GPU、CUDNN、OPENCV的值都改为1(需提前安装显卡驱动、cuda、cudnn、opencv)
(2)修改要使用的cfg文件,以yolov3.cfg为例,将testing下的batch和subdivision取消注释,将training下的batch和subdivision加注释
用图片测试:
1 ./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg
用视频测试:
1 ./darknet detector test cfg/coco.data cfg/yolov3.cfg yolov3.weights
用相机测试:
1 ./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights
一般情况下不需要加sudo就可以执行,但如果出现权限问题,加sudo有效,说明你的cuda安装有问题,但是不会对结果产生影响。
1、将自己的数据集放在指定文件夹下
部分文件夹需要自己新建
在这里插入图片描述
图片统一编号,放在文件夹JPEGImages文件夹中,https://blog.csdn.net/Mihu_Tutu/article/details/103726384
2、图片制作xml文件
用labelImg,下载地址https://github.com/tzutalin/labelImg
我用的是python2
Python2安装labelImg步骤:
sudo apt-get install pyqt4-dev-tools
sudo pip install lxml
make qt4py2
python labelImg.py
这里顺便附上python3的步骤:
sudo apt-get install pyqt5-dev-tools
sudo pip3 install -r requirements/requirements-linux-python3.txt
make qt5py3
python3 labelImg.py
打开之后,改变xml文件存储地址为上图中的Annotations文件夹中。
3、Imagesets文件夹下新建Main文件夹,用来存放训练图片的名字的文档train.txt及测试图片的名字的文档test.txt。下面附上python代码。
原文:https://blog.csdn.net/xue_csdn/article/details/91043911
import os
import random
xmlfilepath=r'/home/huadian/darknet/scripts/VOCdevkit/VOC2007/Annotations'
saveBasePath=r"/home/huadian/darknet/scripts/VOCdevkit/VOC2007/"
trainval_percent=0.8
train_percent=0.7
total_xml = os.listdir(xmlfilepath)
num=len(total_xml)
list=range(num)
tv=int(num*trainval_percent)
tr=int(tv*train_percent)
trainval= random.sample(list,tv)
train=random.sample(trainval,tr)
print("train and val size",tv)
print("traub suze",tr)
ftrainval = open(os.path.join(saveBasePath,'ImageSets/Main/trainval.txt'), 'w')
ftest = open(os.path.join(saveBasePath,'ImageSets/Main/test.txt'), 'w')
ftrain = open(os.path.join(saveBasePath,'ImageSets/Main/train.txt'), 'w')
fval = open(os.path.join(saveBasePath,'ImageSets/Main/val.txt'), 'w')
for i in list:
name=total_xml[i][:-4]+'\n'
if i in trainval:
ftrainval.write(name)
if i in train:
ftrain.write(name)
else:
fval.write(name)
else:
ftest.write(name)
ftrainval.close()
ftrain.close()
fval.close()
ftest .close()
注意路径问题。
使用过程中出现,找不到文件的问题,解决办法是把上述程序在window系统下运行(具体什么原因?需要求助大神)。
4、将xml文件转换为txt文件
在darknet/scripts目录下找到voc_label.py文件,
将sets中的2012相关的去掉,classes改为自己数据集的类别,os.system去掉2012相关,把相应的文件路径改成自己的
运行python voc_label.py,可以看到txt文件出现在labels文件夹下
同时在scripts文件夹下边生成三个txt文件,分别是2007_train.txt、2007_test.txt(一般不会用到)、2007_val.txt
如果出现
说明JPEGImages 文件夹下的图片出现格式问题,建议换一张图片,重新标注。
1、修改voc.nama
位于darknet/data文件夹下,这是目标的标签,清空,添加自己的标签
2、修改voc.data
位于darknet/cfg文件夹下,分别将train、val的路径改为scripts文件夹下边的2007_train.txt、2007_val.txt的路径
3、修改模型(cfg)中的参数
使用yolov3模型
权重文件darknet53.conv.74
下载方式[wget https://pjreddie.com/media/files/darknet53.conv.74]
(1)使用yolov3-voc.cfg,将Training后边的注释去掉,batch=64,修改subdivsion=64(如果该值太小容易使内存溢出),
(2)修改参数cfg/yolov3-voc.cfg
一共有三个yolo。可以通过ctrl+f找到yolo
修改classes = 2 (根据voc-names个数)
然后修改 上面的convolutional中的filters
filters = 3*(5+classes)
(3)回到darknet,开始训练
./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74
修改yolov2模型
权重文件darknet19-448.conv.23
下载方式[wget https://pjreddie.com/media/files/darknet19-448.conv.23]
(1)使用yolov2-voc.cfg,将Training后边的注释去掉,batch=64,修改subdivsion=64(如果该值太小容易使内存溢出)必须是2的指数,
(2)修改[region]层,将classes的值改为自己标签的个数,
[region]层上边最后一个[convolutional]层中,修改filters的数值,计算公式:
filters=num*(classes+coords+1),classes和coords的值都是[region]层中的值
(3)回到darknet,开始训练
./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet19-448.conv.23
(1)Region Avg IOU:平均的IOU,代表着预测的Bounding Box和Ground truth的交集与并集之比,(batch/subdivision)期望该值趋近于1。
(2)Class:是标注物体的概率,期望该值趋近于1。
(3)Obj:期望该值趋近于1。
(4)No Obj:期望该值越来越小,但不为0。
(5)AvgRecall:期望该值趋近于1,召回率比较高说明效果较好
(6)count表示输出有多少个目标总和
训练完一个batch后的参数的意义
(1)30001表示是第30001个batch。
(2)表示总体的损失。
(3)表示平均损失,该数值越低越好。
(4)代表当前的学习率。
(5)表示当前批次训练花费的总时间。
(6)表示参与训练的图片数目的总和。
就可以在darknet/backup文件夹下看到有不同精度的模型(权重)出现。按照每100步、每1000步、每10000步产生。
如果训练中断,但是后面想要接着前边的模型继续训练,(如训练到5100步时中断)只需要把“darknet19_448.conv.23”换成“yolov2-voc_5000.weights”,即可继续训练。
根据需要选择模型测试图片或视频。
测试方法与步骤3类似,需将cfg文件名改为yolov2-voc.cfg,yolov2-voc.cfg中的training下的两个值加注释,testing下的两个值取消注释。如:用摄像头测试:
1 ./darknet detector demo cfg/voc.data cfg/yolov2-voc.cfg yolov2-voc_30000.weights
如果想在bbox上显示准确率,执行:
打开derknet/src文件中找到image.c文件
找到draw_detections函数,加入红色框中的内容,
最后重新编译darknet:
make clean
make