【YOLO v3】制作训练集以及训练步骤

一。制作训练集
1
创建文件夹,
在这里插入图片描述
图片存储在JPEGImages文件夹中
2
使用labellimg工具,标记图片,生成.XML格式的文件,存储在目录Annotation下,
3
生成ImageSets文件夹中的Main文件夹中的四个文件. test.txt是测试集,train.txt是训练集,val.txt是验证集,trainval.txt是训练和验证集.VOC2007中,trainval大概是整个数据集的50%,test也大概是整个数据集的50%;train大概是trainval的50%,val大概是trainval的50%,下面的代码生成这四个文件,百分比可以自己调整.
程序:

import os  
import random  
  
trainval_percent = 0.7  
train_percent = 0.5  
xmlfilepath = 'Annotations'  
txtsavepath = 'ImageSets\Main'  
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)  
  
ftrainval = open('ImageSets/Main/trainval.txt', 'w')  
ftest = open('ImageSets/Main/test.txt', 'w')  
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 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()  

在这里插入图片描述
在这里插入图片描述

import os  
import random  
 
trainval_percent = 0.5  
train_percent = 0.5  
xmlfilepath = 'Annotations'  
txtsavepath = 'ImageSets/Main'  
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)  
 
ftrainval = open(txtsavepath+'/trainval.txt', 'w')  
ftest = open(txtsavepath+'/test.txt', 'w')  
ftrain = open(txtsavepath+'/train.txt', 'w')  
fval = open(txtsavepath+'/val.txt', 'w')  
 
for i  in list:  
    name=total_xml[i][:-4]+'\n'  
    if i in trainval:  
        ftrainval.write('/home/hb/darknet/scripts/VOCdevkit/VOC2007/JPEGImages/'+name)  
        if i in train:  
            ftrain.write('/home/hb/darknet/scripts/VOCdevkit/VOC2007/JPEGImages/'+name)  
        else:  
            fval.write('/home/hb/darknet/scripts/VOCdevkit/VOC2007/JPEGImages/'+name)  
    else:  
        ftest.write('/home/hb/darknet/scripts/VOCdevkit/VOC2007/JPEGImages/'+name)  
 
ftrainval.close()  
ftrain.close()  
fval.close()  
ftest .close()

并且,在图片后面加后缀.jpg
如:

/home/hb/darknet/scripts/VOCdevkit/VOC2007/JPEGImages/120.jpg
/home/hb/darknet/scripts/VOCdevkit/VOC2007/JPEGImages/28.jpg

并且在/darknet/scripts文件夹内会生成2007_train.txt、2007_test.txt、2007_val.txt三个文件。到此,数据准备完成。

4.运行将XML生成txt文件的脚本命令
在这里插入图片描述
文件下载到VOCdevkit同级的路径下,生成训练和验证的文件列表 ,如果下载好了darknet项目,在darknet/scripts/目录下也有voc_lable.py
运行命令:python voc_label.py, 这个文件需要更改里面的相关信息,
运行后发现label文件夹下面已经生成了对应的txt标签

PS:运行后,制作的120张图片只生成了54个txt,初步判断可能是图片样本质量问题导致的

二。修改配置文件
a.cfg/voc.data文件中: 在这里插入图片描述
classes是分类数目,train 和valid 放着的是训练图片和验证图片的路径
names里面放分类的名称文档,backup文件夹是用于保存训练模型的
b.yolo-voc.cfg
将[region]中的classes改为4,
将最后一个[convolutional](紧挨着[region]的前一个)中的filter改为30(filter的公式filters=(classes+ coords+ 1)* (NUM) ,我的是(4+4+1)* 5=45)

三。训练
将下载的权重模型放在scripts文件夹中
现在是训练,要引掉cfg中的testing了,batch和subdivisions测试时等于1,放在训练里肯定是不行的,难以收敛。


# Testing
 #batch=1 #检测时去掉前面的`#`,注释training里面对应两行的内容 
 #subdivisions=1 #检测时去掉前面的`#`,注释training里面对应两行的内容 
 # Training
 # batch=64 #训练时去掉前面的`#
 # subdivisions=8 #训练时去掉前面的`#`
   ... 
   ### 修改数值的时候不能用全部替换操作,手动修改### filters= 18 #[检测目标数(classes)+ 5 ] * 3 在[yolo]标签上面4行。 一共三处 ...
   classes = 1 #目标类的数量,此处为一类物体。
    [yolo]标签下面3行。一共三处
     ...
    random=0 ##显存大可以改为1,可以提高精度。

训练指令

./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg scripts/darknet19_448.conv.23 -gpus 0,1

训练之前记得将darknet中的makefile文件夹中更改配置,然后make编译,才可运行并使用GPU。

测试
命令:
~/darknet$ ./darknet detector test cfg/voc.data cfg/yolov3-voc.cfg backup/yolov3-voc_800.weights data/18.jpg -thresh 0.25
其中-thresh 0.25是阈值,可以更改。

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值