yolo_track
yolov8
ultralytics/ultralytics: NEW - YOLOv8 🚀 in PyTorch > ONNX > OpenVINO > CoreML > TFLite (github.com)
1 创建环境
conda create -n yolotrackold python=3.8
conda activate yolotrackold
#根据cuda版本安装torch
pip install torch==1.10.1+cu111 torchvision==0.11.2+cu111 torchaudio==0.10.1 -f https://download.pytorch.org/whl/cu111/torch_stable.html
2 源码下载
从最上面的连接下载源码,
我的源码是8.3手动下载解压的,和最新的有差别
# 下载好源码后,进入源码目录
pip install -v -e .
将yolov8源码中的ultralytics放进yolotrack目录中,注意是第二级ultralytics,放好如下:
3 下载预训练权重
在ultralytics/ultralytics: NEW - YOLOv8 🚀 in PyTorch > ONNX > OpenVINO > CoreML > TFLite (github.com)
下载yolov8n.pt
在yolotrack源码的boxmot/appearance/reid_model_factory.py下载reid模型,我下载的是
"osnet_x0_25_market1501.pt": "https://drive.google.com/uc?id=1z1UghYvOTtjx7kEoRfmqSMu-z62J6MAj",
下载好后,在yolotrack下新建目录pretrained,将预训练权重放进去
,这里我将reid的名字改短了一些
根据权重模型的目录和名字,改examples/track.py
4 DEBUG
4.1 报错:distutils
解决方案:参考AttributeError: module ‘distutils‘ has no attribute ‘version‘ 解决方案 - 知乎
pip uninstall setuptools
pip install setuptools==58.0.4
4.2 报错:psutil
解决方案:
pip install psutil
4.3 报错:no module named boxmot
在代码上面添加:
import sys
sys.path.append('.')
即:
4.4 其他依赖项
pip install pycocotools
pip install tabulate
5 跟踪本地视频
python examples/track.py --source /home/extend/zhy/dataset/NEU/1.mp4 --show --save --save-mot
结果保存在:examples/runs/track/exp下
据我分析,这个格式依次是:帧数,id,bbox左上角x坐标,左上y,w,h,0,0,-1
只要将后三个改成0,0,0,-1即可符合MOT challenge标准
加了个计算FPS的代码
6 MOT17测试
python3 examples/val.py --benchmark MOT17 --device 0,1
6.1 报错:连接超时,下载失败
第一个问题是无法连接网络下载不了文件,那就去JonathonLuiten/TrackEval: HOTA (and other) evaluation metrics for Multi-Object Tracking (MOT). (github.com)
手动下载代码,然后在examples下创建文件夹val_utils,将下载好的代码解压放到val_utils下
6.2 使用本地数据集测试
我的本地已经有MOT17数据集了,因此将val.py的这两行注释掉
开头添加数据集路径
更改eval_setup函数里面的路径,根据自己的数据集格式做修改
再次运行上面的代码,运行过程:
运行结果:
在examples/runs/val/exp下保存了结果
6.3 使用全部序列做测试(未解决)
这部分显示只是用FRCNN的那部分序列
将FRCNN那行注释掉,即可对所有序列进行测试,去掉sorted
运行中途停止,报错:
未解决:单独对FRCNN,DPM,SDP测试都是没问题的,但一起就会出问题
替补方法: 三个检测器的序列分别测试,然后将测试的.txt放到一个labels文件夹内,再对该文件夹进行评估,见下文“对已有的标签文件做评估”
TODO:split:test
上面的val.py中,--split都是使用默认的train,即在训练序列上做测试
若改成test,则在mot17的test序列做测试
6.5 更改MOTtxt输出格式
原代码的mot格式输出文件每行只有9个数字,不符合mot网站提交要求
需求格式为
显然后四位为-1,(不清楚为何原代码输出的score都是0)
更改examples/utils.py
输出结果(左:改后,右:改前):
6.6 对已有的标签文件做评估
python3 examples/val.py --benchmark MOT17 --device 0,1 --eval-existing --project /home/extend/zhy/code/yolo_tracking-masterold/examples/runs/other --name 0804_bot_mot17_val_yolox
标签文件路径为/home/extend/zhy/code/yolo_tracking-masterold/examples/runs/other/0804_bot_mot17_val_yolox/labels
将val.py改成全部序列:
然后执行上面的代码,即可得到评估文件
6.7 消融实验
https://github.com/mikel-brostrom/yolo_tracking/blob/split-ds-by-factor/split.py
使用上述代码分割数据集,注意更改本地数据集路径,例如:
这两个地方,大于split表示会分割出前半部分的数据集,小于则分出后半部分
按需求划分即可,前半段用于消融实验的训练,后半部分用于测试,测试时按照6.2节更改val.py中的数据集路径即可