SMILETrack——ByteTrack与外观特征的融合实现高效的多目标跟踪方法

概述

ByteTrack在多目标跟踪领域取得了显著成就,但依赖运动信息(IoU)进行关联的机制存在局限性。为了弥补这一不足,SMILETrack提出一种集成了外观特征的最先进的多目标跟踪(SoTA)模型。
在多目标跟踪的两大类别中,单独检测与嵌入模型(SDE)和联合检测与嵌入模型(JDE)各有优势与挑战。SDE方法依赖于独立的检测器,并通过关联每一帧的检测结果来实现跟踪,这种方法因其允许对检测和跟踪模型进行独立优化而通常更为精确。然而,使用独立模型也带来了实时性方面的挑战。相反,JDE方法通过在单一模型中同时进行检测和跟踪,理论上能够提供实时估计,但这种方法由于竞争性学习的存在,往往会导致准确性的下降。SMILETrack模型属于SDE类别,它继承了ByteTrack仅使用运动信息的关联策略,并进一步引入了基于注意力机制的外观特征提取器,这一改进在MOT17和MOT20数据集上取得了SoTA的成果。

SMILETrack的主要贡献可以归纳为以下几点:

  1. 引入了相似性学习模块(SLM),这是一种外观特征提取器,它利用注意力机制明确区分检测到的个体,从而提高了跟踪的准确性。
  2. 针对ByteTrack在鲁棒性方面的不足,我们提出了相似性匹配级联(SMC),这是一种结合了外观信息和运动信息的关联策略,旨在增强模型的鲁棒性。
  3. 设计了一种门函数来调节外观和运动信息的权重,使得模型在面对遮挡和运动模糊时能够进行更为鲁棒的关联。

论文地址:https://arxiv.org/abs/2211.08824
源码地址:https://github.com/WWangYuHsiang/SMILEtrack

相关工作

在多目标跟踪中,跟踪过程涉及将前一帧的跟踪结果与当前帧中检测到的物体进行关联。这一过程中,通常利用两类关键信息:基于运动预测的位置信息和物体的外观特征。然而,ByteTrack采用了一种简化的策略,仅依赖运动信息来实现最先进的跟踪性能(SoTA)。这种依赖单一信息源的做法基于一个假设,即如果外观特征未能提供有效信息,它们可能会对跟踪的准确度产生负面影响。在MOT17和MOT20数据集上,ByteTrack通过一个两阶段的关联流程来实现SoTA,首先处理高置信度的检测物体,然后处理低置信度的物体。

然而,本文揭示了ByteTrack在缺乏外观信息时的局限性。研究指出,在MOTChallenge中,由于动作相对简单,仅使用运动信息足以实现高准确度的跟踪。但是,面对复杂动作时,准确度会受到影响。更重要的是,缺少外观特征的支持限制了模型处理身份切换(ID切换)的能力。这表明,在更复杂或动态的场景中,外观特征对于维持跟踪的准确性和鲁棒性是不可或缺的。

算法框架

由于上述原因,SMILETrack结合了ByteTrack和外观特征提取的优点。它通过在使用检测置信度的两阶段关联中考虑到使用Attention的稳健外观信息,实现了高度精确的跟踪。整体情况如下图所示。

SLM

在多目标追踪任务中,对目标的外观特征的处理要求比检测阶段更为严格。高层次的特征对于区分不同类别的对象至关重要,而在追踪过程中,能够区分同一类别内不同个体的低层次特征同样重要。为了满足这一需求,本文提出了一种新颖的外观特征提取器——相似性学习模块(SLM),该模块由图像切片注意(ISA)块构成,能够灵活地提取每个目标个体的特征,从而更有效地进行区分。

SLM采用了一种类似于ShuffleNet的网络机制,该机制通过学习并评估检测到的目标之间的相似度来优化追踪过程。其核心目标是为属于同一实体的个体分配较高的相似度分数,而为不同的个体分配较低的分数。ISA块从SLM中提取出特定于个体的特征,并将这些特征融合至后续的各个融合层中,以形成全面的外观特征表示。通过计算目标间特征的余弦相似度,能够得到用于关联的匹配成本。

这种基于相似度的学习机制不仅提高了追踪算法对个体的区分能力,也为处理复杂场景下的追踪任务提供了一种有效的解决方案。通过这种方式,SLM能够增强追踪系统在面对目标遮挡、姿态变化和光照条件变化等挑战时的鲁棒性。

ISA

ISA块将检测到的物体分成四个切片图像,并提取它们之间的关系与Attention。首先,输入被重新调整为固定大小并输入到ResNet-18。然后将得到的特征图分成四个部分,形成一个切片图像。四个分割的位置被嵌入到线性投影Q、K、V中,并输入到Q-K-V注意力。

Q-K-V注意力模块计算出切片之间的自我注意力和交叉注意力。获得的切片特征最终被结合起来,以获得被检测物体的特征。通过评估与这些基于注意力的可靠特征的相似性,实现了一种能够以高精确度区分同一类别的不同物体的机制
在这里插入图片描述

SMC

SMC使用卡尔曼滤波器将获得的外观信息(SLM)与运动信息(IoU)联系起来。下图显示了整体情况。浅蓝色显示的第一关联和第二关联是ByteTrack中也有的两阶段关联。

首先,检测器将当前帧t的检测结果(BBOX)按照置信度分为三类。首先,置信度低于0.1的检测结果被视为背景或噪音,不用于关联。具有较高置信度的检测被一个阈值thres分割:BBOX按置信度下降的顺序排列,BBOX前半部分的平均置信度为thres。高于此值的BBOX被归为高分BBOX,低于此值的BBOX被归为低分BBOX。

第一阶段。

第一阶段优先考虑高分的BBOXes进行关联:直到第t-1帧的跟踪结果(tracklet)和高分的BBOXes通过外观信息(SLM)和位置信息(IoU)进行关联。这使得只用高质量的信息就能实现可靠的跟踪

第二阶段。

第1阶段将第2阶段中没有绑定的小轨与低分的BBOX联系起来。然而,这里使用的是一个稍加修改的SLM,即多模板SLM。这样做的原因是为了应对低置信度的检测

低置信度检测可能是由于闭塞或运动模糊造成的特征提取困难。因此,跟踪小帧方面不只使用一个帧,而是使用几个跟踪的帧。每一帧的BBOX被保留下来作为特征库,并分别输入到低分BBOX和SLM中以获得相似度。相似度的最大值被用来作为最终外观信息的成本。这在本文中被描述为多模板-SLM。

闸门功能

在第一和第二阶段中,都使用了一个门函数进行关联。这是一种控制外观和运动信息的机制。在通常的实践中,外观信息的成本和IoU的成本是同等权重的。下面的公式中,α=0.5。
在这里插入图片描述
然而,当两个不同的行人之间的IoU超过了他们的外观特征的相似度,这就产生了一个问题。换句话说,即使外观信息表明他们是不同的个体,如果他们在位置上有很大的重叠,那么IoU就会很高,导致身份转换的问题,将他们与不同的人联系起来。

本文提出了一个门控函数,它拒绝具有高IoU但外观信息相似度低于0.7的匹配。这就减少了不正确的匹配,在这种情况下,不同的外观只要是重叠的就更好

实验

在实验中,对MOT17数据集的准确性进行了与SoTA模型的比较和消融研究。在消融方面,MOT17训练数据的前半部分用于训练,后半部分用于验证;为了与SoTA模型进行比较,对MOT17、CrowdHuma、ETHZ和Cityperson的组合进行训练。

模型安装与测试

环境安装

conda create --name SMILETrack python==3.10
activate SMILETrack
git clone https://github.com/WWangYuHsiang/SMILEtrack.git
cd SMILEtrack_Official
pip install -r requirements.txt

单个 GPU 训练

python train_aux.py --workers 8 --device 0 --batch-size 4 --data data/mot.yaml --img 1280 1280 --cfg cfg/training/PRB_Series/yolov7-PRB-2PY-e6e-tune-auxpy1.yaml --weights './yolov7-prb-2py-e6e.pt' --name yolov7-prb --hyp data/hyp.scratch.p6.yaml --epochs 100

测试模型

python3 test_track_prb.py --source <dataets_dir/MOT17> --with-reid --benchmark "MOT17" --eval "test" --fp16 --fuse
python3 tools/interpolation.py --txt_path <path_to_track_result>

所提方法的检测器使用一个名为PRB的模型,该模型在COCO数据集上进行了预训练,然后在MOT16和MOT17上进行了微调;SLM在其自身的数据集上进行了训练,该数据集是从MOT17训练集中挑选出来的。无法关联的小轨被删除,多模板-SLM特征库被保留到50帧以上。

与SoTA模型的比较

MOT17测试集的准确度。准确率与SoTA模型进行了比较,如ByteTrack(只使用运动信息)、StrongSORT(是DeepSORT的改进方法)和TransTrack(建立在Transformer上,用于检测和跟踪)。SMILETrack取得了所有方法中最高的准确率,MOTA为81.06,而80.5,是所有方法中准确度最高的。在接下来的消融研究中,这是在准确率最高的设定下进行的测试。

消融

首先是SLM的有效性。我们比较了在关联的每个阶段采用或不采用外观信息(SLM)的准确性。我们也使用普通的SLM来代替第二阶段的多模板SLM。因此,如下表所示,采用SLM的模型只有在置信度较高的第1阶段才有最高的准确率,说明基于置信度的外观信息的使用是合适的。

最后,对门函数和有无多模板-SLM进行了比较。基于一个将运动信息(IoU)和外观信息(SLM)用于阶段1和阶段2的模型,比较了将阶段2改为多模板-SLM或在两个阶段都采用门函数的结果。可以看出,当采用门函数或多模板-SLM时,准确性有所提高。采用这两种方法的模型在消融方面达到了最高的精度,证明了该方法的优越性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/294403.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flutter 使用 AndroidStudio 给(Android 安卓)进行签名方法

一、使用 AndroidStudio 创建签名 使用 AndroidStudio 打开 Flutter项目中的 android 文件夹首次打开 AndroidStudio 会加载一会。菜单栏 &#xff1a; Build -> Generate Signed Bundle APK... 选中 APK -> Next点击Create new....下面按照需求填写即可- 文件夹选择 项…

Spring Boot项目启动速度优化

1、配置自动配置排除列表&#xff0c;减少启动自动配置扫描&#xff0c;配置项spring.autoconfigure.exclude 2、启动类添加索引注解Indexed&#xff0c;去除启动过程中 Components 的扫描步骤&#xff0c;直接从索引文件读取。 import org.springframework.stereotype.lndexe…

74HC595芯片工作原理(附使用方法)

一、74HC595脚位图及说明 管脚说明&#xff1a; 14脚&#xff1a;DS&#xff08;SER&#xff09;&#xff0c;串行数据输入引脚 13脚&#xff1a;OE&#xff0c;输出使能控制脚&#xff0c;它是低电才使能输出&#xff0c;所以接GND 12脚&#xff1a;RCK&#xff08;STCP&…

使用node爬取视频网站里《龙珠》m3u8视频

1. 找到视频播放网站 百度一下 龙珠视频播放 精挑细选一个可以播放的网站。 如&#xff1a;我在网上随便找了一个播放网站&#xff0c;可以直接在线播放 https://www.xxx.com/play/39999-1-7.html 这里不具体写视频地址了&#xff0c;大家可以自行搜索 2.分析网页DOM结…

Python | Leetcode Python题解之第5题最长回文子串

题目&#xff1a; 题解&#xff1a; class Solution:def expand(self, s, left, right):while left > 0 and right < len(s) and s[left] s[right]:left - 1right 1return (right - left - 2) // 2def longestPalindrome(self, s: str) -> str:end, start -1, 0s …

JMeter自定义日志与日志分析

1 JMeter日志概览 JMeter与Java程序一样&#xff0c;会记录事件日志&#xff0c;日志文件保存在bin目录中&#xff0c;名称为jmeter.log。当然&#xff0c;我们也可以在面板中直接察看日志&#xff0c;点击右上角黄色标志物可以打开日志面板&#xff0c;再次点击收起。 可见&…

从入门到实战:vue3路由知识点

本人在B站上关于vue3的尚硅谷的课程&#xff0c;以下是整理一些笔记。 1.两个知识点 1.路由组件通常存放在pages 或 views文件夹&#xff0c;一般组件通常存放在components文件夹。 组件可以分为&#xff1a; 1. 一般组件&#xff1a;亲手写标签出来的 2. 路由组件&#…

宝塔面板 -- 打包前端项目并部署提升访问速度

文章目录 前言一、打包前端项目二、添加PHP项目三、部署打包文件四、开通防火墙五、运行网站总结 前言 在前面写到的文章使用宝塔面板部署前端项目中&#xff0c;并没有将前端项目打包而是直接部署&#xff0c;导致网站访问速度非常慢&#xff0c;加载甚至要十几秒。因此&…

Linux之用户账号、用户组和与账号有关的系统文件

目录 一、基本介绍 1.用户和用户组 2.UID和GID 二、 账户管理 1.查看用户的UID和GID 2.添加账户 3.删除账号 4.修改账号 5.账户口令 三、分组管理 1.新增用户组 2.删除用户组 3.修改用户组 4.用户组切换 四、与账号有关的系统文件 1./etc/passwd 2./etc/shado…

第五篇【传奇开心果系列】Python的自动化办公库技术点案例示例:深度解读Pandas在教育数据和研究数据处理领域的应用

传奇开心果博文系列 系列博文目录Python的自动化办公库技术点案例示例系列 博文目录前言一、Pandas 在教育和学术研究中的常见应用介绍二、数据清洗和预处理示例代码三、数据分析和统计示例代码四、数据可视化示例代码五、时间序列分析示例代码六、数据导入和导出示例代码七、数…

【SQL Server】2. 将数据导入导出到Excel表格当中

最开始&#xff0c;博主介绍一下自己的环境&#xff1a;SQL Sever 2008 R2 SQL Sever 大致都差不多 1. 通过自带软件的方式 首先找到下载SQL Sever中提供的导入导出工具 如果开始界面没有找到自己下载的路径 C:\Program Files\Microsoft SQL Server\100\DTS\Binn下的DTSWiz…

Dapr(一) 基于云原生了解Dapr

(这期先了解Dapr&#xff0c;之后在推出如何搭建Dapr&#xff0c;以及如何使用。) 目录 引言&#xff1a; Service Mesh定义 Service Mesh解决的痛点 Istio介绍 Service Mesh遇到的挑战 分布式应用的需求 Multiple Runtime 理念推导 Dapr 介绍 Dapr 特性 Dapr 核心…

【技巧】如何解除Excel“打开密码”?

给Excel表格设置“打开密码”&#xff0c;可以保护表格不被他人随意打开&#xff0c;那如果后续不需要保护了&#xff0c;不想每次打开Excel都需要输密码&#xff0c;要怎么去除“打开密码”呢&#xff1f; 今天分享3个方法&#xff0c;最后一个方法记得收藏起来&#xff0c;以…

QT-飞机水平仪图标

QT-飞机水平仪图标 一、演示效果二、关键程序三、下载链接 一、演示效果 二、关键程序 #include <stdio.h> #include <stdlib.h> #include <string.h>#include <QtCore> #include <QtGui> #include <QDebug> #include <QTableWidget&g…

算法系列--递归,回溯,剪枝的综合应用(1)

&#x1f495;"对相爱的人来说&#xff0c;对方的心意&#xff0c;才是最好的房子。"&#x1f495; 作者&#xff1a;Lvzi 文章主要内容&#xff1a;算法系列–递归,回溯,剪枝的综合应用(1) 大家好,今天为大家带来的是算法系列--递归,回溯,剪枝的综合应用(1) 1.全排…

量化交易入门(三十八)CCI指标Python实现和回测

今天我们先单纯用CCI指标来完成策略的编写&#xff0c;后续我们会改进这个策略&#xff0c;将CCI指标和前面讲到的MACD和RSI相结合来优化&#xff0c;看看我们优化后的效果会不会更好。 一、量化策略 CCI指标在量化交易中的策略&#xff1a; 在以下情况下生成买入信号&#…

《第3选择》解决所有难题的关键思维 - 三余书屋 3ysw.net

第3选择&#xff1a;解决所有难题的关键思维 《第3选择》解决所有难题的关键思维&#xff0c;面对两难困境&#xff0c;从冲突中找到互相协同的出路 你好&#xff0c;今天我们要聊的这本书是《第3选择》&#xff0c;它出自美国著名作家史蒂芬科维之手。科维是国际上非常知名的…

RPA-财务对账邮件应用自动化(客户对账机器人)

《财务对账邮件应用自动化》&#xff0c;将会使用邮箱的SMTP服务&#xff0c;小北把资源包绑定在这篇博客了 Uibot (RPA设计软件)———机器人的小项目友友们可以参考小北的课前材料五博客~ (本博客中会有部分课程ppt截屏,如有侵权请及请及时与小北我取得联系~&#xff09; …

MySQL常见故障案例与优化介绍

前言 MySQL故障排查的意义在于及时识别并解决数据库系统中的问题&#xff0c;确保数据的完整性和可靠性&#xff1b;而性能优化则旨在提高数据库系统的效率和响应速度&#xff0c;从而提升用户体验和系统整体性能。这两方面的工作都对于保证数据库系统稳定运行、提升业务效率和…

1.5编写一个程序,输入梯形的上底,下底和高,输出梯形的面积。

1、编写一个程序,输入梯形的上底,下底和高,输出梯形的面积。 package com.kangning.web.controller.system;import java.util.Scanner;/*** 编写一个程序,输入梯形的上底,下底和高,输出梯形的面积。*/ public class CountArea {public static void main(String[] args) …