YOLOV3 SPP 目标检测项目(yolo 标注的数据集)

2023-12-13 05:32:24

0. 写在前言?

本项目代码来源于:霹雳吧啦Wz?和 u 版yolov3 spp项目

因为源项目的代码太过复杂,所以本章的代码在原有的基础上进行大幅度的删减(删了有一半左右吧),并且加了点自己需要的部分

Q:为什么要删减?

A:源项目的检测代码有很多的部分没有使用到,虽然认为可以用来扩展网络或者更好移植到别的项目等等。原意是好的,说实话,本人认为,项目的目录啊、代码调用啊太复杂了,但凡一点点小的改变可能就会报错,别说扩展自己增加模块了,小白能运行就不错啦。所以本人将不需要的代码进行删除,然后将一些变量设定为常量啥的,将目录也改成方便观察的。

? ? ? ? 对于网络扩展的部分,可能会让V3 精度更好。但说实话,V5、V8的精度好多了,与其在V3的基础上进行扩充增加精度,不如直接用V5、V8等网络

Q :目录的更改?

A : 因为windows和Linux系统的原因,有些自定义的py文件来回调用会失败(可能本人太菜了...),于是本人将代码风格改成习惯的行驶,目录也换成了方便观察的形式

other:

本项目利用yolov3 spp对 pig 进行目标检测,包含数据集+训练好的权重

下载位置在这:yolov3 spp 对自定义数据集的目标检测

闲言碎语:因为之前摆烂了半年多,本来不打算写博客了。因为毕业论文和yolo系列相关,不得不把之前学的再捡起来。后面的内容主要向目标检测靠齐,也会包含 transform 部分。并且后面的项目不再会向之前那样对代码进行逐行分析,主要强调如何使用,当然代码里面有注释

1. 项目目录

项目下载好的目录结构如下:

yolov3 spp目录下的dataset、model等等是主代码

utils下是主代码需要的工具函数,例如utils_model.py 是主代码 model.py 运行需要的工具函数

因为train.py? 运行的时候代码量太多,所以将工具函数分成了两部分,运行的逻辑是train.py 先调用 utils_train.py ,然后?utils_train.py 再去调用?utils_train_tools 里面的代码

更多的关于目录信息可以在 README 文件查看,里面包含代码的如何使用以及目录文件的详细介绍等等

2. 删除的部分(自己需要加的部分)

如图:

方形框是代码生成的部分、圆形框是自准备的数据集(这里采用?yolo 格式标注的,xml文件标注会在往后的文章中介绍)

当然,使用的时候,不需要将框中生成的部分删除,因为代码生成的文件名是固定的,也就是说后续生成的文件会将之前的cover掉,所以只需要加入自己的数据集即可

需要更改的部分只是 my_yolo_dataset ,换成自己的数据集

  • images 存放的就是图片
  • labels 的标签yolo标注,大概如下

  • my_data_labels.txt 是类别信息,如下

3. 如何使用

1. 将数据集放在?my_yolo_dataset 下,包括?my_data_labels.txt 准备好,下载 requirement.txt 中需要的库文件(因为GPU版本,torch 的版本不需要严格一致,能用 GPU 训练就行。为了避免版本过低或者过高的问题,我删除了混合精度训练这类和torch 版本相关的部分)

2. 运行 generate_data.py 生成 data 目录下的文件

这里需要注意,因为需要找到原图,而图像的后缀是不可控的,所以这里需要更改。

generate_data.py 下面的第 9 行,把jpg 换成png等等就行

img_path = img_path.replace('.txt','.jpg')      # 根据后缀更改!!!

3. 运行 train.py 就可以了,这里的超参数只用了三个

具体的超参数在 cfg\hyp.yaml 文件下,例如学习率啥的(建议不要改!!调参大神当我没说)?

运行的时候,会自动载入官方的预训练权重?yolov3-spp-ultralytics-512.pt ,超参数的freeze-layers 设定为Ture 会冻结Darknet 特征提取的部分;否则会全部训练。需要注意的是,全部训练不代表载入预训练无用,预训练权重也相当于初始化了,而且是好的初始化,哪怕重头训练也是好的

4. 预测的时候,运行 predict.py 即可,待预测的图像放在相同目录下,改成 test.jpg 即可

4.? 效果展示

目标检测结果:

生成的文件:

训练日志:

前12个值是coco 的指标,后面三个分别是评价损失、lr、coco map

上面参数就是训练日志的前12个参数,看不懂的可以百度,反正知道越大越好就行了。最后一个为coco map 的数值,也是越大越好

训练过程:
?

文章来源:https://blog.csdn.net/qq_44886601/article/details/134878776
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。