复现教程 | Darknet-yolov4 训练自己的数据集

首先学会科学上网 cmake  opencv github cuda cudnn都需要一些上网能力 

否则会浪费很多时间(能花20块钱解决的事为什么要浪费自己20个小时)

硬件环境:intel 酷睿处理器 + nvidia 显卡 (rtx20系以上 + gtx 1060 以上)

软件环境: VS2019/2022 ---> CUDA + CUDNN --->OPENCV  --> CMAKE --> 项目生成

项目路径:

GitHub - pjreddie/darknet: Convolutional Neural Networks

配环境教程:Win10搭建GPU版Darknet——VS2019+CUDA+CUDNN篇_cuda darknet-CSDN博客

(随便找的,类似的都可以看,安装顺序一定要对)

一. yolo-darknet数据集文件介绍及准备

首先我们要了解Darknet工程需要什么去训练数据

其有三个重要文件

① 图像和标签共同放在同一个大文件夹【obj】 

② obj.data  设定类别数/测试集路径和训练集路径

③obj.names 所有标签名(请一一对应classes的顺序)

还有一个助手脚本文件,用Python语言编写,用于划分生成指向数据的 test.txt trainval.txt 的脚本

这里是我用的 yolo_split_train_val.py 脚本

# coding:utf-8
 
import os
import random
import argparse
 
parser = argparse.ArgumentParser()
# xml文件的地址,根据自己的数据进行修改 xml一般存放在Annotations下
parser.add_argument('--xml_path', default='E:/AAA___Dataset/fan/obj', type=str, help='input xml label path')
# 数据集的划分,地址选择自己数据下的ImageSets/Main
parser.add_argument('--txt_path', default='E:/AAA___Dataset/fan', type=str, help='output txt label path')
opt = parser.parse_args()
 
trainval_percent = 1.0
train_percent = 0.9
xmlfilepath = opt.xml_path
txtsavepath = opt.txt_path
total_xml = os.listdir(xmlfilepath)
if not os.path.exists(txtsavepath):
    os.makedirs(txtsavepath)
 
num = len(total_xml)
list_index = range(num)
tv = int(num * trainval_percent)
tr = int(tv * train_percent)
trainval = random.sample(list_index, tv)
train = random.sample(trainval, tr)
 
file_trainval = open(txtsavepath + '/trainval.txt', 'w')
file_test = open(txtsavepath + '/test.txt', 'w')
file_train = open(txtsavepath + '/train.txt', 'w')
file_val = open(txtsavepath + '/val.txt', 'w')
 
 
# 这里的 name 要根据个人需要修改,主要目的是让txt的路径定位到每一张图片中
for i in list_index:
    name0 = total_xml[i][:-4] + '.png' + '\n'
    if i in trainval:
        name1 = 'E:/AAA___Dataset/fan/obj/' + name0
        file_trainval.write(name1)
    if i in train:
        name2 = 'E:/AAA___Dataset/fan/obj/' + name0
        file_train.write(name2)
    else:
        name3 = 'E:/AAA___Dataset/fan/obj/' + name0
        file_val.write(name3)
        file_test.write(name3)

 
file_trainval.close()
file_train.close()
file_val.close()
file_test.close()

使用该脚本即可将数据划分成训练集 trainval.txt 和测试集test.txt,其中内容的每一行指向大文件夹【obj】中的数据绝对路径,从而在训练中读取

【 如果数据集是VOC(文件后缀为. xml) 则要用脚本将xml数据转成 txt  再和图片一起放入obj 文件夹中】

二. 划分数据并放入yolov4-darknet 工程中

D:\darknet-master【darknet工程】\build\darknet\x64【生成项目的路径,也就是darknet.exe程序所在的地方】\【DataSet【数据集总目录】\【自己数据集的目录】

创建obj文件夹,将所有Imange和annotations全部复制进去

(要一一对应,不然就手动排查)

回到数据集的路径,根据自己数据集的图片格式&darknet数据的路径修改yolo_split_trainval.py 的部分代码,随后在地址处点击,清空后输入cmd+回车调出终端,使用该脚本

将得到的划分文件复制进darknet工程的的对应路径下

三. 修改文档及代码

(1)修改 obj.names  将原数据集中class.txt的类别复制进names中

(2)修改 obj .data

(3)修改 cfg  filter= (class + 5 )*3

(4)修改traval.txt test.txt val.txt下所有相对路径为绝对路径(如果已经是了就不用修改)

四. 开始训练

darknet.exe所在文件夹\build\darknet\x64下面 点击路径清空后输出cmd调出终端窗口

输入  darknet.exe detector train DataSet/Armor/obj.data【改为自己的路径】  DataSet/Armor/yolov4-ar.cfg【改为自己对应文件的路径】 yolov4-tiny.conv.29 29 【这是预训练模型的路径,在github项目工程中可以找到,或者善用检索工具在网上寻找】

回车,即可开始训练

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值