DeepSort是2017年提出的多目标跟踪算方法。该网络在MOT16获得冠军,不仅提升了精度,而且速度比之前快20倍。
论文: Nicolai Wojke, Alex Bewley, Dietrich Paulus. "SIMPLE ONLINE AND REALTIME TRACKING WITH A DEEP ASSOCIATION METRIC". Presented at ICIP 2016.
DeepSort由一个特征提取器、一个卡尔曼滤波和一个匈牙利算法组成。特征提取器用于提取框中人物特征信息,卡尔曼滤波根据上一帧信息预测当前帧人物位置,匈牙利算法用于匹配预测信息与检测到的人物位置信息。
使用的数据集:MOT16、Market-1501
MOT16:
- 数据集大小:1.9G,共14个视频帧序列
- test:7个视频序列帧
- train:7个序列帧
- 数据格式(一个train视频帧序列):
- det:视频序列中人物坐标以及置信度等信息
- gt:视频跟踪标签信息
- img1:视频中所有帧序列
- 注意:由于作者提供的视频帧序列检测到的坐标信息和置信度信息不一样,所以在跟踪时使用作者提供的信息,作者提供的npy文件。
Market-1501:
- 使用:
- 使用目的:训练DeepSort特征提取器
- 使用方法: 先使用prepare.py处理数据
- 硬件(Ascend/ModelArts)
- 准备Ascend或ModelArts处理器搭建硬件环境。
- 框架
- 如需查看详情,请参见如下资源:
通过官方网站安装MindSpore后,您可以按照如下步骤进行训练和评估:
# 进入脚本目录,预处理数据集(Market-1501)
python prepare.py
# 进入脚本目录,训练DeepSort特征提取器
python deep_sort/deep/train.py --run_modelarts=False --run_distribute=True --data_url="" --train_url=""
# 进入脚本目录,提取det信息(使用作者提供的检测框信息)
python process-npy.py
# 进入脚本目录,提取detections信息
python generater_detection.py --run_distribute=False --run_distribute=True --data_url="" --train_url="" --det_url="" --ckpt_url="" --model_name=""
# 进入脚本目录,生成跟踪信息
python evaluate_motchallenge.py --run_distribute=False --run_distribute=True --data_url="" --train_url="" --detection_url=""
#Ascend多卡训练
bash scripts/run_distribute_train.sh train_code_path RANK_TABLE_FILE DATA_PATH
Ascend训练:生成RANK_TABLE_FILE
├── DeepSort
├── scripts
│ ├──run_distribute_train.sh // 在Ascend中多卡训练
├── src //源码
│ │ ├── application_util
│ │ │ ├──image_viewer.py
│ │ │ ├──preprocessing.py
│ │ │ ├──visualization.py
│ │ ├──deep
│ │ │ ├──feature_extractor.py //提取目标框中人物特征信息
│ │ │ ├──original_model.py //特征提取器模型
│ │ │ ├──train.py //训练网络模型
│ │ ├──sort
│ │ │ ├──detection.py
│ │ │ ├──iou_matching.py //预测信息与真实框匹配
│ │ │ ├──kalman_filter.py //卡尔曼滤波,预测跟踪框信息
│ │ │ ├──linear_assignment.py
│ │ │ ├──nn_matching.py //框匹配
│ │ │ ├──track.py //跟踪器
│ │ │ ├──tracker.py //跟踪器
├── deep_sort_app.py //目标跟踪
├── evaluate_motchallenge.py //生成跟踪结果信息
├── generate_videos.py //根据跟踪结果生成跟踪视频
├── generater-detection.py //生成detection信息
├── prepare.py //处理训练数据集
├── process-npy.py //提取帧序列人物坐标和置信度
├── show_results.py //展示跟踪结果
├── README.md // DeepSort相关说明
train.py generater_detection.py evaluate_motchallenge.py 中主要参数如下:
--data_url: 到训练和提取信息数据集的绝对完整路径
--train_url: 输出文件路径。
--epoch: 总训练轮次
--batch_size: 训练批次大小
--device_targe: 实现代码的设备。值为'Ascend'
--ckpt_url: 训练后保存的检查点文件的绝对完整路径
--model_name: 模型文件名称
--det_url: 视频帧序列人物信息文件路径
--detection_url: 人物坐标信息、置信度以及特征信息文件路径
--run_distribute: 多卡运行
--run_modelarts: ModelArts上运行
-
Ascend处理器环境运行
python deep_sort/deep/train.py --run_modelarts=False --run_distribute=False --data_url="" --train_url="" # 或进入脚本目录,执行脚本 bash scripts/run_distribute_train.sh train_code_path RANK_TABLE_FILE DATA_PATH
经过训练后,损失值如下:
# grep "loss is " log epoch: 1 step: 3984, loss is 6.4320717 epoch: 1 step: 3984, loss is 6.414733 epoch: 1 step: 3984, loss is 6.4306755 epoch: 1 step: 3984, loss is 6.4387856 epoch: 1 step: 3984, loss is 6.463995 ... epoch: 2 step: 3984, loss is 6.436552 epoch: 2 step: 3984, loss is 6.408932 epoch: 2 step: 3984, loss is 6.4517527 epoch: 2 step: 3984, loss is 6.448922 epoch: 2 step: 3984, loss is 6.4611588 ...
模型检查点保存在当前目录下。
在运行以下命令之前,请检查用于评估的检查点路径。
-
Ascend处理器环境运行
# 进入脚本目录,提取det信息(使用作者提供的检测框信息) python process-npy.py # 进入脚本目录,提取detections信息 python generater_detection.py --run_distribute False --run_distribute True --data_url "" --train_url "" --det_url "" --ckpt_url "" --model_name "" # 进入脚本目录,生成跟踪信息 python evaluate_motchallenge.py --run_distribute=False --run_distribute=True --data_url="" --train_url="" --detection_url="" # 生成跟踪结果 python eval_motchallenge.py ----run_distribute=False --run_distribute=True --data_url="" --train_url="" --result_url=""
-
说明:脚本中引用头文件可能存在一些问题,自行修改头文件路径即可
#测量精度 python motmetrics/apps/eval_motchallenge.py --groundtruths="" --tests=""
-
测试数据集的准确率如下:
数据 | MOTA | MOTP | MT | ML | IDs | FM | FP | FN |
---|---|---|---|---|---|---|---|---|
MOT16-02 | 29.0% | 0.209 | 11 | 11 | 157 | 235 | 4189 | 8316 |
MOT16-04 | 58.7% | 0.168 | 42 | 15 | 60 | 243 | 6201 | 13360 |
MOT16-05 | 51.7% | 0.214 | 27 | 27 | 66 | 108 | 613 | 2615 |
MOT16-09 | 64.3% | 0.162 | 12 | 1 | 33 | 60 | 317 | 1529 |
MOT16-10 | 49.2% | 0.228 | 25 | 1 | 205 | 298 | 3126 | 2923 |
MOT16-11 | 65.9% | 0.153 | 30 | 9 | 53 | 100 | 913 | 2162 |
MOT16-13 | 45.0% | 0.237 | 62 | 7 | 284 | 327 | 3740 | 2269 |
overall | 51.9% | 0.189 | 209 | 71 | 858 | 1371 | 19099 | 33174 |
参数 | ModelArts |
---|---|
资源 | Ascend 910;CPU 2.60GHz, 192核;内存:755G |
上传日期 | 2021-04-26 |
MindSpore版本 | 1.1.1 |
数据集 | MOT16 Market-1501 |
训练参数 | epoch=10000, step=191, batch_size=8, lr=0.2 |
优化器 | SGD |
损失函数 | SoftmaxCrossEntropyWithLogits |
损失 | 0.0016 |
速度 | 0.019毫秒/步 |
总时间 | 10分钟 |
微调检查点 | 大约40M (.ckpt文件) |
脚本 | [DeepSort脚本] |
train.py中设置了随机种子。
请浏览官网主页。