电竞网站方案设计,河南建站网站,宝华路桥建设集团网站,做那种事免费网站目录 1.目标追踪的主要步骤
2、传统sort算法的流程
3.Deepsort算法流程
4、目标追踪整体代码
4.1 Configs文件目录下#xff1a;
4.2 deep_sort/deep_sort/deep目录下#xff1a;
4.3 deep_sort/deep_sort/sort目录下#xff1a;
运行demo#xff1a; DeepSORT…目录 1.目标追踪的主要步骤
2、传统sort算法的流程
3.Deepsort算法流程
4、目标追踪整体代码
4.1 Configs文件目录下
4.2 deep_sort/deep_sort/deep目录下
4.3 deep_sort/deep_sort/sort目录下
运行demo DeepSORTDeep learning based SORT是一种基于深度学习的视觉目标跟踪算法它结合了深度学习和传统的目标跟踪算法SORTSimple Online and Realtime Tracking。
DeepSORT基于目标检测器如YOLO、Faster R-CNN等检测每一帧图像中的目标并使用多特征融合Muti-feature Fusion技术对目标进行表示和描述然后使用SORT算法对目标进行跟踪。在SORT算法的基础上DeepSORT引入了Re-IDentificationRe-ID模型来解决目标ID的确定问题Re-ID模型通过计算目标在多个帧图像中的相似度来确定目标的唯一ID。
DeepSORT算法的优点是精度高鲁棒性强对于目标的遮挡、形变等情况具有很好的适应性。它已经被广泛应用于行人、车辆等目标的跟踪和智能视频监控等领域。
1.目标追踪的主要步骤
获取原始视频帧利用目标检测器对视频帧中的目标进行检测将检测到的目标的框中的特征提取出来该特征包括表观特征方便特征对比避免ID switch和运动特征运动特征方便卡尔曼滤波对其进行预测计算前后两帧目标之前的匹配程度利用匈牙利算法和级联匹配为每个追踪到的目标分配ID。
2、传统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初始化为一个新的Tracksnew Tracks第三种是检测框和预测的框框配对成功这说明我们前一帧和后一帧追踪成功将其对应的Detections通过卡尔曼滤波更新其对应的Tracks变量。
4反复循环2-3步骤直到视频帧结束。
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初始化为一个新的Tracksnew 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初始化为一个新的Tracksnew Tracks第三种是检测框和预测的框框配对成功这说明我们前一帧和后一帧追踪成功将其对应的Detections通过卡尔曼滤波更新其对应的Tracks变量。
8反复循环5-7步骤直到视频帧结束。
4、目标追踪整体代码 下面对目标追踪的重要代码的功能进行一个讲解 首先代码分为三个部分
目标追踪的相关代码和权重目标检测相关代码和权重这里用的是yolov5.5目标检测算法调用检测和追踪代码相关py文件
目标检测的内容可以看其他文章
这里主要讲解目标追踪相关代码部分。主要的py文件如下图所示下面将逐个讲解每个py文件的主要功能。 主要功能
4.1 Configs文件目录下 deep_sort.yaml这个yaml文件主要是保存一些参数。
1里面有特征提取权重的目录路径
2最大余弦距离用于级联匹配如果大于该阈值则忽略。
3检测结果置信度阈值
4非极大抑制阈值设置为1代表不进行抑制
5最大IOU阈值
6最大寿命也就是经过MAX_AGE帧没有追踪到该物体就将该轨迹变为删除态。
7最高击中次数如果击中该次数就由不确定态转为确定态。
8最大保存特征帧数如果超过该帧数将进行滚动保存。
4.2 deep_sort/deep_sort/deep目录下
ckpt.t7这是一个特征提取网络的权重文件特征提取网络训练好了以后会生成这个权重文件方便在目标追踪的时候提取目标框中的特征在目标追踪的时候避免ID switch。 evaluate.py计算特征提取模型精确度。
feature_extractor.py提取对应bounding box中的特征, 得到一个固定维度的特征作为该bounding box的代表供计算相似度时使用。
model.py特征提取网络模型该模型用来提取训练特征提取网络权重。
train.py训练特征提取网络的python文件
test.py测试训练好的特征提取网络的性能
4.3 deep_sort/deep_sort/sort目录下
detection.py保存通过目标检测的一个检测框框以及该框的置信度和获取的特征同时还提供了框框的各种格式的转化方法。
iou_matching.py计算两个框框之间的IOU。
kalman_filter.py卡尔曼滤波器的相关代码主要是利用卡尔曼滤波来预测检测框的轨迹信息。
linear_assignment.py利用匈牙利算法匹配预测的轨迹框和检测框最佳匹配效果。
nn_matching.py通过计算欧氏距离、余弦距离等距离来计算最近领距离。
preprocessing.py非极大抑制代码利用非极大抑制算法将最优的检测框输出。
track.py主要储存的是轨迹信息其中包括轨迹框的位置和速度信息轨迹框的ID和状态其中状态包括三种一种是确定态、不确定态、删除态三种状态。
tracker.py保存了所有的轨迹信息负责初始化第一帧卡尔曼滤波的预测和更新负责级联匹配,IOU匹配。
deep_sort/deep_sort/deep_sort.pydeepsort的整体封装实现一个deepsort追踪的一个整体效果。
deep_sort/utils这里最主要有一些各种各样的工具python代码例如画框工具日志保存工具等等。 链接https://pan.baidu.com/s/1uORzJIav2z2SXMqaBfJ5pQ 提取码ztaw 运行demo result 下一章讲解怎么训练自己的特征提取网络