(Deep_sort)代码复现及理解笔记➕deep_sort_app.py代码理解

2019年7月14日:
参考链接:https://www.cnblogs.com/wemo/p/10600454.html
g
https://blog.csdn.net/zjc910997316/article/details/83899474

Github开源代码链接:https://github.com/nwojke/deep_sort.git

完全版更加详细的加强版deepsort完整复现+MOT评测生成!!,持续更新!

1 准备工作()

下载deep sort代码文件
下载MOT16数据集
下载权重文件

2 导入库文件

进入pycharm ,open这个deep_sort-master文件夹
(Deep_sort)代码复现及理解笔记➕deep_sort_app.py代码理解_第1张图片
再把下载好的MOT16放在这个目录下,以及权重文件rescourses

找到deep_sort_app.py这个py文件并执行这个py文件。
若只显示以下内容,证明不缺少库,显示其他内容就调用相关的库文件即可。(Deep_sort)代码复现及理解笔记➕deep_sort_app.py代码理解_第2张图片

3 开始复现

3.1 整理环境

找到readme这样一个文件双击,里面是这个代码的说明书,按照要求执行操作,从pycharm底部的terminal运行。文件的一开始给出了一些库,一般缺少的就是这些库。并要求tensorflow版本不能低于1.10.
(Deep_sort)代码复现及理解笔记➕deep_sort_app.py代码理解_第3张图片
(Deep_sort)代码复现及理解笔记➕deep_sort_app.py代码理解_第4张图片根据上图,创建文件夹networks放在resources下,并把准备好的mars.pb文件放进去。
此时,我们可以看到MOT文件下是两个子文件架train和test
(Deep_sort)代码复现及理解笔记➕deep_sort_app.py代码理解_第5张图片
而resources文件下是以下内容(Deep_sort)代码复现及理解笔记➕deep_sort_app.py代码理解_第6张图片而刚在调整的pb文件在networks文件架下。

2019年7月15日:

3.2 Running the tracker(执行跟踪轨迹)

下面的示例启动其中一个上的跟踪器
(MOT16基准)序列。
我们假设资源已被提取到存储库根目录中
MOT16基准数据在’ ./MOT16 '中:

python deep_sort_app.py  \
    --sequence_dir=./MOT16/test/MOT16-06  \
    --detection_file=./resources/detections/MOT16_test/MOT16-06.npy  \
    --min_confidence=0.3  \
    --nn_budget=100  \
    --display=True

查看“python deep_sort_app.py -h”以获得可用选项的概述。存储库中还有一些脚本可以可视化结果,生成视频,并评估MOT挑战基准。

3.3 生成检测

在主跟踪应用程序旁边,这个存储库包含一个脚本为人物重新识别生成特征,适合比较视觉效果使用余弦相似性的行人边界框外观。
下面的示例从标准MOT挑战生成这些特性检测。同样,我们假设已经将资源提取到存储库中根目录和MOT16数据在’ ./MOT16 ':

python tools/generate_detections.py \
    --model=resources/networks/mars-small128.pb \
    --mot_dir=./MOT16/train \
    --output_dir=./resources/detections/MOT16_train

模型由TensorFlow 1.5生成。如果你遇到
不兼容时,重新导出freeze_model推理图,得到一个新的
“mars-small128。与你的版本兼容的pb ':

python tools/ freeze_model.py

“generate_detections’‘为MOT16数据集的每个序列存储一个单独的二进制文件,采用NumPy本机格式。每个文件包含一个数组形’ Nx138 ',其中N为对应MOT中检测到的次数序列。这个数组的前10列包含原始MOT检测从输入文件复制过来。其余128列存储外观描述符。此命令生成的文件可以作“deep_sort_app.py”。

NOTE:

If python tools/generate_detections.py raises a TensorFlow error,
try passing an absolute path to the --model argument. This might help in
some cases.
如果“python工具/ generate_detections。’ ‘引发一个tensorflow流错误,
尝试将绝对路径传递给’’–model’'参数。这可能有助于某些情况下的调试。

源文件的高级概览(Highlevel overview of source files)

In the top-level directory are executable scripts to execute, evaluate, and
visualize the tracker. The main entry point is in deep_sort_app.py.
This file runs the tracker on a MOTChallenge sequence.

In package deep_sort is the main tracking code:

  • detection.py: Detection base class.
  • kalman_filter.py: A Kalman filter implementation and concrete
    parametrization for image space filtering.
  • linear_assignment.py: This module contains code for min cost matching and
    the matching cascade.
  • iou_matching.py: This module contains the IOU matching metric.
  • nn_matching.py: A module for a nearest neighbor matching metric.
  • track.py: The track class contains single-target track data such as Kalman
    state, number of hits, misses, hit streak, associated feature vectors, etc.
  • tracker.py: This is the multi-target tracker class.

The deep_sort_app.py expects detections in a custom format, stored in .npy
files. These can be computed from MOTChallenge detections using
generate_detections.py. We also provide
pre-generated detections.

翻译:

在顶层目录中是要执行、计算和执行的可执行脚本可视化跟踪器。主要入口点在’ deep_sort_app.py '中。
该文件以MOTChallenge序列运行跟踪器。

在package ’ deep_sort '中是主要的跟踪代码:

detection.py : 检测 基本的 class。
kalman_filter.py:
一个卡尔曼波器的具体实现,
图像空间滤波参数化。
*’linear_assignment.py :该模块包含最小成本匹配和
匹配的级联。
*’iou_matching.py ':这个模块包含IOU匹配度量。
*’nn_matching.py:最近邻匹配度量的模块。
*’track.py:类包含单目标跟踪数据,如Kalman
状态、命中次数、未命中次数、命中条纹、相关特征向量等。
*tracker.py’:这是多目标跟踪器类

“deep_sort_app.py '期望检测以自定义格式存储在.npy中
文件。这些可以通过使用MOTChallenge检测来计算
“generate_detections.py”。我们还提供
(预生成的检测)(https://drive.google.com/open?id=1VVqtL0klSUvLnmBKS89il1EKC3IxUBVK)。

Citing DeepSORT

If you find this repo useful in your research, please consider citing the following papers:

@inproceedings{Wojke2017simple,
  title={Simple Online and Realtime Tracking with a Deep Association Metric},
  author={Wojke, Nicolai and Bewley, Alex and Paulus, Dietrich},
  booktitle={2017 IEEE International Conference on Image Processing (ICIP)},
  year={2017},
  pages={3645--3649},
  organization={IEEE},
  doi={10.1109/ICIP.2017.8296962}
}

@inproceedings{Wojke2018deep,
  title={Deep Cosine Metric Learning for Person Re-identification},
  author={Wojke, Nicolai and Bewley, Alex},
  booktitle={2018 IEEE Winter Conference on Applications of Computer Vision (WACV)},
  year={2018},
  pages={748--756},
  organization={IEEE},
  doi={10.1109/WACV.2018.00087}
}

最后附,运行样张:



小结:《deepsort》算法作为2017最具轰动的一篇人工智能总结性的文献,十分具有代表性,特别适合我这种小白入门学习,今后会反复琢磨早日出师。不过,从这几张图片可以看出,并不是可以百分之百的识别准确,今后会更加深入的学习其他算法。
end。

2019年7月28日晚 ==> 加强版复现过程

系统环境 ubuntu18.04Lts + pycharm 2019.6 +tensorflow==1.12 + gtx960M

之前没有完全理解程序调试过程,目前已完全掌握,重新编写过程,供大家参考.

1 下载MOT15-17(这里我采用的是16,记住下载的最大的那个包,大约2个g)

(Deep_sort)代码复现及理解笔记➕deep_sort_app.py代码理解_第7张图片

2下载预训练模型mars-small128.ckpt-68577,一会用

(论文对这个预训练权重的描述:以上方法的成功应用需要提前离线训练区分度高的特征嵌入。为此,DeepSORT 采用了一个在大规模行人重新识别数据集(MARS)上训练的 CNN,其中包含1261个行人的超过110万张图像,这使得它非常适合行人跟踪中的深度度量学习。
如下表所示,模型结构为宽残差网络(WRNS),其中有两个卷积层,后面是六个残差块。维度 128 128128 的全局特征映射在 “Dense 10”层中计算。规范化投影特征到单元超球面上从而与余弦外观度量兼容。网络参数量为2.67M,在 Nvidia GeForce GTX 1050移动 GPU 上,32个边界框的一次前向花费大约 Unexpected text node: ’ 'Unexpected text node: ’ '30ms。因此,只要有现代 GPU,该网络就非常适合在线跟踪。作者在 GitHub 仓库中提供了预先训练的模型以及可用于生成特征的脚本。)

3 把预训练权重mars.ckpt6857放到deep_sort-master内新建的文件夹下,resources/networks/

(Deep_sort)代码复现及理解笔记➕deep_sort_app.py代码理解_第8张图片
注意:一开始是没下面这个文件的,一会告诉原因!

4 打开readme.md,开始阅读手册

5 我们发现手册的第一步中,我们并没有一些内容(.npy),所以无法执行,我们先看后面(Deep_sort)代码复现及理解笔记➕deep_sort_app.py代码理解_第9张图片

6(Deep_sort)代码复现及理解笔记➕deep_sort_app.py代码理解_第10张图片

这里也有一个没有的内容,就是这个mars-small128.pb,不过这个文件是不是很熟,我们刚才下载过一个类似的文件,所有推测,应该是有关系的,到这里我们generating detections和running tracker部分都没有做.只是浏览了一下.其实很多时候复线都是这样的,不可以一根筋,不一定要顺序的执行我们可以往下看

7

模型由TensorFlow 1.5生成。如果遇到不兼容,则重新导出冻结推理图,以获得一个新的mars-small128。与你的版本兼容的pb:

(Deep_sort)代码复现及理解笔记➕deep_sort_app.py代码理解_第11张图片
为MOT16数据集的每个序列存储一个单独的二进制文件,格式为NumPy本机格式。每个文件包含一个形状为Nx138的数组,其中N是相应MOT序列中检测到的数目。这个数组的前10列包含从输入文件复制过来的原始MOT检测。其余128列存储外观描述符。这个命令生成的文件可以用作deep_sort_app.py的输入。

注意:如果python tools/generate_detections.py引发一个TensorFlow错误,请尝试向——model参数传递一个绝对路径。这在某些情况下可能会有所帮助。

由此我们知道了.我们可以通过tool文件夹下的freeze_model.py文件利用我们下载好的mars-samll128.ckpt68577来生成一个mars128.pb,也就是这个权重模型.
(Deep_sort)代码复现及理解笔记➕deep_sort_app.py代码理解_第12张图片
经过修改和阅读我们知道让生成的128.pb放到与之前ckpt文件同一文件夹下,这样我们就得到了128.pb
,所以,由此,我们就得到了执行generate decetions的全部条件.

8 generating decetions

我们执行这个程序,通过跟踪权重模型和MOT16中的train部分视频(帧img),生成关于train部分视频的decetion 结果
–model 为freeze model生成的mars128.pb文件
–mot_dir为MOT16中的部分视频,这里也可以是test视频test就是测试用的视频,train就是训练用的视频,分工明确,所以是两部分组成.
–output_dir为生成的视频decetions,为.npy numpy的二进制文件.如图所示(这个执行比较慢,跟显卡有关,所以需要耐心等待一会!!!)
(Deep_sort)代码复现及理解笔记➕deep_sort_app.py代码理解_第13张图片
到这里为止,我们就又或得了视频的.npy文件也叫decetions

9 running tracker

所以我们倒推到了第一步,这里就可以执行了,我们input
–sequence 图像的信息序列,在MOT16的子文件下自带
–detection_file 这个就是上一步的结果 .npy文件
– min_confidence 最小置信度,默认
–nn_buget 某个阈值 默认
–display 显示结果视频
执行就可以看到多目标跟踪的视频啦,视频在第一p的结尾可以看到这里就不赘述了.

10 MOT生成评价表部分

这个可是真的很久才明白,不过不难
https://blog.csdn.net/sinat_34715587/article/details/90340160
这里面参数讲解很详细,这里只做复现过程
下载python版本的评分包 py-motmerocs-master
1.readme
2. 直接app文件里的内容,想仔细了解原理的可以看readme.md,这里对包也有要求.
3. app下有个eval_motchallenge.py顾名思义就是它了,如图,我们可以发现这个程序也需要相关数据的路径,这里我把它修改做成了一个方法,run就可以运行不需要手动输入参数了,大家可以自己试一下,很方便
在这里插入图片描述
↓↓↓(Deep_sort)代码复现及理解笔记➕deep_sort_app.py代码理解_第14张图片
grouthturth这里要注意,只有train视频有,这为什么我也不清楚,怎么生成后面我再要就,所以我们这里就直接用train部分,不考虑test先

(Deep_sort)代码复现及理解笔记➕deep_sort_app.py代码理解_第15张图片
之后会等待很长一段时间,runmerix…
这个时候为什么这么漫长我也不知道,但是就是这么漫长…然后就会有表格出现,end
.今后可能会进行补充更新,欢迎大家关注我!小白一枚,请多指教!!

你可能感兴趣的:(目标跟踪,代码理解,个人记录,deep,sort)