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

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里写的

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:实时显示跟踪效果

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值