Skip to content

lyqcom/deepsort

Repository files navigation

目录

DeepSort描述

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由一个特征提取器、一个卡尔曼滤波和一个匈牙利算法组成。特征提取器用于提取框中人物特征信息,卡尔曼滤波根据上一帧信息预测当前帧人物位置,匈牙利算法用于匹配预测信息与检测到的人物位置信息。

数据集

使用的数据集:MOT16Market-1501

MOT16:

  • 数据集大小:1.9G,共14个视频帧序列
    • test:7个视频序列帧
    • train:7个序列帧
  • 数据格式(一个train视频帧序列):
    • det:视频序列中人物坐标以及置信度等信息
    • gt:视频跟踪标签信息
    • img1:视频中所有帧序列
    • 注意:由于作者提供的视频帧序列检测到的坐标信息和置信度信息不一样,所以在跟踪时使用作者提供的信息,作者提供的npy文件。

Market-1501:

  • 使用:
    • 使用目的:训练DeepSort特征提取器
    • 使用方法: 先使用prepare.py处理数据

环境要求

快速入门

通过官方网站安装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中设置了随机种子。

ModelZoo主页

请浏览官网主页

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published