win10+Darknet Yolo V3+训练自己的数据集全步骤

前序内容参考这个博主:很好
https://www.cnblogs.com/peacepeacepeace/p/9060229.html

Windows10+YOLOV3+VisualStudio2017最新版本超详细过程
https://blog.csdn.net/KID_yuan/article/details/88380269

1,准备好自己的照片

参考内容:
https://zhuanlan.zhihu.com/p/45852709
在这里用的是知乎上一博主自己的照片集,主要识别两个任务:库里和杜兰特.
https://github.com/JustTryItNow/YOLO_images_script

我的下载地址为:E:\yolo训练数据集\YOLO_images_script-master
win10+Darknet Yolo V3+训练自己的数据集全步骤_第1张图片其中train是用来训练的, val是用来测试的

2,做标签

2.1图片标记

推荐labelImg
[LabelImg使用的步骤可以参考]**(https://cloud.tencent.com/developer/news/325876)**博主写的很详细。
打开labelimg
在开始菜单中找到anaconda prompt,打开
win10+Darknet Yolo V3+训练自己的数据集全步骤_第2张图片使用cd 命令进入刚刚下载解压的labelimg文件夹,例如:

cd E:\火狐文件下载\labelImg-master(1)\labelImg-master
然后安装pyqt,安装命令:
conda install pyqt=5
安装完成后,执行命令:
pyrcc5 -o resources.py resources.qrc
这个执行完成是没有任何返回结果的
最后,输入命令:
python labelImg.py
在运行python labelImg.py 时可能会遇到报错 No module named ‘libs.resources’
解决方法 把labelImg-master文件夹下的resources.py复制到\labelImg\libs文件夹下面即可解决

可以看到labelimg打开了,如下图:
win10+Darknet Yolo V3+训练自己的数据集全步骤_第3张图片

标记好的图片是xml形式。

2.2把xml文件转化为txt

把xml文件转化为txt的代码:
转换文件 test.py

import os
import xml.etree.ElementTree as ET

dirpath = r'D:\\darknet-master\\darknet-master\\build\\darknet\\x64\\data\\1123\\'  # 原来存放xml文件的目录
newdir =r'D:\\darknet-master\\darknet-master\\build\\darknet\\x64\\data\\1124\\'  # 修改label后形成的txt目录

if not os.path.exists(newdir):
    os.makedirs(newdir)

dict_info = {
     'smoke': 0,'cup':1}  # 有几个 属性 填写几个
#有两个的话就这样写
for fp in os.listdir(dirpath):
    if fp.endswith('.xml'):
        root = ET.parse(os.path.join(dirpath, fp)).getroot()

        xmin, ymin, xmax, ymax = 0, 0, 0, 0
        sz = root.find('size')
        width = float(sz[0].text)
        height = float(sz[1].text)
        filename = root.find('filename').text
        for child in root.findall('object'):  # 找到图片中的所有框

            sub = child.find('bndbox')  # 找到框的标注值并进行读取
            label = child.find('name').text
            label_ = dict_info.get(label)
            if label_:
                label_ = label_
            else:
                label_ = 0
            xmin = float(sub[0].text)
            ymin = float(sub[1].text)
            xmax = float(sub[2].text)
            ymax = float(sub[3].text)
            try:  # 转换成yolov3的标签格式,需要归一化到(0-1)的范围内
                x_center = (xmin + xmax) / (2 * width)
                x_center = '%.6f' % x_center
                y_center = (ymin + ymax) / (2 * height)
                y_center = '%.6f' % y_center
                w = (xmax - xmin) / width
                w = '%.6f' % w
                h = (ymax - ymin) / height
                h = '%.6f' % h
            except ZeroDivisionError:
                print(filename, '的 width有问题')
            with open(os.path.join(newdir, fp.split('.xml')[0] + '.txt'), 'a+') as f:
                f.write(' '.join([str(label_), str(x_center), str(y_center), str(w), str(h) + '\n']))
print('ok')


这里要注意修改:
dirpath # 原来存放xml文件的目录
和newpath # 修改label后形成的txt目录

我形成的txt目录和转换文件test.py都在data目录下,所以打开Anacond Prompt。如下操作:会发现在形成的txt目录1124中有了相应的txt文件
win10+Darknet Yolo V3+训练自己的数据集全步骤_第4张图片将原图.jpg文件和刚生成的.txt文件都放在 data\obj目录里,一张图对应一个txt
在darknet-master\build\darknet\x64\data\下 新建train.txt 把训练图片的路径写在文件里面,每行一个路径,如图
win10+Darknet Yolo V3+训练自己的数据集全步骤_第5张图片

3.创建文件

3.1创建yolo-obj.cfg

在darknet-master\build\darknet\x64 新建yolo-obj.cfg文件(可以直接复制yolov3.cfg,然后重命名为yolo-obj.cfg)

修改这个文件内容:
batch 改成64 :batch=64
subdivisions 改成8 :subdivisions=8
训练的时候如果出现内存溢出错误(Out of memory),可以,将batch改小些(64,32,16,8),将random改成0关闭多尺度训练。
win10+Darknet Yolo V3+训练自己的数据集全步骤_第6张图片

查找每个yolo下(共有3处)的classes改成你自己的类的数量 :classes = N
查找每个yolo上面第一个convolutional下的filters(如图)改成你自己的大小,计算方法是: filters=(classes + 5)x3 ,由于我的是2类,所以我的filters=21. (这个也是只有3处)
win10+Darknet Yolo V3+训练自己的数据集全步骤_第7张图片

3.2新建obj.names文件

在darknet-master\build\darknet\x64\data\下新建obj.names文件,里面写入你的要检测的分类的类名,每个类名占一行。
win10+Darknet Yolo V3+训练自己的数据集全步骤_第8张图片

3.3新建obj.data文件

在darknet-master\build\darknet\x64\data\下新建obj.data文件,像这样
win10+Darknet Yolo V3+训练自己的数据集全步骤_第9张图片classes代表类别,我检测的两类,所以是2

3.4修改网络配置文件Makefile(在\darknet-master路径下)win10+Darknet Yolo V3+训练自己的数据集全步骤_第10张图片

参考这篇:
https://blog.csdn.net/dz4543/article/details/85302075

4 .下载darknet53.conv.74

下载darknet53.conv.74文件放到build\darknet\x64文件夹里
下载地址:https://pjreddie.com/media/files/darknet53.conv.74

5.开始训练

然后cd打开目录: D:\darknet-master\darknet-master\build\darknet\x64
命令输入:darknet.exe detector train data/obj.data yolo-obj.cfg darknet53.conv.74
开始训练,训练过程很长。
训练的时候如果出现内存溢出错误(Out of memory),可以打开darknet-master\build\darknet\x64 目录下的yolo-obj.cfg文件将batch改小些(64,32,16,8),将random改成0关闭多尺度训练。

之后会在目录:D:\darknet-master\darknet-master\build\darknet\x64\backup下生成.weights文件。如图所示:
win10+Darknet Yolo V3+训练自己的数据集全步骤_第11张图片 复制yolo-obj_final.weights到x64目录下。
然后cd打开目录: D:\darknet-master\darknet-master\build\darknet\x64
命令输入:darknet.exe detector test data/obj.data yolo-obj.cfg yolo-obj_final.weights
之后输入检测图片地址。

因为测试集是高考试卷,验证集是模拟考试卷,训练集大概包括很多东西,例如作业题、练习题。
所以用测试集检测。检测结果如下:
win10+Darknet Yolo V3+训练自己的数据集全步骤_第12张图片

你可能感兴趣的:(yolo,深度学习,python)