YOLOv5_DeepSORT_Pytorch训练自己的多目标跟踪模型线 根据经验详细整理
参考:https://blog.csdn.net/weixin_39357271/article/details/124760640?spm=1001.2014.3001.5506
一、YOLOv5训练自己的目标检测模型
1、 Yolov5代码是开源的,GitHub下载glenn-jocher开源的yolov5的项目,自行进行环境的安装和依赖库的安装。
2、 数据集的标注
利用labelImg标注数据,用旧版本的压缩包进行标注会减少很多不必要的麻烦,解压压缩包,打开文件夹,\labelImg-master\data 打开文本文档predefined_classes设置标签数量。在终端运行,输入python labelImg.py,打开标注工具,Open Dir打开图片,Change Save Dir选择储存位置,选择YOLO格式开始进行标注,W(选择区域画框)、A(上一张)、 D(下一张),打开Auto Save mode,标注下一张按D时可以自动保存。将准备好的数据集划分为训练集和验证集来训练我们的yolov5模型。
3、 训练模型:修改两个配置文件。
- 修改数据配置文件:目录下voc.yaml复制一份重命名,改为sheep.yaml
sheep.yaml修改四个地方:注释掉一行、路径、类别、类别名称
- 修改模型配置文件:目录下yolov5s.yaml复制一份重命名,我改为yolov5s_sheep.yaml。
yolov5s_sheep.yaml修改1个地方:类别,我改为nc=2。
- 开始训练:找到train.py文件:修改路径、修改训练轮次,修改完成,新建一个环境,并且在终端运行train.py
- 训练结束,在run/train/exp/weights目录下会产生两个权重文件,一个是最后一轮的权重文件last.pt,一个是最好的权重文件best.pt,后面要利用best.pt来做推理测试。
- 进行推理测试。找到detect.py文件,修改best.pt文件路径、图片或视频路径。
推理结果会保存到 runs/detect/exp 的目录下。
二、训练跟踪网络
1、数据集准备:数据集全貌是train和test两个文件中分别为抠出来的指定类别的图片。
- 分别将原来数据集的训练和测试的txt格式文件全部转化为xml格式文件。
- 最后得到image_train、train_xml和image_test、test_xml,接下来在/deep_sort/deep/data中新建两个文件夹,分别命名train、test。接下来运行prepare.py文件,生成train、test中的按照类别抠出的图。至此deepsort的数据集准备好了。
2、运行train.py
在根目录打开deep_sort_pytorch/ deep_sort/ deep/ train.py文件,修改数据集路径、197行修改训练轮数。运行train.py,训练结束后会在deep_sort_pytorch/ deep_sort/ deep/ checkpoint文件夹下生成一个跟踪权重ckpt.t7。
3、 利用训练的跟踪权重进行评估
打开根目录下track.py文件,修改yolo权重路径、修改跟踪权重路径、设置跟踪视频路径。检测结果保存在根目录inference/output下。
一些附加小tips:
1、 批量删除或者更改yolo格式的标签类别
参考:https://blog.csdn.net/qq_61290020/article/details/126304325?spm=1001.2014.3001.5506
2、 txt转xml
参考:https://blog.csdn.net/weixin_42899627/article/details/114697554?spm=1001.2014.3001.5506
3、 将标注好的yolo格式数据集划分为yolov5所适用的训练集和测试集
参考:https://blog.csdn.net/qq_42262610/article/details/122828747?spm=1001.2014.3001.5506
4、 在训练yolo时遇到一个报错无论如何解决不了,并且确定一定不是环境和数据集的问题,因为在这之前已经跑通过很多次
了,最后发现是网络访问的问题。
报错:
tag = subprocess.check_output(‘git tag’, shell=True).decode().split()[-1]
IndexError: list index out of range
5、凡是遇到标签序列超出而报错的情况,自查数据集。