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

本文详述如何在Windows环境下,使用CPU训练YOLOV3模型,并针对自己的数据集进行标注和训练。通过调整配置文件、处理标注错误、创建数据集txt文件,成功执行训练。尽管训练时间长,但最终能够实现目标检测。未来改进方向包括增加样本数量和训练次数以提升检测效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

系列文章

深度学习-卷积神经网络(目标检测环境搭建)-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 CPU@3.30GHz,内存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.youkuaiyun.com/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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值