Yolov3训练自己的数据集(linux版)

训练数据集

1.下载yolov3工程项目

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

2.修改Makeflie配置文件

GPU=1    #如果使用GPU训练就设置为1CPU设置为0
CUDNN=1  #使用GPU就需要调用到CUNDD,当使用GPU时就设置为1,否则设置为0
OPENCV=0 #需要调用摄像头则设置为1,否则设置为0
OPENMP=0 
DEBUG=0

ARCH= -gencode arch=compute_30,code=sm_30 \
      -gencode arch=compute_35,code=sm_35 \
      -gencode arch=compute_50,code=[sm_50,compute_50] \
      -gencode arch=compute_52,code=[sm_52,compute_52]
#      -gencode arch=compute_20,code=[sm_20,sm_21] \ This one is deprecated?

# This is what I use, uncomment if you know your arch and want to specify
# ARCH= -gencode arch=compute_52,code=compute_52

VPATH=./src/:./examples
SLIB=libdarknet.so
ALIB=libdarknet.a
EXEC=darknet
OBJDIR=./obj/

CC=gcc
CPP=g++
NVCC=/usr/local/cuda-10.0/bin/nvcc #需要修改成自己的路径
AR=ar

建议NVCC的路径去看看自己相对应的文件夹中是否存在nvcc,以免存在错误。

  • Makeflie保存完成之后,在darknet目录下执行make
  • 下载yolov3的模型文件进行测试一下
    wget https://pjreddie.com/media/files/yolov3.weights
  • 进行测试
    ./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg

看配置是否存在问题。

3.准备训练的VOC数据集

VOC数据集的结构:

VOCdevkit

  • VOC2007
    • Annotations
    • ImageSets
      • main
    • JPEGImages

Annotations文件夹中一般是存放xml的文件,对应的是图片标识的坐标。
ImageSets/main文件夹中一般存放4个自动生成的txt文件。
JPEGImages文件夹中存放图片。

这里给出自动生成的4个txt的代码:

text.py

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('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()

将其放在与Annotations,ImageSets,ImageSets文件夹同一目录下,运行text.py代码即可生成main中的四个文件。
最后将VOCdevkit文件夹放在darknet/data文件夹中。

最后是需要生成YOLO所需要的VOC标签,首先复制darknet/scripts中的voc_label.py到darknet/data文件夹中。
修改darknet/data/voc_label.py

#由于没有使用到voc2012的数据集,所以将2012的删除
sets=[ ('2007', 'train'), ('2007', 'val'), ('2007', 'test')]

#种类按照自己的数据集来
classes = ["person"]

#最后一段也一样修改
os.system("cat 2007_train.txt 2007_val.txt > train.txt")
os.system("cat 2007_train.txt 2007_val.txt 2007_test.txt > train.all.txt")

在data文件夹中运行voc_lable.py,在data文件夹中生成2007_test.txt,2007_train.txt,2007_val.txt,train.all.txt,train.txt文件即完成VOC数据集的制作。

4.yolov3训练数据集

修改cfg/voc.data文件

classes= 1     #数据集的类别数
train  = data/train.txt   #train文件路径
valid  = data/2007_test.txt #test文件路径
names = data/voc.names 
backup = backup #模型保存的文件夹

在darknet文件夹中创建backup文件夹,以免保存模型的时候,找不到路径而出现错误。

修改data/voc.names文件,将类别修改为自己数据集的类别。

person #修改为自己的类别

修改cfg/yolo-voc.cfg

[net]
# Testing
#batch=1    #将这里注释掉
#subdivisions=1	#将这里注释掉
#Training
batch=64	#这里取消注释
subdivisions=16	#这里取消注释
width=416
height=416
channels=3
momentum=0.99
decay=0.0005
angle=0
saturation = 1.5
exposure = 1.5
hue=.1

搜索文件内含有yolo的地方,3个yolo。注意是要修改三个地方的yolo!

[convolutional]
size=1
stride=1
pad=1
filters=18 	#修改这里 按照3*(5+len(class))来计算
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=1   #按照数据集分类来修改
num=9
jitter=.3
ignore_thresh = .5
truth_thresh = 1
random=1	#显存小就修改为0

在darknet文件夹下载预先训练的权重文件
wget https://pjreddie.com/media/files/darknet53.conv.74

下载完成之后就可以训练数据集了,在darknet文件夹下使用下面命令即可训练
sudo ./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74

易出现的错误

1.在make时出现

当出现/build/tools/caffe: error while loading shared libraries: libcudart.so.10.0错误

解决:
将cuda的lib中的链接库复制到path目录下:

sudo cp /usr/local/cuda-10.0/lib64/libcudart.so.10.0 /usr/local/lib/libcudart.so.10.0 && sudo ldconfig
sudo cp /usr/local/cuda-10.0/lib64/libcublas.so.10.0 /usr/local/lib/libcublas.so.10.0 && sudo ldconfig
sudo cp /usr/local/cuda-10.0/lib64/libcurand.so.10.0 /usr/local/lib/libcurand.so.10.0 && sudo ldconfig

2.配置文件编码问题

当出现First section must be [net] or [network]: No such file or directory错误

解决:
将该文件修改格式
在vim下 :set ff=unix
保存文件退出

3.使用GPU训练报错

当出现CUDA Error: invalid device ordinal错误

解决:
使用自己所需要的GPU训练
sudo ./darknet -i 0 detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74

发布了1 篇原创文章 · 获赞 3 · 访问量 1107

猜你喜欢

转载自blog.csdn.net/qq_42751792/article/details/105629881