YOLOv3训练自己的数据集

1.机器配置

  • 系统:Ubuntu 18.04
  • 显卡:GeForce GTX 1060 6GB/PCIe/SSE2
  • CPU:Intel® Core™ i5-8400 CPU @ 2.80GHz × 6
  • 内存:15.5 GiB

2.环境配置

  • Opencv 3.4.4
  • CUDA 9.0
  • cuDNN
  • NVIDIA显卡驱动

YOLOv3环境配置参考资料

3.制作自己的数据集(VOC格式)

(1)创建文件夹

 文件夹格式如下

  • VOC2007
    • Annotations

    • ImageSets

      • Layout
      • Main
      • Segmentation
    • JPEGImages

    • labels

其中:
Annotations文件夹中放置数据标注后的文件,也就是*.xml文件。
Main文件夹中放置test.txt 、train.txt 、trainval.txt 、val.txt文件。(文件主要是用来训练或测试的图像的名称)
JPEGImages文件夹中放置所有要训练的图片,图片按照000001.jpg、000002.jpg ······类似这种格式放置。(按照统一规则命名)

创建好文件夹后,在 scripts文件夹中创建文件夹VOCdevkit(如果有就不必创建),然后 将VOC2007文件夹整体放入VOCdevkit中,形成/darknet/scripts/VOCdevkit/VOC2007第一步就算完成了。

(2)标注图片数据集

  将所有图片数据集放到/darknet/scripts/VOCdevkit/VOC2007/JPEGImages文件夹中。(按照统一规则命名)
在这里插入图片描述
  使用labelImg标注图像。(labelImg的安装与使用
  将标注好的 .xml 文件保存到/darknet/scripts/VOCdevkit/VOC2007/Annotations文件夹中。(按照统一规则命名)
在这里插入图片描述

(3)配置文件
  • /darknet/scripts/VOCdevkit/VOC2007下新建test.py文件,将下面代码拷贝进去并运行,将在/darknet/scripts/VOCdevkit/VOC2007/ImageSets/Main中生成四个文件:test.txt 、train.txt 、trainval.txt 、val.txt。
import os
import random

trainval_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 * 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:
            ftest.write(name)
        else:
            fval.write(name)
    else:
        ftrain.write(name)

ftrainval.close()
ftrain.close()
fval.close()
ftest.close()
  • 修改/darknet/cfg/voc.data文件,class为类别数目,train为训练数据txt所放的位置,valid为validation数据txt所放的位置,names为voc.names所放的位置,backup为模型训练过程中存储模型参数的位置。
    在这里插入图片描述
  • 修改/darknet/data/voc.names文件,一行一个类别标签。

在这里插入图片描述

  • 修改/darknet/cfg/yolov3-voc.cfg,用的哪个模型就修改哪个模型的.cfg文件,这边用动是yolov3-voc。

    • 修改batchsize=64和subdivisions=64,batch_size表示每一个批次用来训练的图片张数,subdivisions表示一个批分成几组导入训练。若出现GPU训练动时候提示memory_out可以修改这两个参数试试;
    • filters=75->filters=21,计算公式为filters=3x(classes数目+5);
    • [yolo]子参数下,classes大小改成你的训练数据的类别数目,这边为2,random改成0(关闭多尺度训练,如果显存足够可以置为1)

    在这里插入图片描述

    (4)转换XML数据集格式

     将.xml文件转换成.txt文件
    .xml包含了图像名称、图像路径、图像size和深度、标记框的坐标信息
    .txt包含了object-class 、x、y、width、 height。
      在终端输入

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

下载python文件。下载好之后修改其中的内容。这里需要修改两个地方,sets和classes,classes根据自己需要修改。

  接下来运行该文件,我们的目录下会生成三个txt文件2007_train.txt、2007_val.txt、2007_test.txt, VOCdevkit下的VOC2007也会多生成一个labels文件夹,下面是真正会使用到的label,点开看发现已经转化成YOLOV3需要的格式了。这时候自己的数据集正式完成。
  在终端输入:

python voc_label.py
cat 2007_train.txt 2007_val.txt  > train.txt

4.训练及检测

  下载权重:

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

  开始训练:

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

  进行检测:(其中yolov3-voc.weights是你自己训练好的权重,在/darknet/backup

./darknet detector test cfg/voc.data cfg/yolov3-voc.cfg yolov3-voc.weights

参考资料:
https://blog.csdn.net/maozezhong0/article/details/80144641
https://blog.csdn.net/qq_21578849/article/details/84980298

   
   

   

  

  • 1
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
在使用YOLOv3训练自己的数据集时,你需要进行以下几个步骤的修改: 1. 数据集标注格式:YOLOv3使用的是Darknet格式的标注文件,每个图像对应一个同名的txt文件,其中包含了物体类别和边界框的位置信息。如果你的数据集使用其他格式,你需要将其转换为Darknet格式。 2. 类别数量:根据你的数据集中物体的类别数量,你需要在模型配置文件中修改类别数目。在YOLOv3中,这个配置文件通常是`yolov3.cfg`或`yolov3-tiny.cfg`。 3. 锚框(anchors)设置:YOLOv3使用了预定义的锚框来提取不同尺度的目标框。如果你的数据集中的对象尺度与预定义锚框不匹配,你需要在模型配置文件中修改锚框的尺寸。这些锚框信息通常在`[yolo]`层中定义。 4. 输入图像尺寸:YOLOv3网络对输入图像的大小有一定要求。默认情况下,YOLOv3要求输入图像的宽高为32的倍数。如果你的图像尺寸不满足这个要求,你需要在模型配置文件中修改对应的参数。 5. 训练参数:根据你的数据集训练需求,你可能需要修改训练参数,如学习率、批次大小、迭代次数等。这些参数通常在训练脚本中进行设置。 除了以上修改,你还需要注意确保数据集的正确性,包括标注准确、类别均衡、图像质量等。此外,为了获得更好的检测性能,你可能需要调整其他超参数,如网络深度、特征图数量等。这些超参数可以在模型配置文件中进行调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值