1、标注自己的数据集
2、按照YoLo官网下载,下载yolov3项目工程
git clone https://github.com/pjreddie/darknet
cd darknet
make
3、修改修改darknet目录下的makefile
1、打开文件
vi Makefile
2、如需使用GPU训练,进行如下修改:
GPU=1 #使用GPU训练
CUDNN=0
OPENCV=0
OPENMP=0
DEBUG=0
3、make #必须进行make才可生效
4、准备数据集。
在scripts文件夹下创建文件夹VOCdevkit,目录结构如下:
Main中的文件分别包括test.txt是测试集,train.txt是训练集,val.txt是验证集,trainval.txt是训练和验证集,我只选用了训练集和验证集。
在VOC2019目录下建立test.py,代码如下:
import os
import random
val_percent = 0.1
train_percent = 0.9
xmlfilepath = 'Annotations'
txtsavepath = 'ImageSets\Main'
total_xml = os.listdir(xmlfilepath)
num = len(total_xml)
list = range(num)
tv = int(num * val_percent)
tr = int(tv * train_percent)
val = random.sample(list, tv)
train = random.sample(val, tr)
ftrain = open('ImageSets/Main/train.txt', 'w')
fval = open('ImageSets/Main/val.txt', 'w')
for i in list:
name = total_xml[i][:-4] + '\n'
if i in train:
ftrain.write(name)
else:
fval.write(name)
ftrain.close()
fval.close()
可以得到所需的train.txt和val.txt的内容
5、修改voc_label.py如下三处的内容,得到YOLOV3需要的数据形式
python voc_label.py 运行可得到如下所示文件:
6、修改程序:
修改data/voc.name为自己的类别:
修改cfg/voc.data
修改cfg/yolov3-voc.cfg
这里需要注意的是batch和subdvisions的数值,batch/subdvisions的值就是每次丢进去训练的图片数,batch和subdvisions数值太大会导致内存消耗太大。我训练时未生成权重文件就是因为内存不够,训练到后面直接强制停止,后面修改了batch和subdvisions的值才生成权重文件,此外,训练多少次生成权重文件,可以通过train.py中如下代码进行修改,下面的代码是每训练10次保存一次权重文件。
if epoch > 0 and epoch % 10 == 0:
torch.save(chkpt, weights + 'backup%g.pt' % epoch)
直接搜索yolo,会出现三个yolo,我们需要将filters改成(classes+5)*3的数值,将classes改成自己的类别数,random=0为关闭多尺度训练。
7、下载预训练模型
wget https://pjreddie.com/media/files/darknet53.conv.74
将darknet53.conv.74放到scripts目录下
8、开始训练
./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg scripts/darknet53.conv.74 -gpus 0,1
刚开始训练loss比较大,到100次之后会降的比较快了。
本文参考了网上其他人的经验,如有不足,请多指教哦
参考的部分博客链接如下:https://blog.csdn.net/weixin_42731241/article/details/81352013