deepsort算法原理以及代码解析

2023-11-08

概述

前边我们讲了sort算法的原理,并且指出了它的不足–IDsw过大,为了解决该问题,17年时候sort算法的团队又提出了DeepSort算法。Deepsort在原来Sort算法的基础上,改进了以下内容:

  1. 使用级联匹配算法:针对每一个检测器都会分配一个跟踪器,每个跟踪器会设定一个time_since_update参数。
  2. 添加马氏距离与余弦距离:实际上是针对运动信息与外观信息的计算。
  3. 添加深度学习特征:这一部分也就是ReID的模块,也是deepsort的亮点之一。

代码流程

由于deepsort的流程和算法原理几乎和sort一样,只是说增加了上边三个特色,因此我们直接从代码开始讲起:

整体流程图

算法的整体流程图如下所示:

2020-07-13_161051

源码流程

image-20200715113558645

首先我们从主函数部分开始说起,主函数部分整体逻辑是比较简单的,首先是将命令行参数进行解析,解析的内容包括,MOTChanlleng序列文件所在路径、需要检测文件所在的目录等一系列参数。解析之后传递给run方法,开始运行。

image-20200715113707665

进入run函数之后,首先会收集流信息,包括图片名称,检测结果以及置信度等,后续会将这些流信息传入到检测框生成函数中,生成检测框列表。然后会初始化metric对象,metric对象简单来说就是度量方式,在这个地方我们可以选择两种相似度的度量方式,第一种叫做余弦相似度度量,另一种叫做欧拉相似度度量。通过metric对象我们来初始化追踪器。

image-20200715113756738

接着根据display参数开始生成对应的visuializer,如果选择将检测结果进行可视化展示,那么便会生成Visualization对象,我从这个类中可以看到,它主要是调用opencv image viewer来讲追踪的结果进行展示。如果display是false则会生成一个NoVisualization对象,它一个虚拟可视化对象,它以给定的顺序循环遍历所有帧以更新跟踪器,而无需执行任何可视化。两者主要区别其实就是是否调用opencv将图片展示出来。其实前边我们所做的一系列工作可以说都是准备的工作,实际上核心部分就是在执行这个run方法之后。此处我们可以看到,在run方法中传入了一个frame_callback函数,这个frame_callback函数可以说是整个算法的核心部分,每一帧的图片都会执行该函数。

为什么这样说那?

首先进入run函数之后我们会发现,无论当时选择是可视化操作还是非可视化操作,它的run函数最终都要调用frame_callback函数的,比如说Visualization中的run方法,它首先判断帧序号是否大于最大帧,如果大于最大帧,直接返回。否则回调执行frame_callback函数;同样的如果是NoVisualization对象,它的run方法也是类似的,也是调用frame_callback函数,然后帧序号加1。最后上边追踪结果处理完之后,然后将追踪的结果保存到对应的目录下边。

image-20200715114107385

上边我们说了frame_callback函数实际上是整个函数的核心内容。进入frame_callback函数,我们可以看到,它第一步是根据之前的参数,生成检测框列表,然后将置信度小于最小置信度阈值的检测框剔除掉。

image-20200715114146972

然后执行非极大值抑制。

什么叫做非极大值抑制那?

简单来说就是就是一个寻找局部最大值的过程,我们以下边检测框为例,我们可以看到在检测人脸的过程中可能会产生多个检测框,通过非极大值抑制,可以在局部范围内选择出那个得分最高的检测框,剔除掉其他得分低的检测框。

image-20200715114206754

接着调用predict函数执行预测操作,进入predict函数,我们可以看到,它其实主要就是对轨迹列表中所有的轨迹使用卡尔曼滤波算法进行状态的预测。接着调用update函数执行更新操作。在update函数中,主要如下几件事:

  1. 根据之前预测的结果,进行匹配操作。在该开始匹配的时候都处于不确定态,然后若干次匹配之后,如果匹配成功的次数大于n_init的话,轨迹便会从初始态转换成确定态。如果一直没有匹配到检测框则会直接进入删除态。由于追踪的目标体可能会消失,因此就算进入到了确定态,如果在后续的匹配中多次没有匹配到,大于max_age的时候轨迹便会从确定态转换成删除态。一旦轨迹进入到删除态,则证明这个轨迹失效,后续便会被删除。

  2. 针对不同状态进行不同的操作

    a) 对未匹配的tracker,调用mark_missed标记,后续会删除对应的轨迹

    b) 针对未匹配的detection(检测框)。没有匹配到目标,因此检测框失配,进行初始化操作

    c) 更新轨迹列表,得到最新的tracks

    d) 更新处于确定态的trac_id

    e) 最后对特征集更新。

执行到此处当前帧的处理就完成了,直接帧序号加1,继续进行下一帧的操作。

结论

最后我们将代码整体原理整理成树图如下:

了便于大家阅读源码,我将源码的具体逻辑也整理成了一个树图:

deep_sort_app

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

deepsort算法原理以及代码解析 的相关文章

  • 小程序中实现VR效果

    小程序中实现VR效果 最近的工作中有一个奇葩的需求 就是更根据房间场景图 打开摄像机或者上传图片来适配不同的背景图 类似于VR的效果 一开始百度搜索 发现小程序根本没有VR的插件 而小程序要实现VR需要使用web view 也就是使用网页的
  • Cadence 简易使用教程

    原理图的快捷键 快捷键 功能 快捷键 功能 快捷键 功能 i 添加元件 l 添加线名 x 保存并检查 c 复制 w 添加连线 S shift s 保存 m 移动 W shift w 添加粗线 u 取消上一步 M shift m 移动 断线
  • UE4大数据可视化教程(21)——大屏云渲染通用像素流解决方案

    目录 项目打包前操作 复制信令服务器文件 快捷打开信令服务和启动项目 替换项目
  • NS-3的安装及配置

    本教程基于VM Ware 虚拟机上安装的Ubuntu20 04 一 安装 NS 3 本体 准备 安装开始之前建议大家更换一下软件源并更新一下库 这样接下来的安装会块很多 由于安装过程中需要用到一些工具 所以提前准备好 已经安装的直接下一步
  • 在集群环境中安装R(步骤清晰内容详实,堪称无脑教程!)

    在集群环境下如何解决需要使用R语言的需求 关键词 PBS作业调度系统 HPC R 本文最初思路构思于2018 05 成文于2018 10 17 本文背景是博主的最新一篇论文 上位基因检测机器学习算法创新 临近实验尾声 已经完成在模拟数据中的
  • 如何防止打开终端Conda默认激活基本环境

    当你安装好Anaconda 每次打开终端都会自动帮你激活基本环境 base 有时候确实自己不需要激活Conda环境 因为打开终端不一定要用到 Python 而且该项操作还会拖慢打开的终端的响应速度 十分烦人 经过网上查找方案 直接在终端输入
  • Octave下载与安装教程

    文章目录 前言 一 下载 二 安装 前言 Octave是一种编程语言 旨在解决线性和非线性的数值计算问题 Octave为GNU项目下的开源软件 早期版本为命令行交互方式 4 0 0版本发布基于QT编写的GUI交互界面 Octave语法与Ma
  • win11任务栏图标大小设置教程

    最近有不少小伙伴在升级安装最新的Win11系统后 发现任务栏的图标太小 不知道win11任务栏图标怎么调大小 下面小编就来给大家详细介绍下win11任务栏图标大小设置的具体方法吧 希望对大家有所帮助 win11任务栏图标大小设置教程 1 w
  • 【unity3D】如何修改相机的默认视角

    未来的游戏开发程序媛 现在的努力学习菜鸡 本专栏是我关于游戏开发的学习笔记 本篇是unity的如何修改相机的默认视角 如何修改相机的默认视角 Game窗口运行的话视角是这样的 此时Scene窗口的视角是这样的 可以观察到人物变化 但是我现在
  • PLSQL官方下载、安装和使用完全指南

    1 PLSQL介绍 我们常说的plsql指的是plsqldeveloper 这个oracle数据库客户端连接工具 这个工具以其方便和强大被广大开发者喜爱 这个工具是由allroundautomations公司开发 他的官网是https ww
  • 2023最新ChatGPT网站源码+支持ChatGPT4.0+支持Midjourney绘画+用户会员套餐+后台管理+一键更新版本

    2023最新ChatGPT网站源码 支持ChatGPT4 0 支持Midjourney绘画 用户会员套餐 后台管理 一键更新版本 支持手机电脑不同布局页面自适应 ChatGPT商用网站源码搭建安装教程 第一步 下载程序 ChatGPT商业运
  • ahx文件转mav文件 工具分享及说明

    前言 今天用ndstool 拆了个nds的游戏 提取音频资源时发现格式为ahx 查了查网上都没有转换资料 格式工厂也不支持此格式 于是在github上找到了个好工具 分享一下 根据 文件格式查询信息库 数据统计 AHX 文件扩展名相关的格式
  • 离线安装mariadb

    离线安装mariadb 文章目录 离线安装mariadb 一 下载Rpm包 二 按顺序安装依赖 galera安装 安装mariadb相关 三 安全配置 四 配置权限 五 通过navicat测试 一 下载Rpm包 前往MariaDB官网选择所
  • 【第01题】A + B

    文章目录 零 写在前面 一 例题1 1 题目描述 2 解题思路 3 代码详解 二 例题2 1 题目描述 2 解题思路 3 代码详解 三 例题3 1 题目描述 2 解题思路 3 代码详解 四 例题4 1 题目描述 2 解题思路 3 代码详解
  • Redis学习笔记

    Redis学习笔记 什么是Redis 安装Rides 启动Redis 连接Redis Redis基础知识 五大数据类型 1 String 2 List 3 Set 4 Hash 5 Zset 三种特殊数据类型 1 geospatial 地理
  • win11设置任务栏不合并的方法教程

    win11系统的任务栏窗口默认设置是合并的 有些小伙伴表示用起来还不太习惯 那么win11任务栏怎么设置不合并呢 下面小编为大家分享下win11设置任务栏不合并的方法 感兴趣的小伙伴一起来看看吧 win11设置任务栏不合并的方法教程 1 我
  • 【ESP-IDF】2.ESP32C3移植u8g2显示库驱动OLED

    前言 这个系列的文章属于是为了一碟醋包了一顿饺子系列 起因是看到tb上某家店的ESP32C3开发板才9 9包邮 想着研究一下 把手头有个用Arduino UNO实现的项目升级一下 于是就有了这个系列 ESP32C3的简介 2020 年末 乐
  • 「VS Code」Visual Studio Code 菜鸟教程:从入门到精通

    VS Code Visual Studio Code 教程 从入门到精通 日志 2020 04 26 介绍如何配置 LaTeX 环境 2019 09 06 更新了选择默认终端的方法 在胶片中补全列选方式 2019 05 26 补全了全文的剩
  • 如何在 Vultr 上部署 ONLYOFFICE 文档 v7.3

    现在您可使用通过 Vultr 市场提供的一键式应用在 Vultr 架构中轻松部署 Docker 版本的 ONLYOFFICE 文档 一键式应用是什么 一键式应用是一个包含所有必要预配置组件的镜像 可用于便捷地在运行有 Ubuntu OS 的
  • 最全最详细ChatGPT角色预设词教程,Prompt分享

    使用指南 1 可直复制使用 2 可以前往已经添加好Prompt预设的AI系统测试使用 可自定义添加使用 雅思写作考官 我希望你假定自己是雅思写作考官 根据雅思评判标准 按我给你的雅思考题和对应答案给我评分 并且按照雅思写作评分细则给出打分依

随机推荐

  • C#6.0新语法

    一 自动属性初始化 在以前的C 版本中 属性是这样写的 1 public int Id get set 2 public string Name get set 在C 6 0中 属性可以自动赋初始值 例如 1 public string N
  • freeRTOS手册 第六章 . 中断管理

    如果我对本翻译内容享有所有权 允许任何人复制使用本文章 不会收取任何费用 如有平台向你收取费用与本人无任何关系 第六章 中断管理 章节介绍和范围 事件 嵌入式实时系统必需对环境中的事件做出响应 比如 外部网络设备收到一个发送给TCP IP栈
  • gc垃圾回收四种方法

    标记清除算法 标记清除 Mark Sweep 算法 包含 标记 和 清除 两个阶段 首先标记出所有需要回收的对象 在标记完成后统一回收掉所有被标记的对象 标记清除算法是最基础的收集算法 后续的收集算法都是基于该思路并对其缺点进行改进而得到的
  • 使用Docker-镜像命令

    镜像名称 首先来看下镜像的名称组成 镜名称一般分两部分组成 repository tag 在没有指定tag时 默认是latest 代表最新版本的镜像 如图 这里的mysql就是repository 5 7就是tag 合一起就是镜像名称 代表
  • C#--使用Process类kill进程

    1 背景 static变量 static变量也称作静态变量 静态变量和非静态变量的区别是 静态变量被所有的对象所共享 在内存中只有一个副本 它当且仅当在类初次加载时会被初始化 而非静态变量是对象所拥有的 在创建对象的时候被初始化 存在多个副
  • 使用 Qt designer

    使用 Qt designer 1 配置Qt designer外部工具 2 Qt designer Qt 设计师 使用 2 1 创建保存文件ui 2 2 pyuic5 exe 工具 转化成为py文件 2 3 直接导入UI文件 2 qrc资源管
  • C# 正则表达式进阶

    文章目录 限定开头和结尾 匹配汉字 1 9反向引用 分组构造 具名的分组构造 断言 零宽度正预测先行断言 断言某位置后面是xxx 零宽度负预测先行断言 断言某位置后面不是xxx 零宽度正预测后发断言 断言某位置前面是xxx 零宽度负预测后发
  • 第二十七篇 SeNet——论文翻译

    文章目录 摘要 1 简介 2 相关工作 3 压缩和激励块 3 1 压缩 全局信息嵌入 3 2激励 自适应再校正 3 3 实例化 4 模型和计算复杂性 5 实验 5 1 图像分类 5 2 场景分类 5 3 COCO上的目标检测 5 4 ILS
  • 保研之路——复旦计算机学院预推免

    复旦计算机学院预推免 个人情况 高校复试参与情况 复旦计算机学院直硕 9 19 9 20 结语 嗯 抱着不白花这么多路费住宿费的初衷准备写一个保研经验贴 希望学弟学妹少花点钱吧orz 我的战术大概是只要学校给我发了邀请我就去 除了时间冲突的
  • windows配置selenium

    文章目录 1 确定chrome版本 2 下载并配置chrome驱动 3 测试 1 确定chrome版本 在chrome中访问 chrome settings help 可以看到当前版本 111 0 5563 111 64位 2 下载并配置c
  • matlab读取sheet1_matlab读取excel数据的方法步骤详解

    在Excel中录入好数据以后经常需要被matlab读取 具体该如何读取呢 下面是由学习啦小编分享的matlab读取excel数据的方法 以供大家阅读和学习 matlab读取excel数据的方法 matlab读取Excel数据步骤1 如果数据
  • Vue/JS自定义指令:实现元素滑动、移动端适配以及边界处理

    核心属性 Element clientWidth 元素可视宽度 Element clientHeight 元素可视高度 MouseEvent clientX 鼠标相对于浏览器左上顶点的水平坐标 MouseEvent clientY 鼠标相对
  • 微服务如何治理

    微服务远程调用可能有如下问题 注册中心宕机 服务提供者B有节点宕机 服务消费者A和注册中心之间的网络不通 服务提供者B和注册中心之间的网络不通 服务消费者A和服务提供者B之间的网络不通 服务提供者B有些节点性能变慢 服务提供者B短时间内出现
  • 每日学习07:Comparable接口的CompareTo的用法

    接口 Comparable 此接口强行对实现它的每个类的对象进行整体排序 这种排序被称为类的自然排序 类的 compareTo 方法被称为它的自然比较方法 字符串 数组列表 数组 所有可以 排序 的类都实现了java lang Compar
  • ThinkPHP5.1开发企业微信支付到零钱

    Wxpay php
  • npm启动vue应用开发服务器过程分析

    关于 npm run serve 命令启动vue应用开发环境的过程分析 1 npm run 命令执行时 npm run 命令执行时 会把 node modules bin目录添加到执行环境的PATH变量中 全局的没有安装的包 在node m
  • 本地IDEA中使用SonarQube扫描代码

    文章目录 背景 步骤 安装插件 配置 使用 背景 为了提高效率 在走代码CICD流程里的Sonarqube之前 先在本地提前进行一次扫描和修复 步骤 安装插件 2种方式 在IDE的插件管理中心安装名为 SonarQube Community
  • 爬虫高级应用(15. 基于Charles抓包软件抓取手机APP数据)

    目录 写在前面 配置安装Charles 安装Charles 下载相关证书 电脑证书 手机证书 设置代理 实操案例 抓取手机APP爱吾游戏宝盒数据 写在前面 移动App多使用异步的方式从服务端获取数据 抓取数据之前 要先分析移动App用于获取
  • 线性代数 --- 线性代数基本定理下(四个基本子空间他们两两正交,且互为正交补)

    正交子空间 前面我们已经知道了 两个向量的内积为0是勾股定理的另一种表现形式 现在我们来研究一下两个子空间之间的正交 虽然 我很不喜欢一上来就先给个定义 但我这里还是要给 sorry 现有两个子空间V和W 如果V中的任何一个向量v和W中的任
  • deepsort算法原理以及代码解析

    概述 前边我们讲了sort算法的原理 并且指出了它的不足 IDsw过大 为了解决该问题 17年时候sort算法的团队又提出了DeepSort算法 Deepsort在原来Sort算法的基础上 改进了以下内容 使用级联匹配算法 针对每一个检测器