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

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

主要内容

总的流程大概是:使用labelImg对自己的数据进行标注—>使用 trans_voc2yolo.py

脚本进行转换,将VOC标注数据转为YOLO标注数据(使用 trans_coco2yolo.py

脚本进行转换将COCO标注数据转为YOLO标注数据,待补充)—>生成新的 my_yolov3.cfg

文件—>下载好预训练权重,开始训练

以下内容主要来自
霹雳吧啦Wz

up主,主要用来自己学习记录。

第一部分

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

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

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

; 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_root = "/data/VOCdevkit"
voc_version = "VOC2012"

train_txt = "train.txt"
val_txt = "val.txt"

save_file_root = "./my_yolo_dataset"

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文件
  • 执行脚本前,需要根据自己的路径修改以下参数

train_annotation_dir = "./data/my_yolo_dataset/train/labels"

val_annotation_dir = "./data/my_yolo_dataset/val/labels"

classes_label = "./data/my_data_label.names"

cfg_path = "./cfg/yolov3-spp.cfg"

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

在yolov3-spp.cfg文件当中有非常多的层结构, 在搭建网络过程中是根据配置文件当中的网络层结构依次搭建出来的。搭建模型之前需要理解每层的含义以及参数的含义。注意:[net]层结构在网络搭建的过程中,它是不起任何作用的,真正解析的时候是通过convolutional层开始解析的。

利用YOLOv3 SPP网络源码,训练自己的数据集的步骤
利用YOLOv3 SPP网络源码,训练自己的数据集的步骤
利用YOLOv3 SPP网络源码,训练自己的数据集的步骤
利用YOLOv3 SPP网络源码,训练自己的数据集的步骤
利用YOLOv3 SPP网络源码,训练自己的数据集的步骤
route层结构:当layers取一个值和多个值的时候不一样,concatenate在深度方向上进行拼接
利用YOLOv3 SPP网络源码,训练自己的数据集的步骤
第二个maxpool的输入是前面那route所指向那一层的输出
利用YOLOv3 SPP网络源码,训练自己的数据集的步骤
利用YOLOv3 SPP网络源码,训练自己的数据集的步骤
利用YOLOv3 SPP网络源码,训练自己的数据集的步骤
这里的yolo并不是我们最后的预测器,并不是图中的Conv2d层,是接在每个预测器之后的一个结构,对预测结果进行处理以及生成一系列anchors。
利用YOLOv3 SPP网络源码,训练自己的数据集的步骤
接下来使用 parse_config.py: 解析 yolov3-spp.cfg文件
利用解析好的文件搭建yolov3-spp网络
利用YOLOv3 SPP网络源码,训练自己的数据集的步骤
利用YOLOv3 SPP网络源码,训练自己的数据集的步骤

Original: https://blog.csdn.net/Highlight_Jin/article/details/123733264
Author: Highlight_Jin
Title: 利用YOLOv3 SPP网络源码,训练自己的数据集的步骤

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/686562/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球