本项目代码来源于:霹雳吧啦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 部分。并且后面的项目不再会向之前那样对代码进行逐行分析,主要强调如何使用,当然代码里面有注释
项目下载好的目录结构如下:
yolov3 spp目录下的dataset、model等等是主代码
utils下是主代码需要的工具函数,例如utils_model.py 是主代码 model.py 运行需要的工具函数
因为train.py 运行的时候代码量太多,所以将工具函数分成了两部分,运行的逻辑是train.py 先调用 utils_train.py ,然后 utils_train.py 再去调用 utils_train_tools 里面的代码
更多的关于目录信息可以在 README 文件查看,里面包含代码的如何使用以及目录文件的详细介绍等等
如图:
方形框是代码生成的部分、圆形框是自准备的数据集(这里采用 yolo 格式标注的,xml文件标注会在往后的文章中介绍)
当然,使用的时候,不需要将框中生成的部分删除,因为代码生成的文件名是固定的,也就是说后续生成的文件会将之前的cover掉,所以只需要加入自己的数据集即可
需要更改的部分只是 my_yolo_dataset ,换成自己的数据集
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 即可
生成的文件:
训练日志:
前12个值是coco 的指标,后面三个分别是评价损失、lr、coco map
上面参数就是训练日志的前12个参数,看不懂的可以百度,反正知道越大越好就行了。最后一个为coco map 的数值,也是越大越好