利用YOLOv3 SPP网络源码,训练自己的数据集的步骤

利用YOLOv3 SPP网络源码,训练自己的数据集的步骤


总的流程大概是:使用labelImg对自己的数据进行标注—>使用 trans_voc2yolo.py脚本进行转换,将VOC标注数据转为YOLO标注数据(使用 trans_coco2yolo.py脚本进行转换将COCO标注数据转为YOLO标注数据,待补充)—>生成新的 my_yolov3.cfg文件—>下载好预训练权重,开始训练
以下内容主要来自 霹雳吧啦Wzup主,主要用来自己学习记录。

第一部分

1. 下载项目及文件结构介绍

首先在https://github.com/WZMIAOMIAO/deep-learning-for-image-processing网址上下载对应的项目。可以参考该项目博主的B站视频
在这里插入图片描述

2. 训练数据的准备以及目录结构

  • 这里建议标注数据时直接生成yolo格式的标签文件.txt,推荐使用免费开源的标注软件(支持yolo格式),https://github.com/tzutalin/labelImg
  • 如果之前已经标注成pascal voc的.xml格式了也没关系,通过voc转yolo格式的转化脚本进行转化
  • 将自己数据集中的图像大小缩放到与coco数据集一致(图像预处理算法决定的)
  • 测试图像时最好将图像缩放到32的倍数,因为YOLOv3 SPP网络最小的特征层是输入尺寸的1/32倍
  • 标注好的数据集请按照以下目录结构进行摆放:
├── my_yolo_dataset 自定义数据集根目录
│         ├── train   训练集目录
│         │     ├── images  训练集图像目录
│         │     └── labels  训练集标签目录 
│         └── val    验证集目录
│               ├── images  验证集图像目录
│               └── labels  验证集标签目录            

总之,准备自己的数据集按照以上目录结构进行摆放

3. 利用标注好的数据集生成一系列相关准备文件,也可参考原作者的教程

├── data 利用数据集生成的一系列相关准备文件目录
│    ├── my_train_data.txt:  该文件里存储的是所有训练图片的路径地址
│    ├── my_val_data.txt:  该文件里存储的是所有验证图片的路径地址
│    ├── my_data_label.names:  该文件里存储的是所有类别的名称,一个类别对应一行(这里会根据```.json```文件自动生成)
│    └── my_data.data:  该文件里记录的是类别数类别信息、train以及valid对应的txt文件

更新Update yolov3-spp.cfg,修改预测器的卷积核个数,这个是根据数据集的类别个数进行计算的。

3.1 将VOC标注数据转为YOLO标注数据(如果你的数据已经是YOLO格式了,可跳过该步骤)

  • 使用trans_voc2yolo.py脚本进行转换,并在./data/文件夹下生成my_data_label.names标签文件,
  • 执行脚本前,需要根据自己的路径修改以下参数
# voc数据集根目录以及版本
voc_root = "/data/VOCdevkit"        # 这里要写真正的数据集目录
voc_version = "VOC2012"

# 转换的训练集以及验证集对应txt文件,对应VOCdevkit/VOC2012/ImageSets/Main文件夹下的txt文件
train_txt = "train.txt"
val_txt = "val.txt"

# 转换后的文件保存目录
save_file_root = "./my_yolo_dataset"        # 转换后的文件保存目录

# label标签对应json文件
label_json_path = './data/pascal_voc_classes.json'          # 如果是自己的数据集将里面的类别标签修改为自己的类别标签即可

3.2 根据摆放好的数据集信息生成一系列相关准备文件

  • 使用calculate_dataset.py脚本生成my_train_data.txt文件、my_val_data.txt文件以及my_data.data文件,并生成新的my_yolov3.cfg文件
  • 执行脚本前,需要根据自己的路径修改以下参数
# 训练集的labels目录路径
train_annotation_dir = "./data/my_yolo_dataset/train/labels"
# 验证集的labels目录路径
val_annotation_dir = "./data/my_yolo_dataset/val/labels"
# 上一步生成的my_data_label.names文件路径(如果没有该文件,可以自己手动编辑一个txt文档,然后重命名为.names格式即可)
classes_label = "./data/my_data_label.names"
# 原始yolov3-spp.cfg网络结构配置文件
cfg_path = "./cfg/yolov3-spp.cfg"

第二部分 解析模型配置文件

在yolov3-spp.cfg文件当中有非常多的层结构, 在搭建网络过程中是根据配置文件当中的网络层结构依次搭建出来的。搭建模型之前需要理解每层的含义以及参数的含义。注意:[net]层结构在网络搭建的过程中,它是不起任何作用的,真正解析的时候是通过convolutional层开始解析的。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
route层结构:当layers取一个值和多个值的时候不一样,concatenate在深度方向上进行拼接
在这里插入图片描述
第二个maxpool的输入是前面那route所指向那一层的输出
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里的yolo并不是我们最后的预测器,并不是图中的Conv2d层,是接在每个预测器之后的一个结构,对预测结果进行处理以及生成一系列anchors。
在这里插入图片描述
接下来使用parse_config.py: 解析yolov3-spp.cfg文件
利用解析好的文件搭建yolov3-spp网络
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值