深度学习-卷积神经网络-目标检测之YOLOV3模型-代码运行训练自己的数据集并进行检测实践3

系列文章

深度学习-卷积神经网络(目标检测环境搭建)-TensorFlow及Keras环境搭建&详细安装教程

深度学习-卷积神经网络-目标检测之YOLOV3模型-代码运行图片检测实践1

深度学习-卷积神经网络-目标检测之YOLOV3模型-代码运行图片检测实践2

相关文章

深度学习-卷积神经网络-实例及代码0.8—基于最小均方误差的线性判别函数参数拟合训练

深度学习-卷积神经网络-实例及代码0.9—MNIST数据集介绍、下载及基本操作

深度学习-卷积神经网络-实例及代码1(入门)—利用Tensorflow和mnist数据集训练单层前馈神经网络/感知机实现手写数字识别

深度学习-卷积神经网络-实例及代码2(初级)—利用Tensorflow和mnist数据集训练简单的深度网络模型实现手写数字识别

深度学习-卷积神经网络-实例及代码3(图像分类LeNet5模型)—利用Tensorflow和mnist数据集训练LeNet5-CNN模型实现手写数字识别

 

前一篇文章介绍了在Windows下用CPU实现利用YOLOV3-Keras版本代码执行图片检测,使用的是已经训练好的模型权重

本篇文章详细说明如何使用自己的数据集进行YOLOV3模型权重的训练

使用的代码版本是在前一篇文章中完成的项目KerasYolo3Test2

在Windows环境下使用CPU进行训练

(操作系统:Windows 10专业版 64位)

(CPU:Intel(R) Core(TM) i5-4590 [email protected],内存8G)

第一部分:建立数据集,完成模型权重训练
1、收集图片,形成自己的图片库
图片尽量高清,低分辨率影响训练效果


2、生成标准VOC2007数据集文件夹模板
下载VOC2007数据集:下载地址https://pjreddie.com/projects/,从中找到Pascal VOC Dataset Mirror,点击进入下载VOC 2007中的Train/Validation Data (439 MB)
将下载后的文件解压,解压后的文件夹名称为VOCdevkit,删除该文件夹下的所有文件,仅保留里面的所有文件夹(可右击文件夹-属性查看文件夹中文件数是否为0)
或者不用下载VOC2007数据集,直接按照VOCdevkit文件夹目录结构建好


3、拷贝图片
将VOCdevkit文件夹模板拷贝到前篇文章项目KerasYolo3Test2下
将自己的图片库拷贝到VOCdevkit/VOC2007/JPEGImages目录下


4、标注图片
使用LabelImg工具标注图片
OpenDir--打开VOCdevkit/VOC2007/JPEGImages目录
Change Save Dir--将标注后生成的xml文件设置保存目录为VOCdevkit/VOC2007/Annotations目录
Create Rectbox--对图片目录中打开的图片标注矩形框并标注类别,标注完成后点击Save自动生成xml文件保存到前面设置的保存目录中

LabelImg工具下载地址:https://download.csdn.net/download/firemonkeycs/13038056


5、生成数据集txt文件,从图片库中按比例随机选取生成测试集、验证集、训练集
将CreateTxt.py文件放置在VOCdevkit\VOC2007目录下,CreateTxt.py文件代码如下:

import os
import random

trainval_percent = 0.1  #表示测试集和验证集所占总图片的比例。
train_percent = 0.9    #测试集所占测试集与验证集总和的比例
xmlfilepath = 'Annotations'  # xml文件的路径
txtsavepath = 'ImageSets\Main' # 新生成文件的保存路径

#    os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表。这个列表以字母顺序。
#   它不包括 '.' 和'..' 即使它在文件夹中。
total_xml = os.listdir(xmlfilepath) #返回Annotations文件夹下的文件和文件夹的列表;得到一个xml文件名列表

num = len(total_xml) #xml文件的总数,也就是列表的长度
list = range(num) #相当于range(0,num,1),这里的0是首位(默认是0)、num是末位、1为跳跃间距(默认是1);但不包括num。
                  #得到一个[0,1,2,..,num-1]的列表。


tv = int(num * trainval_percent) #xml文件中的交叉验证集数
tr = int(tv * train_percent) #xml文件中的训练集数,注意,我们在前面定义的是训练集占验证集的比例。
#print(tv,tr)  #打印出tv、tr进行验证


#random.sample()函数是从指定序列中随机获取指定长度的片段,原有序列不会改变。有两个参数,第一个参数代表指定序列,第二个参数是需获取的片段长度。
#这里相当于获得验证集和训练集数。
trainval = random.sample(list, tv)  #随机在list列表中,获得长度为tv的验证集样本列表;
train = random.sample(trainval, tr) #随机在trainval列表,中获得长度为tr的验证集样本列表;
# print(trainval ,'\n',tr)  #打印出trainval、train进行验证

#以可写的方式将数据写入文件中
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') #得到验证集

#三层循环
#第一层:在总的xml文件列表中

for i in list:
    #name = total_xml[i]
    name = total_xml[i][:-4]+'\n' #[:-4]用到了切片;因为文件名为 xx.xml ,[:-4]相当于从第一位截取到倒数第四位,即保留了 xx部分
    # print(name)
    #在交叉验证集列表中
    if i in trainval:
        #将符合条件的xml文件名的写入交叉验证集中
        ftrainval.write(name)
        #在训练集列表中
        if i in train:
            #将符合条件的xml文件名写入到测试集中
            ftest.write(name)
        else:
            #不符合条件的xml文件名写入验证集中
            fval.write(name)
    #不在交叉验证集中,那么就在训练集中
    else:
        ftrain.write(name)

#关闭文件
ftrainval.close()
ftrain.close()
fval.close()
ftest.close()

run运行CreateTxt.py文件生成数据集txt文件到VOCdevkit\VOC2007\ImageSets\Main目录下

6,生成YOLOV3模型所需的txt文件

修改voc_annotation.py中的classes = ["", ""]为自己要训练的类别

run运行voc_annotation.py

中间遇到一个报错

>>> runfile('E:/PythonProject2020-PCnew/MyPythonTest/KerasYolo3Test2/voc_annotation.py', wdir='E:/PythonProject2020-PCnew/MyPythonTest/KerasYolo3Test2')
Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "D:
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
随着深度学习技术的不断发展,目标检测技术已经得到了广泛的应用。在目标检测算法中,数据集的质量和数量对算法的效果影响极大。因此,对于目标检测算法的研究者和应用者来说,一个好的数据集清单是非常必要的。 目标检测数据集清单主要包括以下几个方面:数据集名称、数据集大小、数据集标注、数据集来源、数据集评价指标、文章发表时间等。在这些方面,我们需要从数据集的特点、应用场景和算法类型等角度进行分析,以便能够对不同的数据集进行正确的选择和使用。 其中,数据集大小是一个非常重要的指标。一方面,确保数据集的大小能够满足算法的需求,另一方面,也要避免数据量过大导致训练时间过长或过拟合的问题。此外,数据集标注也是一个至关重要的环节,数据集标注的准确性和完整性直接影响算法的性能。 当我们选定了一个符合我们需求的目标检测数据集之后,如何训练我们的算法模型也是一个需要思考的问题。在这方面,我们建议使用yolov5模型进行训练和使用。yolov5是一种基于深度学习目标检测算法,其具有训练速度快、检测精度高等优点。对于yolov5模型训练和使用,我们需要对其网络结构、损失函数、数据预处理、模型调参等进行认真的学习和掌握。 总之,目标检测数据集清单是目标检测领域中非常重要的一环。只有通过对不同数据集的分析和评估,我们才能够选取到最适合我们需求的数据集,并且能够利用yolov5模型进行有效的训练和使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值