技术分享 吊舱目标追踪---deepsort原理讲解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了技术分享 吊舱目标追踪---deepsort原理讲解相关的知识,希望对你有一定的参考价值。
参考技术A
二、sort流程
Deepsort的前身是sort算法,sort算法的核心是卡尔曼滤波算法和匈牙利算法。
卡尔曼滤波算法作用:该算法的主要作用就是当前的一系列运动变量去预测下一时刻的运动变量,但是第一次的检测结果用来初始化卡尔曼滤波的运动变量。
匈牙利算法的作用:简单来讲就是解决分配问题,就是把一群检测框和卡尔曼预测的框做分配,让卡尔曼预测的框找到和自己最匹配的检测框,达到追踪的效果。
sort工作流程如下图所示:
Detections是通过目标检测到的框框。Tracks是轨迹信息。
整个算法的工作流程如下:
(1)将第一帧检测到的结果创建其对应的Tracks。将卡尔曼滤波的运动变量初始化,通过卡尔曼滤波预测其对应的框框。
(2)将该帧目标检测的框框和上一帧通过Tracks预测的框框一一进行IOU匹配,再通过IOU匹配的结果计算其代价矩阵(cost matrix,其计算方式是1-IOU)。
(3)将(2)中得到的所有的代价矩阵作为匈牙利算法的输入,得到线性的匹配的结果,这时候我们得到的结果有三种,第一种是Tracks失配(Unmatched Tracks),我们直接将失配的Tracks删除;第二种是Detections失配(Unmatched Detections),我们将这样的Detections初始化为一个新的Tracks(new Tracks);第三种是检测框和预测的框框配对成功,这说明我们前一帧和后一帧追踪成功,将其对应的Detections通过卡尔曼滤波更新其对应的Tracks变量。
(4)反复循环(2)-(3)步骤,直到视频帧结束。
三、Deepsort算法流程
由于sort算法还是比较粗糙的追踪算法,当物体发生遮挡的时候,特别容易丢失自己的ID。而Deepsort算法在sort算法的基础上增加了级联匹配(Matching Cascade)和新轨迹的确认(confirmed)。Tracks分为确认态(confirmed),和不确认态(unconfirmed),新产生的Tracks是不确认态的;不确认态的Tracks必须要和Detections连续匹配一定的次数(默认是3)才可以转化成确认态。确认态的Tracks必须和Detections连续失配一定次数(默认30次),才会被删除。
Deepsort算法的工作流程如下图所示:
整个算法的工作流程如下:
(1)将第一帧次检测到的结果创建其对应的Tracks。将卡尔曼滤波的运动变量初始化,通过卡尔曼滤波预测其对应的框框。这时候的Tracks一定是unconfirmed的。
(2)将该帧目标检测的框框和第上一帧通过Tracks预测的框框一一进行IOU匹配,再通过IOU匹配的结果计算其代价矩阵(cost matrix,其计算方式是1-IOU)。
(3)将(2)中得到的所有的代价矩阵作为匈牙利算法的输入,得到线性的匹配的结果,这时候我们得到的结果有三种,第一种是Tracks失配(Unmatched Tracks),我们直接将失配的Tracks(因为这个Tracks是不确定态了,如果是确定态的话则要连续达到一定的次数(默认30次)才可以删除)删除;第二种是Detections失配(Unmatched Detections),我们将这样的Detections初始化为一个新的Tracks(new Tracks);第三种是检测框和预测的框框配对成功,这说明我们前一帧和后一帧追踪成功,将其对应的Detections通过卡尔曼滤波更新其对应的Tracks变量。
(4)反复循环(2)-(3)步骤,直到出现确认态(confirmed)的Tracks或者视频帧结束。
(5)通过卡尔曼滤波预测其确认态的Tracks和不确认态的Tracks对应的框框。将确认态的Tracks的框框和是Detections进行级联匹配(之前每次只要Tracks匹配上都会保存Detections其的外观特征和运动信息,默认保存前100帧,利用外观特征和运动信息和Detections进行级联匹配,这么做是因为确认态(confirmed)的Tracks和Detections匹配的可能性更大)。
(6)进行级联匹配后有三种可能的结果。第一种,Tracks匹配,这样的Tracks通过卡尔曼滤波更新其对应的Tracks变量。第二第三种是Detections和Tracks失配,这时将之前的不确认状态的Tracks和失配的Tracks一起和Unmatched Detections一一进行IOU匹配,再通过IOU匹配的结果计算其代价矩阵(cost matrix,其计算方式是1-IOU)。
(7)将(6)中得到的所有的代价矩阵作为匈牙利算法的输入,得到线性的匹配的结果,这时候我们得到的结果有三种,第一种是Tracks失配(Unmatched Tracks),我们直接将失配的Tracks(因为这个Tracks是不确定态了,如果是确定态的话则要连续达到一定的次数(默认30次)才可以删除)删除;第二种是Detections失配(Unmatched Detections),我们将这样的Detections初始化为一个新的Tracks(new Tracks);第三种是检测框和预测的框框配对成功,这说明我们前一帧和后一帧追踪成功,将其对应的Detections通过卡尔曼滤波更新其对应的Tracks变量。
(8)反复循环(5)-(7)步骤,直到视频帧结束。
带你了解P600吊舱是如何实现对特定目标,进行框选追踪跟随的
今天我们来讲一讲P600室外无人机亮点功能之一“吊舱框选跟踪”。该平台配置USB接口的Q10F十倍变焦单光吊舱,并开发了其专用ROS驱动;通过机载系统中内置的KCF框选追踪算法,基于*图像视觉实现对特定目标(人/车/其他无人机等…)的框选、追踪与跟随。下面将分别从原理说明和实机操作两方面进行描述。
一、原理说明
1、KCF原理
KCF(Kernelized Correlation Filters)是一种鉴别式追踪方法,这类方法一般都是在追踪过程中训练一个目标检测器,使用目标检测器去检测下一帧预测位置是否是目标,然后再使用新检测结果去更新训练集进而更新目标检测器。而在训练目标检测器时一般选取目标区域为正样本,目标的周围区域为负样本,当然越靠近目标的区域为正样本的可能性越大。KCF相对于其他的tracking-by-detection方法速度得到了极大的提升,效果也相对较好。
KCF算法流程图
2、节点图
吊舱跟踪节点图如下图所示:
3、跟踪控制原理与主要消息流
控制说明:tracker_ros节点订阅来自吊舱的图像话题,得到xy偏移量和原本框大小和实际框大小,都在position_diff话题里面。xy的偏移量在serial_node节点由PID得到吊舱偏航横滚的控制量并通过串口二发给吊舱。原本框大小和实际框大小在target_tarcking节点由PID得到无人机x方向的期望速度。
吊舱控制
俯仰角控制:PID控制(误差来自检测框与相机图像中心点上下偏离的距离)偏航角控制:PID控制(误差来自检测框与相机图像中心点左右偏离的距离)吊舱俯仰角和偏航角的PID代码如下:
无人机跟踪控制
无人机偏航是读取吊舱偏航,并和吊舱偏航保持一致。X方向速度控制:PID控制(误差来自当前检测框的大小和最初手动框选大小的差)X方向速度的PID控制代码如下:
二、实机操作
室外测试需要使用NoMachine连接TX2的远程桌面,同时在TX2上框选要跟踪的目标在完成初步测试之后,让飞手在自稳模式或定点模式下试飞飞机,飞机正常则返回地面继续下面步骤启动
fly_track_outdoor.sh
文件
/home/amov/track_ws/src/px4_command/sh/sh_for_P200/fly_tracking_outdoor.sh
观察各个终端,确保都没有错误在倒数第三个终端窗口输入0选择PID,输入1选择GO ON
在倒数第二个终端窗口输入1选择go on,输入777选择track
飞手尝试切换offboard模式,能切换成功则在position模式下飞到一定高度。框选目标观测速度数据是否正常,正常则继续框选目标:
飞手切offboard模式飞机开始跟踪,并注意在意外情况下控制飞机切到自稳或者定点模式。
更多详细的资料
可参考wiki手册:
- End -
技术发展的日新月异,阿木实验室将紧跟技术的脚步,不断把机器人行业最新的技术和硬件推荐给大家。看到经过我们培训的学员在技术上突飞猛进,是我们培训最大的价值。如果你在机器人行业,就请关注我们的公众号,我们将持续发布机器人行业最有价值的信息和技术。
本文由博客一文多发平台 OpenWrite 发布!
以上是关于技术分享 吊舱目标追踪---deepsort原理讲解的主要内容,如果未能解决你的问题,请参考以下文章
带你了解P600吊舱是如何实现对特定目标,进行框选追踪跟随的
#私藏项目实操分享#原理讲解-项目实战 <-; 多目标跟踪算法之DeepSORT