(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文件夹
再把下载好的MOT16放在这个目录下,以及权重文件rescourses
。
找到deep_sort_app.py这个py文件并执行这个py文件。
若只显示以下内容,证明不缺少库,显示其他内容就调用相关的库文件即可。
3 开始复现
3.1 整理环境
找到readme这样一个文件双击,里面是这个代码的说明书,按照要求执行操作,从pycharm底部的terminal运行。文件的一开始给出了一些库,一般缺少的就是这些库。并要求tensorflow版本不能低于1.10.
根据上图,创建文件夹networks放在resources下,并把准备好的mars.pb文件放进去。
此时,我们可以看到MOT文件下是两个子文件架train和test
而resources文件下是以下内容而刚在调整的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)
2下载预训练模型mars-small128.ckpt-68577,一会用
3 把预训练权重mars.ckpt6857放到deep_sort-master内新建的文件夹下,resources/networks/
注意:一开始是没下面这个文件的,一会告诉原因!
4 打开readme.md,开始阅读手册
5 我们发现手册的第一步中,我们并没有一些内容(.npy),所以无法执行,我们先看后面
6
这里也有一个没有的内容,就是这个mars-small128.pb,不过这个文件是不是很熟,我们刚才下载过一个类似的文件,所有推测,应该是有关系的,到这里我们generating detections和running tracker部分都没有做.只是浏览了一下.其实很多时候复线都是这样的,不可以一根筋,不一定要顺序的执行我们可以往下看
7
模型由TensorFlow 1.5生成。如果遇到不兼容,则重新导出冻结推理图,以获得一个新的mars-small128。与你的版本兼容的pb:
为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,也就是这个权重模型.
经过修改和阅读我们知道让生成的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的二进制文件.如图所示(这个执行比较慢,跟显卡有关,所以需要耐心等待一会!!!)
到这里为止,我们就又或得了视频的.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就可以运行不需要手动输入参数了,大家可以自己试一下,很方便
↓↓↓
grouthturth这里要注意,只有train视频有,这为什么我也不清楚,怎么生成后面我再要就,所以我们这里就直接用train部分,不考虑test先
之后会等待很长一段时间,runmerix…
这个时候为什么这么漫长我也不知道,但是就是这么漫长…然后就会有表格出现,end
.今后可能会进行补充更新,欢迎大家关注我!小白一枚,请多指教!!
(Deep_sort)代码复现及理解笔记➕deep_sort_app.py代码理解相关推荐
- ResNeXt代码复现+超详细注释(PyTorch)
ResNeXt就是一种典型的混合模型,由基础的Inception+ResNet组合而成,本质在gruops分组卷积,核心创新点就是用一种平行堆叠相同拓扑结构的blocks代替原来 ResNet 的三层 ...
- 《代码阅读》读书笔记(一)
<代码阅读>读书笔记(一) <代码阅读>(<Code Reading The Open Source Perspective>)Diomidis Spinellis ...
- 图像分割套件PaddleSeg全面解析(一)train.py代码解读
首先祝贺百度团队百度斩获NeurIPS2020挑战赛冠军,https://www.jiqizhixin.com/articles/2020-12-09-2. 在此次比赛中使用的是基于飞桨深度学习框架开 ...
- 经典神经网络论文超详细解读(三)——GoogLeNet InceptionV1学习笔记(翻译+精读+代码复现)
前言 在上一期中介绍了VGG,VGG在2014年ImageNet 中获得了定位任务第1名和分类任务第2名的好成绩,而今天要介绍的就是同年分类任务的第一名--GoogLeNet . 作为2014年Ima ...
- 经典神经网络论文超详细解读(八)——ResNeXt学习笔记(翻译+精读+代码复现)
前言 今天我们一起来学习何恺明大神的又一经典之作: ResNeXt(<Aggregated Residual Transformations for Deep Neural Networks&g ...
- frustum pointnets训练代码学习笔记——kitti_object.py
frustum pointnets训练代码学习笔记--kitti_object.py 本文记录了博主学习frustum pointnets过程中遇到的2D和3D数据库显示程序.为了画出输出结果,博主希 ...
- 3D目标检测——代码理解——Second代码:数据处理kitti_dataset.py的理解
3D目标检测-代码理解-Second代码:数据处理kitti_dataset.py的理解 Second代码的github地址:Second代码的github地址 Second文章的链接:Second文 ...
- 论文学习笔记: Learning Multi-Scale Photo Exposure Correction(含pytorch代码复现)
论文学习笔记: Learning Multi-Scale Photo Exposure Correction--含pytorch代码复现 本章工作: 论文摘要 训练数据集 网络设计原理 补充知识:拉普 ...
- GraphDTA论文阅读小白笔记(附代码注释和复现流程)
目录 摘要 背景 数据和方法 GraphDTA概述 药物表征 蛋白表征 分子图的深度学习 GCN GAT GIN GAT-GCN 基准 模型解释 结果讨论 图模型的表现超过了其它模型 图模型发现已知药 ...
最新文章
- 【转】解决smtplib发送多人邮件没有展示收件人的问题
- Python语言学习 (七)1.1
- winform DataGrid排序、去掉第一的空白列
- python与图书编辑
- redis和kafka比较
- 形参与实参在函数中的传递
- IDEA写sql语句的时候没有提示信息的处理办法
- Spring源码解析目录
- 关于在Google Earth中动态加载地标问题
- java使用阿里邮箱发送邮件
- 虚短”“虚断”两板斧,搞定运算放大器 11张大图详(转)感觉特别有用 转过来收藏...
- GAN(生成对抗网络)的系统全面介绍(醍醐灌顶)
- PMP 项目进度管理 -CPI SPI CV SV
- Web身份验证(WebAuthn)
- matplotlib 设置坐标轴位置(spines),设置坐标别名(xticks,yticks)
- android禁止输入框自动弹出软键盘,怎么禁用输入法-Android禁止EditText输入框自动弹出软键盘的4种方法...
- MTK虚拟sensor梳理
- Cisco RV340命令执行漏洞(CVE-2022-20707)及关联历史漏洞分析
- Negroni中间件源码分析
- 华为云数据库mysql云灾备方案_华为云MySQL云灾备解决方案发布,放心的数据库都有异地保护...
热门文章
- 深度学习环境配置 (Ubuntu18.04 + CUDA10.0 + cuDNN7.6.5 + TensorFlow2.0)
- 【芝麻背调百科】​员工隐瞒婚姻状况入职是否构成劳动法意义上的欺诈?
- 南京市软件行业协会程序员分会(筹)章程
- oracle 数据库体系结构详解
- fastTime格式化时间
- PC 销量下滑原因多,Windows 10 背后在补刀?
- 用ChatGPT通过WebSocket开发一个交互性的五子棋微信小程序(二)
- 赶鸭子上架之Vue学习(一)
- React中实现tab切换
- transform的高级用法