YOLO-V4 Pytorch版本训练自建数据集和预测

1. 程序下载

本文程序核心部分完全参考开源代码:https://github.com/WongKinYiu/PyTorch_YOLOv4
只是从一种学习的角度去写了我的代码仓库,在基础上增加了一些常用的脚本(会持续更新)。
我的仓库地址为:https://github.com/hx-0614/yolov4-pytorch-learing

git clone https://github.com/hx-0614/yolov4-pytorch-learing.git

其中我新增的脚本文件,会在README.md文件中说明。代码结构如下(红色框内为我想对于原作者代码更改或者新增的脚本文件,核心代码没有更改)。
在这里插入图片描述

2. 代码结构解析

如上图所示代码结构。

|cfg  # 存储模型结构配置文件的地方。
|------|yolov4.cfg
|------|......
|data  # 数据读取文件参数。
|------|hyp.scratch.yaml  # 训练相关的参数,我一般使用默认。
|------|coco.data  # 训练集,验证集,数据集类别,数据集标签类别参数文件。 
|------|coco.names  # 数据集标签类别。这个文件一般测试的时候使用,貌似train没用到。
|------|......
|images  # 存储模型结构的图片。
|------|......
|models  # 构建模型的脚本文件。
|------|......
|utils  # 程序执行过程中要用到的其他相关函数的脚本文件。
|------|......
|weights  # 存放模型的文件,我是把预先训练模型存到了这里。
|------|......

|detect.py  # 模型自带的批量推理代码,默认是输入一个图片文件夹,然后输出检测带有框的文件夹。
|test.py  # 测试mAP的脚本文件。其中train.py 也会调用它,也可以单独使用,主要是针对coco.data里面的测试集路径进行测试。
|train.py  # 训练脚本文件。

### 我新建的一些脚本 ###
|predict_image.py  # 预测一张图片的脚本。
|predict_video.py  # 预测一段视频的脚本。
|run_train.sh  # 运行train.py的shell脚本。

### README.md ###
|README_V4.md  # 原作者的README.md文件。
|README.md. # 我的README.md文件。
|requirements.txt  # 需要的相关环境下载文件。

3. 训练自己的数据集

3.1. 首先需要准备自己的数据集

这里假设已经有每张图片对应的边框标签文件
大多数我们可能拿到的是VOC格式的数据集,先将其整理成下图所示的格式(其实不麻烦,有annotations和images就可以其他两个文件需要自己新建)图片来自于公开数据集Seaships
在这里插入图片描述

然后通过脚本制作YOLO-V4 Pytorch版本可以读取的格式(这个格式通用于u版的yolo系列,包括现在比赛常用的YOLO-V5)。数据集制作脚本百度搜索很多,我的代码也是搜索自百度,所以没有放到代码仓库里面,这里就在下面直接附上代码(…/代表自己数据集的路径)。

# makeTxt.py 制作训练集和测试集列表的脚本。
# 需要将脚本中的所有路径进行更改,手动改就好,改成自己数据集存储的地方,我建议大家使用绝对路径(不要出现中文)。
import os
import random

trainval_percent = 0.2  # 可自行进行调节
train_percent = 1
xmlfilepath = '../annotations'
txtsavepath = '../images'
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/test.txt', 'w')
ftrain = open('../ImageSets/train.txt', 'w')
# fval = open('ImageSets/Main/val.txt', 'w')

for i in list:
    name = total_xml[i]
  • 10
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 29
    评论
评论 29
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值