Darknet框架下训练自己的yolov3模型

Darknet框架下训练自己的yolov3模型
1.配置环境(这里是在linux环境下进行训练)
Ubuntu18.04+opencv3.4.3+cuda10.0+cudnn7.5
显卡GTX1080(我选的驱动版本是nvidia-driver-450)
嫌麻烦自己下驱动安装的可以在软件和更新->附加驱动里面更新驱动。
cuda和cudnn参考下面博客
Ubuntu18.04安装opencv3.4.3
https://blog.csdn.net/qq_41080854/article/details/88609795.
ubuntu18.04安装nvidia驱动(435),cuda10.0和cudnn7.5
链接: https://blog.csdn.net/weixin_43802384/article/details/103703843.
2.下载darknet文件

git clone https://github.com/pjreddie/darknet

3.进入darknet文件夹把data->voc.names中的类名修改为自己的类名(一行一个)
4.创建数据集文件
(1)进入darknet->scripts
(2)创建文件名目录

  • VOCdevkit
  • voc_label.py(文件里面有的,下面需要修改部分代码)
    • VOC2007
      • Annotations #存放入所有的xml文件
      • ImageSets
        ----Main
      • JPEGImages #放入所有的图片
      • labes
      • split.py

split.py 代码

#!/usr/bin/env python
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()

将自己的图片和.xml文件放置正确位置后,先运行split.py

$   ./split.py

后修改voc_label.py文件,在文件头加入

#!/usr/bin/env python

将最后两行代码注释掉


#os.system("cat 2007_train.txt 2007_val.txt 2012_train.txt 2012_val.txt > train.txt")
#os.system("cat 2007_train.txt 2007_val.txt 2007_test.txt 2012_train.txt 2012_val.txt > train.all.txt")

修改sets

sets=[ ('2007', 'train'), ('2007', 'val'), ('2007', 'test')]

将classes修改成自己的类(与自己在voc.names中的类名和顺序相同)
保存并运行voc_label.py

./voc_label.py

5.修改cfg->yolov3-voc.cfg

# Testing            ### 测试模式                                          
# batch=1
# subdivisions=1
# Training           ### 训练模式
batch=64
subdivisions=16
......
[convolutional]
size=1
stride=1
pad=1
filters=3*(classes+4+1)  #例如类个数=3,则filters=24。
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=3  #类别
......
!!!以下还有两处classes和filters需要修改

6.修改darknet->Makefile

GPU=1 #如果使用GPU设置为1,CPU设置为0
CUDNN=1  #如果使用CUDNN设置为1,否则为0
OPENCV=1 #如果调用摄像头,还需要设置OPENCV为1,否则为0
OPENMP=0  #如果使用OPENMP设置为1,否则为0
DEBUG=0  #如果使用DEBUG设置为1,否则为0

CC=gcc
NVCC=/home/user/cuda-9.0/bin/nvcc   #NVCC=nvcc 修改为自己的路径

7.下载预训练权重文件

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

8.将darknet53.conv.74预训练权重文件放在darknet文件目录下,然后运行以下命令

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

训练时的状态(模型.weights文件默认保存在backup文件夹里,模型保存规则默认是迭代1000次以内,每100次保存一个权重(.weight)文件,此后是每10000次保存一次权重(.weight)文件,如果想每1000次保存一次权重文件的话可以在darknet>examples->detector.c文件中)把

 if(i%10000==0 || (i < 1000 && i%100 == 0))   //大概在138行

修改为

 if(i%10000==0 || i%1000==0 || (i < 1000 && i%100 == 0))

训练时的状态
训练时的状态
9.对模型的一些操作
(1)停止训练

ctrl+c

(2)继续训练

./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg backup/yolov3-voc_xxxx.weights(记得改yolov3-voc.data和权重文件名)

(3)检测

./darknet detector demo  cfg/voc.data cfg/yolov3-voc.cfg backup/yolov3-voc_xxxx.weights(摄像头)
./darknet detector test cfg/voc.data cfg/yolov3-voc.cfg backup/yolov3-voc_xxxx.weights data/xxxx.jpg(图片)
./darknet detector demo cfg/voc.data cfg/yolov3.cfg yolov3.weights <video file>  (视频文件)

萌新一枚,如有写的不当之处还请多多包涵

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值