1. 准备代码与数据

deep_sort开源代码

克隆到本地服务器

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
  1. 需要视频文件
  2. 需要目标检测detection的权重文件(npy 文件)(ps:目标检测框架和deep_sort框架应该一致)

效果:直观来看还不错,当然这是基于目标检测的检测的结果,如果检测不到目标,tracking也无法做。当人行走过程中,被遮挡之后再次出现,目标ID还是维持不变。(思考:这里人一般是直线前行,如果目标在遮挡之后,掉头再出现,可能ID就会变化)。

很大的问题:生成的视频帧率很低,不到30FPS,肉眼能看出明显卡顿。(网上说通过优化可以达到高帧率,具体待查)

4.2 train

如何训练?

余弦度量学习方法

《deep sort》复现过程的更多相关文章

  1. ShadowBroker释放的NSA工具中Esteemaudit漏洞复现过程

    没有时间测试呢,朋友们都成功复现,放上网盘地址:https://github.com/x0rz/EQGRP 近日臭名昭著的方程式组织工具包再次被公开,TheShadowBrokers在steemit. ...

  2. 多目标跟踪(MOT)论文随笔-SIMPLE ONLINE AND REALTIME TRACKING WITH A DEEP ASSOCIATION METRIC (Deep SORT)

    网上已有很多关于MOT的文章,此系列仅为个人阅读随笔,便于初学者的共同成长.若希望详细了解,建议阅读原文. 本文是tracking by detection 方法进行多目标跟踪的文章,在SORT的基础 ...

  3. Struts2 REST 插件 XStream 远程代码执行漏洞 S2-052 复现过程

    v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...

  4. NSA Fuzzbunch中EternalRomance工具复现过程

    自Shadow Brokers公布NSA泄露工具后,各路大神陆陆续续发表复现过程,这几天也仔细试了各种套路,一直想弄明白DoublePulsar中的shellcode到底是如何用的,刚好又在模拟环境中 ...

  5. 【3D】PoseCNN姿态检测网络复现过程记录

    最近在研究室内6D姿态检测相关问题,计划在PoseCNN网络基础上进行改进实现.但是在第一步的复现过程中踩了无数的坑,最终成功运行了demo,但目前数据集train还是遇到了一些问题.有问题欢迎一起交 ...

  6. Linux sudo权限提升漏洞CVE-2021-3156 POC及复现过程

    漏洞简介 2021年1月26日,国外研究团队披露了sudo 中存在的堆溢出漏洞(CVE-2021-3156).利用该漏洞,非特权账户可以使用默认的sudo配置主机上获取root权限,该漏洞影响1.8. ...

  7. php反序列化漏洞复现过程

    PHP反序列化漏洞复现 测试代码 我们运行以上代码文件,来证明函数被调用: 应为没有创建对象,所以构造函数__construct()不会被调用,但是__wakeup()跟__destruct()函数都 ...

  8. MapReduce:详解Shuffle(copy,sort,merge)过程(转)

    Shuffle过程是MapReduce的核心,也被称为奇迹发生的地方.要想理解MapReduce, Shuffle是必须要了解的.我看过很多相关的资料,但每次看完都云里雾里的绕着,很难理清大致的逻辑, ...

  9. CVE-2020-2551复现过程

    项目地址 cnsimo/CVE-2020-2551 CVE-2020-2551 weblogic iiop 反序列化漏洞 该项目的搭建脚本在10.3.6版本经过测试,12版本未测试. 环境 kali+ ...

随机推荐

  1. 2018.10.30 bzoj4942: [Noi2017]整数(线段树压位)

    传送门 直接把修改的数拆成logloglog个二进制位一个一个修改是会TLETLETLE的. 因此我们把303030个二进制位压成一位储存在线段树里面. 然后维护区间中最靠左二进制位不为0/1的下标. ...

  2. Java对象的克隆

    今天要介绍一个概念,对象的克隆.本篇有一定难度,请先做好心理准备.看不懂的话可以多看两遍,还是不懂的话,可以在下方留言,我会看情况进行修改和补充. 克隆,自然就是将对象重新复制一份,那为什么要用克隆呢 ...

  3. java socket之上传文件

    一.功能介绍 该功能主要实现,将客户端的:F:/work/socketSample/filetemp/client/test_client.txt上传到服务端F:/work/socketSample/ ...

  4. celery 4.1下报kombu.exceptions.EncodeError: Object of type 'bytes' is not JSON serializable 处理方式

    #python代码如下 from celery import Celeryimport subprocess app = Celery('tasks', broker='redis://localho ...

  5. Jquery获取选中的文本值

    $(document).ready(function() { $(".contenttext").mouseup(function(e) { var txt; var parent ...

  6. java web 实现文件夹上传(保留目录结构)

    今天我弄了一下文件夹上传(很简单的 首先,我们的html需要这样写 <form action="/file/upload" enctype="multipart/f ...

  7. Spring的两种代理JDK和CGLIB的区别浅谈

    一.原理区别: java动态代理是利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理. 而cglib动态代理是利用asm开源包,对代理对象类的class文件 ...

  8. android webview使用心得 屏幕宽度自适应

    webview中右下角的缩放按钮能不能去掉 settings.setDisplayZoomControls(false); //隐藏webview缩放按钮 让Webview加载的页面居中显示有我知道的 ...

  9. JVM的參數

    博客:https://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html#CMSInitiatingOccupancyFraction_v ...

  10. hdu 4455 Substrings(计数)

    题目链接:hdu 4455 Substrings 题目大意:给出n,然后是n个数a[1] ~ a[n], 然后是q次询问,每次询问给出w, 将数列a[i]分成若干个连续且元素数量为w的集合,计算每个集 ...