yolov3 训练自己的数据集

        历时4天,沐浴着22楼的阳光,围着服务器取暖,终于把权重文件给训练出来了,期间遇到一些问题,下面我会列举,以免大家走太多弯路;然后服务器配置还不正确,对于一个小白来说,简直崩溃,又去网上找了大量教程,终于把cuda版本改成了9.0,GPU能用了,但是opencv还是不能用,一会再去调一下。

       先放最后的测试结果,训练的是表的类型,一共有180张图片(训练集+测试集),有s,m,l,xl,xxl五种类型,这个是m的,由于部分原因,没有训练到最后(所以只生成了yolov3_10000.weight)

1.下载yolov3的工程

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

2.修改配置文件

vi Makefile
GPU = 1 #如果想用GPU进行训练

CUDNN = 1

OPENCV = 1

然后保存,

make  #记住一定要make才能生效

如果服务器配置都是好的,那基本会成功,不成功的话就检查一下cuda,cudnn,opencv这些版本是否兼容吧。

3.darknet里面有一个scripts文件夹,在scripts里面建一个VOCdevkit文件夹,然后在VOCdevkit里面建一个VOC2007文件夹,然后在VOC2007里面建三个文件夹,分别为Annotations,ImageSets,JPEGImages,然后在ImageSets里面建一个Main文件夹(这些是为了和下面的脚本文件路径)

scripts
  --VOCdevkit
    --VOC2007
      --Annotations
      --ImageSets
        --Main
      --JPEGImages

Annotations中放所有的xml文件;JPEGImages中放所有的图片;Main中放train.txt和val.txt。

4.生成train.txt和val.txt

#这个小脚本是用来打开图片文件所在文件夹,把前149个用于训练的图片的名称保存在train.txt,后31个用于验证的图片保存在val.txt,这是一个python文件,别忘记自己修改路径,不能完全照搬,先看一下代码,修改好之后运行就会生成两个txt

import os
from os import listdir, getcwd
from os.path import join
if __name__ == '__main__':
    source_folder='/home/lijintao/darknet/scripts/VOCdevkit/VOC2007/JPEGImages/'#地址是所有图片的保存地点
    dest='/home/lijintao/darknet/train.txt' #保存train.txt的地址
    dest2='/home/lijintao/darknet/val.txt'  #保存val.txt的地址
    file_list=os.listdir(source_folder)       #赋值图片所在文件夹的文件列表
    train_file=open(dest,'a')                 #打开文件
    val_file=open(dest2,'a')                  #打开文件
    for file_obj in file_list:                #访问文件列表中的每一个文件
        file_path=os.path.join(source_folder,file_obj) 
        #file_path保存每一个文件的完整路径
        file_name,file_extend=os.path.splitext(file_obj)
        #file_name 保存文件的名字,file_extend保存文件扩展名
        file_num=int(file_name) 
        #把每一个文件命str转换为 数字 int型 每一文件名字都是由四位数字组成的  如 0201 代表 201     高位补零  
        if(file_num<150):                     #保留149个文件用于训练
            #print file_num
            train_file.write(file_name+'\n')  #用于训练前149个的图片路径保存在train.txt里面,结尾加回车换行
        else :
            val_file.write(file_name+'\n')    #其余的文件保存在val.txt里面
    train_file.close()#关闭文件
val_file.close()

5.修改voc_label.py

sets=[('2007', 'train'), ('2007', 'val')]
classes = ["s", "m", "l", "xl", "xxl"]
os.system("cat 2007_train.txt 2007_val.txt > train.txt")  #倒数第二行改成这样,最后一行删掉

6.执行voc_label.py

在scripts下生成了2007_train.txt 和 2007_val.txt,分别存放了训练集和测试集图片的路径。

7.下载预训练模型

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

8.修改cfg/voc.data

classes= 5 #classes为训练样本集的类别总数 
train  = /home/lijintao/darknet/scripts/2007_train.txt #train的路径为训练样本集所在的路径 
valid  = /home/lijintao/darknet/scripts/2007_val.txt #valid的路径为验证样本集所在的路径 
names = data/voc.names #names的路径为data/voc.names文件所在的路径 
backup = backup

9.修改data/voc.names

s
m
l
xl
xxl
#这个根据自己需要修改

10.修改cfg/yolov3-voc.cfg

[net]
# Testing
# batch=1
# subdivisions=1
# Training
 batch=64            
 subdivisions=8    #---------------修改
......
[convolutional]
size=1
stride=1
pad=1
filters=30        #---------------修改
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=5        #---------------修改
num=9
jitter=.3
ignore_thresh = .5
truth_thresh = 1
random=0            #---------------修改
......
[convolutional]
size=1
stride=1
pad=1
filters=30        #---------------修改
activation=linear

[yolo]
mask = 3,4,5
anchors = 10,13,  16,30,  33,23,  30,61,  62,45,  59,119,  116,90,  156,198,  373,326
classes=5        #---------------修改
num=9
jitter=.3
ignore_thresh = .5
truth_thresh = 1
random=0        #---------------修改
......
[convolutional]
size=1
stride=1
pad=1
filters=30        #---------------修改
activation=linear

[yolo]
mask = 0,1,2
anchors = 10,13,  16,30,  33,23,  30,61,  62,45,  59,119,  116,90,  156,198,  373,326
classes=5        #---------------修改
num=9
jitter=.3
ignore_thresh = .5
truth_thresh = 1
random=0        #---------------修改
标记的地方需要修改,classes是你的分类数,filters=3*(classes+5),random=0即关闭多尺度训练

如果还不是很清楚,可以看一下这篇blog

11.开始训练

./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74 -gpus 0,1,2,3

12.开始测试

./darknet detector test cfg/voc.data cfg/yolov3-voc.cfg backup/yolov3-voc_10000.weights data/1.jpg

这样就生成了一开始的图片了。

这中间可能会遇到一些问题,要耐心分析并去网上多搜答案,我也是小白,如果有什么错误,还望大佬们不吝指正,不说了,修理服务器去了。

猜你喜欢

转载自blog.csdn.net/weixin_42755375/article/details/81331399