ocsort 复现

1 创建环境

conda create -n ocsort python=3.8
conda activate ocsort
#根据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

 然后把代码手动下载解压好,源码地址:

GitHub - noahcao/OC_SORT: [CVPR2023] The official repo for OC-SORT: Observation-Centric SORT on video Multi-Object Tracking. OC-SORT is simple, online and robust to occlusion/non-linear motion.

2 依赖项

cd ocsort

pip3 install -r requirements.txt

python3 setup.py develop

pip3 install cython

#pip3 install 'git+https://github.com/cocodataset/cocoapi.git#subdirectory=PythonAPI'
#这个命令会报错,故直接用pip安装
pip install pycocotools

pip3 install cython_bbox pandas xmltodict

3 准备数据集

[MOT17](https://motchallenge.net/),

[MOT20](https://motchallenge.net/),

[CrowdHuman](https://www.crowdhuman.org/),

[Cityperson](https://github.com/Zhongdao/Towards-Realtime-MOT/blob/master/DATASET_ZOO.md),

[ETHZ](https://github.com/Zhongdao/Towards-Realtime-MOT/blob/master/DATASET_ZOO.md),

[DanceTrack](https://github.com/DanceTrack/DanceTrack)

在ocsort主目录下新建文件夹datasets,数据集格式:

mot就是MOT17,

dancetrack数据集我没有准备,故后文dancetrack相关代码我没有实际运行过,指令是作者的readme里写的

3.2 预训练模型

OC_SORT/docs/MODEL_ZOO.md at master · noahcao/OC_SORT · GitHub

4 数据集处理

4.1 转换成coco格式

python3 tools/convert_crowdhuman_to_coco.py 
python3 tools/convert_mot17_to_coco.py 
python3 tools/convert_mot20_to_coco.py 
python3 tools/convert_cityperson_to_coco.py 
python3 tools/convert_ethz_to_coco.py 
python3 tools/convert_dance_to_coco.py 

DEBUG:

coco转换将33行Human的H改成小写

cityperson和ethz提示找不到datasets/data_path/citypersons.train'文件

ByteTrack/datasets/data_path at main · ifzhang/ByteTrack (github.com)

将这个文件夹保存到dataset下面,再转换即可

4.2 混合数据集(如果不自己训练yolox则可跳过此步)

4.1.1 混合消融

cd datasets
mkdir -p mix_mot_ch/annotations
cp mot/annotations/val_half.json mix_mot_ch/annotations/val_half.json
cp mot/annotations/test.json mix_mot_ch/annotations/test.json
cd mix_mot_ch
ln -s ../mot/train mot_train
ln -s ../crowdhuman/Crowdhuman_train crowdhuman_train
ln -s ../crowdhuman/Crowdhuman_val crowdhuman_val
cd ..
cd ..

python3 tools/mix_data_ablation.py

 运行结果:

4.2 混合mot17训练

cd datasets
mkdir -p mix_det/annotations
cp mot/annotations/val_half.json mix_det/annotations/val_half.json
cp mot/annotations/test.json mix_det/annotations/test.json
cd mix_det
ln -s ../mot/train mot_train
ln -s ../crowdhuman/Crowdhuman_train crowdhuman_train
ln -s ../crowdhuman/Crowdhuman_val crowdhuman_val
ln -s ../Cityscapes cp_train
ln -s ../ETHZ ethz_train
cd ..

python3 tools/mix_data_test_mot17.py

 运行结果:

 4.3 混合mot20训练

cd datasets
mkdir -p mix_mot20_ch/annotations
cp MOT20/annotations/val_half.json mix_mot20_ch/annotations/val_half.json
cp MOT20/annotations/test.json mix_mot20_ch/annotations/test.json
cd mix_mot20_ch
ln -s ../MOT20/train mot20_train
ln -s ../crowdhuman/Crowdhuman_train crowdhuman_train
ln -s ../crowdhuman/Crowdhuman_val crowdhuman_val
cd ..
cd ..

python3 tools/mix_data_test_mot20.py

 运行结果:

TODO:5 训练(如果不自己训练yolox则可跳过此步)

coco预训练模型:https://github.com/Megvii-BaseDetection/YOLOX/tree/0.1.0

在ocsort下新建目录pretrained,训练模型都可以放在这里

5.1 训练消融模型(mot17前一半+crowdhuman)

python3 tools/train.py -f exps/example/mot/yolox_x_ablation.py -d 8 -b 48 --fp16 -o -c pretrained/yolox_x.pth

5.2 训练mot17模型(mot17+crowdhuman+ethz+cityperson)

python3 tools/train.py -f exps/example/mot/yolox_x_mix_det.py -d 8 -b 48 --fp16 -o -c pretrained/yolox_x.pth

5.3 训练mot20模型(mot20+crowdhuman)

TODO:取消部分注释框然后再训练?

python3 tools/train.py -f exps/example/mot/yolox_x_mix_mot20_ch.py -d 8 -b 48 --fp16 -o -c pretrained/yolox_x.pth

5.4 训练dance模型(未运行)

python3 tools/train.py -f exps/example/dancetrack/yolox_x.py -d 8 -b 48 --fp16 -o -c pretrained/yolox_x.pth

5.5 训练自己的数据集(未运行)

1)准备自己的数据集

2)转换成coco格式,参考4.1的文件

3)编写数据集的exp文件,参考5.1-5.3,不要忘记修改Exp文件中的get_data_loader()和get_eval_loader。

4)以下指令进行训练

python3 tools/train.py -f exps/example/mot/your_exp_file.py -d 8 -b 48 --fp16 -o -c pretrained/yolox_x.pth

6 测试

测试代码是tools/run_ocsort.py (dancetrack是tools/run_ocsort_dance.py)

命令行参数在utils/args.py,可以查询各个参数的用法

--expn是保存的文件名,可自行更改,

--output_dir是保存路径,可自行更高,默认evaldata/trackers/mot_challenge

其他参数按需添加

6.1 Dancetrack val(未运行)

python tools/run_ocsort_dance.py -f exps/example/mot/yolox_dancetrack_val.py -c pretrained/bytetrack_dance_model.pth.tar -b 1 -d 1 --fp16 --fuse --expn $exp_name

6.2 Dancetrack test(未运行)

python tools/run_ocsort_dance.py -f exps/example/mot/yolox_dancetrack_test.py -c pretrained/bytetrack_dance_model.pth.tar -b 1 -d 1 --fp16 --fuse --test --expn $exp_name

6.3 MOT17 test

# MOT17
python3 tools/run_ocsort.py -f exps/example/mot/yolox_x_mix_det.py -c pretrained/ocsort_x_mot17.pth.tar -b 1 -d 1 --fp16 --fuse --expn oc_yolox_
mot17_test

 结果:没有gt文件,需要将结果上传至motchallenge

 文件保存在:

6.4 MOT20 test

注意mot20这个参数,否则就是测试mot17

# MOT20
python3 tools/run_ocsort.py -f exps/example/mot/yolox_x_mix_mot20_ch.py -c pretrained/ocsort_x_mot20.pth.tar -b 1 -d 1 --fp16 --fuse --track_thresh 0.4 --mot20 --expn oc_yolox_mot20_test

 运行结果:同样需要上传到motchallenge

保存在:

6.5 MOT17 后half(消融)

python3 tools/run_ocsort.py -f exps/example/mot/yolox_x_ablation.py -c pretrained/ocsort_mot17_ablation.pth.tar -b 1 -d 1 --fp16 --fuse --expn oc_yolox_ablation

运行结果:

结果保存在:

 TODO:如何测HOTA和FPS?

6.6 DEBUG

6.6.1 module 'numpy' has no attribute 'float'

参考运行python代码时遇到module ‘numpy‘ has no attribute ‘float‘解决方法_wongHome的博客-CSDN博客

pip uninstall numpy
pip install -U numpy==1.23.5

6.7 kitti test 和headtrack21 (未运行)

7 对现有结果离线插值

7.1 线性插值

result path 填之前保存的路径,这里以消融实验结果为例,save path填想要保存的新路径

#离线后处理插值
python3 tools/interpolation.py $result_path $save_path

#举个栗子
python3 tools/interpolation.py evaldata/trackers/mot_challenge/MOT17-val/oc_yolox_ablation_results/data evaldata/trackers/mot_challenge/MOT17-val/oc_yolox_ablation_results/interpolation

DEBUG:维度不对

 在这一行报错,意思是seq的第二维是10,tra的第二维是7

检查之后发现72行for循环的最后一次迭代将tra的第二维变成了7,在这之前都是10的

暂时的解决办法:

 去掉max_id的+1

TODO:(问题出在最后一次迭代,但我暂时没弄清为何id要加1,先这么改吧)

运行结果:

 结果保存在save path下:

TODO:7.2 在插值基础上高斯回归

# 在现有插值的基础上使用线性回归
python3 tools/gp_interpolation.py $raw_results_path $linear_interp_path $save_path

#举个栗子,注意,是在已有插值的基础上使用
python3 tools/gp_interpolation.py evaldata/trackers/mot_challenge/MOT17-val/oc_yolox_ablation_results/data evaldata/trackers/mot_challenge/MOT17-val/oc_yolox_ablation_results/interpolation evaldata/trackers/mot_challenge/MOT17-val/oc_yolox_ablation_results/gp_interpolation

DEBUG:

1)no module named sklearn
pip install scikit-learn
2)Expected 2D array, got 1D array instead:array=[-0.47850949].
未解决

8 跟踪本地视频

python3 tools/demo_track.py -c pretrained/ocsort_x_mot17.pth.tar -b 1 -d 2 --fp16 --fuse --expn neu1 --demo_type video --path /home/extend/zhy/dataset/NEU/1.mp4 --save_result -f exps/example/mot/yolox_x_mix_det.py

结果保存在YOLOX_outputs下,但只有txt,没有视频

TODO:实时显示跟踪效果

DeepOCsort是一种跟踪网络,可以选择自行选择BoT-sort、Bytetrack、DeepocsortOcsort和Strongsort作为跟踪网络。根据引用\[1\]中的描述,DeepOCsort和Bytetrack被认为是效果最好的跟踪网络之一。这意味着DeepOCsort在目标跟踪方面具有较高的性能和准确性。 另外,要评估DeepOCsort的跟踪性能,可以使用MOT challenge提供的数据集,并根据训练数据集的ground truth文件,对比DeepOCsort跟踪窗口位置和跟踪ID,从而得到一系列评价指标。引用\[2\]提供了一个纯采用Python的算法代码,可以用于计算MOT评价指标。 关于目标ID的问题,引用\[3\]中提到,gt.txt是标注产生的目标ID,而MOT16-13.txt则是DeepOCsort跟踪产生的目标ID。这两种方式产生的目标ID可能不同。TrackEval算法使用IOU(Intersection over Union)来判断两个txt文件中不同的目标ID是否属于同一个目标。通过计算跟踪框的IOU,可以判断目标的相似性。如果两个跟踪框的IOU值较高,则可以认为它们属于同一个目标。 总结起来,DeepOCsort是一种跟踪网络,可以选择作为跟踪网络之一。它在目标跟踪方面具有较高的性能和准确性。评估DeepOCsort的跟踪性能可以使用MOT challenge提供的数据集,并使用引用\[2\]中提供的算法代码计算评价指标。在判断目标ID是否属于同一个目标时,可以使用IOU来进行相似性判定。 #### 引用[.reference_title] - *1* [多目标跟踪:YOLOv8+strongsort](https://blog.csdn.net/Orange_sparkle/article/details/129509459)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [deepsort和MOT16指标评价](https://blog.csdn.net/weixin_44238733/article/details/124148469)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值