ubuntu1604 使用darknet yolov3训练自己的数据集教程

一:  使用darknet yolov3训练自己的数据集教程(本次由于训练集图片较少,没有验证集,只有训练集,故本教程只针对本次训练(12类12012张图片)进行总结的)
0.官网下载预训练模型文件darknet53.conv.74.
1.准备图片以及标签文件txt
    a.图片(后缀格式不限)以数字进行命名,每一张图片对应一个标签文件txt,与图片名字同名.例如: 10011.jpg 则对应txt文件为: 10011.txt
    b.  Now we need to generate the label files that Darknet uses.
        Darknet wants a .txt file for each image with a line for each ground truth object in the image that looks like:
        <object-class> <x> <y> <width> <height>
        标签文件内容,总共有五项:
        1.所属类别数字编号,此编号从0开始.
        2.boundingbox的中心点x归一化坐标 (center_x/width)
        3.boundingbox的中心点y归一化坐标 (center_y/height)
        4.boundingbox的width归一化坐标  (boundingbox_width/width) 目标框的宽度/图片的宽度
        5.boundingbox的height归一化坐标 (boundingbox_height/height) 目标框的高度/图片的高度
        例如:
            100110000340.jpg
            100110000340.txt
            txt内容: 11 0.504294590643 0.661151960784 0.979989035088 0.430147058824
    c.将所有图片以及标签文件放到同一文件夹下,my12trainImg.

2.生成所有训练图片的路径文件.
    my12trainPath.txt
    内容如下:
    /home/swntech/songsl/my12/darknet/my12data/my12trainImg/100010000311.jpg
    /home/swntech/songsl/my12/darknet/my12data/my12trainImg/100060000153.png

3.类别文件(将英文类别写入文件中,每行一个)
    my12.names
    内容如下:
    Book
    PlasticBottle
    Can
    BeerBottle
    Socket
    Phone
    Screwdriver
    DryCell
    BananaPeel
    CigaretteEnd
    Pen
    Glasses

4.修改训练网络配置文件
    my12yolov3.cfg
    本文件从darknet原始工程cfg/yolov3.cfg复制过来,进行修改.
    1.ctrl+f 搜索 yolo,总共修改三处,每一个都要修改一下两个内容:
        a. filters=51 ##计算公式 3*(class_num + 5).即3*(12+5)=51
        b. classes=12 ##改为训练的类别数

    修改前:
    [convolutional]
    size=1
    stride=1
    pad=1
    filters=255
    activation=linear

    [yolo]
    mask = 6,7,8
    anchors = 10,13,  16,30,  33,23,  30,61,  62,45,  59,119,  116,90,  156,198,  373,326
    classes=80
    num=9
    jitter=.3
    ignore_thresh = .7
    truth_thresh = 1
    random=1

    修改后:
    [convolutional]
    size=1
    stride=1
    pad=1
    filters=51 ##计算公式 3*(class_num + 5).即3*(12+5)=51
    activation=linear

    [yolo]
    mask = 6,7,8
    anchors = 10,13,  16,30,  33,23,  30,61,  62,45,  59,119,  116,90,  156,198,  373,326
    classes=12 ##改为训练的类别数
    num=9
    jitter=.3
    ignore_thresh = .7
    truth_thresh = 1
    random=1

5.修改配置data文件
    my12.data
    内容如下:
    classes= 12 ##类别数
    train  = /home/swntech/songsl/my12/darknet/my12data/my12trainPath.txt ##所有训练图片的路径文件
    names = /home/swntech/songsl/my12/darknet/my12data/my12.names  ##类别文件
    backup = /home/swntech/songsl/my12/darknet/my12data/my12model  ##指定模型保存路径
    eval=coco
===========以上六步本次训练已经准备完毕(只有训练集的情况)===========

6.开始训练(需在mydata同级目录下执行)
    train_my12.sh
    将train_my12.sh  复制到mydata同级目录下(cp ./train_my12.sh ..)
    ./darknet detector train my12data/my12.data my12data/my12yolov3.cfg my12data/my12model/darknet53.conv.74 ##此命令会把输出log打印到屏幕上,不会保存
    或者以下命令可以保存log到文件:
    ./darknet detector train my12data/my12.data my12data/my12yolov3.cfg my12data/my12model/darknet53.conv.74 2>&1|tee ./my12data/log/log|grep "Loaded"
===========此时训练已经开始,静候佳音即可======================

7.命令行测试单张图片
    ./darknet detect my12data/my12yolov3.cfg my12data/my12model/yolov3.weights my12data/my12testImg/dog.jpg


二:训练参数讲解
几个尺寸说明
(1)batch_size:批大小。即每次训练在训练集中取batch_size个样本训练; 
(2)iteration:1个iteration等于使用batchsize个样本训练一次; 
(3)epoch:1个epoch等于使用训练集中的全部样本训练一次;
1.
    Region 82 Avg IOU: 0.890300, Class: 0.999051, Obj: 0.996995, No Obj: 0.003727, .5R: 1.000000, .75R: 1.000000,  count: 2
    Region 94 Avg IOU: -nan, Class: -nan, Obj: -nan, No Obj: 0.000000, .5R: -nan, .75R: -nan,  count: 0
    Region 106 Avg IOU: -nan, Class: -nan, Obj: -nan, No Obj: 0.000000, .5R: -nan, .75R: -nan,  count: 0

    Region xx: cfg文件中yolo-layer的索引;
    Avg IOU:   当前迭代中,预测的box与标注的box的平均交并比,越大越好,期望数值为1;
    Class:        标注物体的分类准确率,越大越好,期望数值为1;
    obj:            越大越好,期望数值为1;
    No obj:      越小越好;
    .5R:            以IOU=0.5为阈值时候的recall; recall = 检出的正样本/实际的正样本
    0.75R:         以IOU=0.75为阈值时候的recall;
    count:        正样本数目.

2.
    94296: 0.026593, 0.021316 avg, 0.000001 rate, 3.078118 seconds, 3017472 images
    94296: 指示当前训练的batch的次数(batch 的次数,在my12yolov3.cfg中batchs设的64)
    0.026593: 是总体的Loss(损失)
    0.021316 avg: 是平均Loss,这个数值应该越低越好,一般来说,一旦这个数值低于0.060730 avg就可以终止训练了。
    0.000001 rate: 代表当前的学习率,是在.cfg文件中定义的。
    3.078118 seconds: 表示当前批次训练花费的总时间。
    3017472 images: 这一行最后的这个数值是94296*64的大小,表示到目前为止,参与训练的图片的总量。

基本上avg loss 低于0.06就可以停止训练了.(本次训练最低0.02,再训练也基本不变了)

三:训练中调整参数
1.学习率调整(my12yolov3.cfg)
    learning_rate=0.00001 #每次在这里调整学习率,然后接着训练
    burn_in=1000
    max_batches = 500200
    policy=steps
    steps=400000,450000
    scales=.1,.1

    接着指定的模型进行训练
    ./darknet detector train my12data/my12.data my12data/my12yolov3.cfg my12data/my12model/my12yolov3_51700.weight(指定从哪个模型开始)

四:常见问题
1.修改modle保存间隔
  examples/detector.c 138行,现在每1000个batches保存一次
  // if(i%10000==0 || (i < 1000 && i%100 == 0)){
  if(i%1000==0){  //shouliang.song@swntech.com add 20190812

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Ubuntu训练自己的数据集,首先你需要下载Yolov4的权重文件。你可以在以下链接找到yolov4.weights文件:https://github.com/AlexeyAB/darknet/releases/download/darknet_yolo_v3_optimal/yolov4.weights。 接下来,你需要准备你自己的数据集,并且将其标注为YOLO的格式。确保你的数据集包括图像文件和对应的标注文件,标注文件应该包括每个物体的类别和边界框的位置信息。 然后,你需要修改Yolov4的配置文件yolov4.cfg,将其的几个参数进行修改,例如类别的数量、训练和测试数据集的路径等。这些修改将根据你自己的数据集来进行。 在配置文件修改完成后,你可以使用以下命令来进行训练: ./darknet detector train data/obj.data cfg/yolov4.cfg yolov4.weights 这个命令会使用你自己的数据集和预训练的权重文件进行训练。请确保你已经将数据集的路径正确地填写在obj.data文件。 在训练过程,你可以观察到实时的损失图像。这是Yolov4与之前的Yolov3不同之处之一。 训练过程通常需要较长的时间,具体时间取决于你的数据集的大小和计算资源的性能。在训练完成后,你可以使用训练好的权重文件进行目标检测任务。 请注意,训练一个准确且高性能的Yolov4模型需要一定的技术和计算资源,包括GPU加速和大量的训练数据。因此,在开始训练之前,请确保你已经准备好了相应的资源和数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值