1. 准备代码与数据
克隆到本地服务器
git clone https://github.com/nwojke/deep_sort.git
下载MOT16数据集(MOT:Multi-Object Tracking, 16的意思是相比MOT15多了更多的细节信息)
MOT16数据集
1.1 数据集介绍
该数据集分为了test和train,每个文件夹有7个子文件夹。
./MOT16/train
以训练集中的MOT16-02为例,探究数据数据集格式:
MOT16-02下包含三个四个子文件:det、gt、img1、seqinfo.ini
1.1.1 det:
det下只有一个文件,det.txt。每行一个标注,代表一个检测物体
格式为:
, , , , , , , , ,
- :第几帧(可以看到img1*600帧图)
- :目标运动轨迹编号(在目标文件中都为-1)
- <bb_* >:bbox的坐标尺寸
- : 分类的置信度分数
- <x, y, z> :用于3D检测,2D检测总是为1
1.1.2 img1
这个目录就是把视频一帧帧抽取出来的图片,总共600张。文件命名从000001.jpg到000600.jpg。
1.1.3 gt
gt文件夹下只有一个文件,gt.txt
第1个值:视频帧号
第2个值:目标运动轨迹的ID号
第3-6值:bbox坐标(x, y, w, h)
第7个值:目标轨迹是否进入考虑范围(0:忽略, 1:active)
第8个值:该轨迹对应的目标种类
第9个值:
box的visibility ratio,表示目标运动时被其他目标box包含/覆盖或者目标之间box边缘裁剪情况。
1.1.4 seqinfo.ini文件
视频的基本信息介绍
2. 运行目标跟踪器
python deep_sort_app.py \
--sequence_dir=./MOT16/test/MOT16-06 \
--detection_file=./resources/detections/MOT16_POI_test/MOT16-06.npy \
--min_confidence=0.3 \
--nn_budget=100 \
--display=True
#在自己生成的feature运行tracker
python deep_sort_app.py \
--sequence_dir=./MOT16/test/MOT16-01 \
--detection_file=./resources/detections/wemo_test/MOT16-01.npy \
--min_confidence=0.3 \
--nn_budget=100 \
--display=True
可选参数解释:
--sequence_dir:视频切成图片序列的文件夹,包含帧序列,每一帧的帧号、目标的bbox、
--detection_file:检测的权重文件 .npy
--output_file:输出类似于gt.txt的文件格式,轨迹不再是默认-1,发生变化
--min_confidence:检测结果阈值。低于这个阈值的检测结果将会被忽略
--nms_max_overlap:非极大抑制的阈值
--max_cosine_distance:余弦距离的控制阈值
--nn_budget:描述的区域的最大值
--display:显示目标追踪结果
3. generating detections
generate features for persons re-identification.
python tools/generate_detections.py \
--model=resources/networks/mars-small128.pb \
--mot_dir=./MOT16/train \
--output_dir=./resources/detections/MOT16_train
#自定义生成feature
python tools/generate_detections.py \
--model=resources/networks/mars-small128.pb \
--mot_dir=./MOT16/test \
--output_dir=./resources/detections/wemo_test
--model:是模型框架的权重参数文件
输入:
输出:
4. 如何在自己的数据上运行deep_sort,实现目标追踪?
4.1 test
- 需要视频文件
- 需要目标检测detection的权重文件(npy 文件)(ps:目标检测框架和deep_sort框架应该一致)
效果:直观来看还不错,当然这是基于目标检测的检测的结果,如果检测不到目标,tracking也无法做。当人行走过程中,被遮挡之后再次出现,目标ID还是维持不变。(思考:这里人一般是直线前行,如果目标在遮挡之后,掉头再出现,可能ID就会变化)。
很大的问题:生成的视频帧率很低,不到30FPS,肉眼能看出明显卡顿。(网上说通过优化可以达到高帧率,具体待查)
4.2 train
如何训练?
余弦度量学习方法