专业简历制作网站有哪些,贵阳市房地产交易平台上线,wordpress带投稿模板,seo优化技术招聘目录deepsort流程一、匈牙利算法二、卡尔曼滤波车速预测例子动态模型的概念卡尔曼滤波在deepsort中的动态模型三、预测值及测量值的含义deepsort在pytorch中的运行deepsort流程
DeepSORT是一种常用的目标跟踪算法#xff0c;它结合了深度学习和传统的目标跟踪方法。DeepSORT的…
目录deepsort流程一、匈牙利算法二、卡尔曼滤波车速预测例子动态模型的概念卡尔曼滤波在deepsort中的动态模型三、预测值及测量值的含义deepsort在pytorch中的运行deepsort流程
DeepSORT是一种常用的目标跟踪算法它结合了深度学习和传统的目标跟踪方法。DeepSORT的核心思想是将深度学习的目标检测结果与传统的目标跟踪器相结合实现在连续帧之间对目标的跟踪。 DeepSORT主要包括两个部分目标检测和目标跟踪。对于目标检测DeepSORT使用现有的目标检测算法例如YOLO、Faster R-CNN等来检测出图像中的目标。对于目标跟踪DeepSORT使用卡尔曼滤波器来预测目标的位置同时通过匈牙利算法来匹配跟踪目标和检测目标。 具体来说DeepSORT的目标跟踪过程如下
对于输入的当前帧使用目标检测算法检测出所有的目标。
对于之前的每个跟踪目标使用卡尔曼滤波器预测它在当前帧中的位置。
使用匈牙利算法将检测到的目标与之前的跟踪目标进行匹配以便为每个跟踪目标分配检测目标。
对于未被分配的检测目标将其视为新的跟踪目标并使用卡尔曼滤波器进行位置预测。
对于长时间未被检测到的跟踪目标将其删除。
重复上述步骤以进行下一帧的目标跟踪。 总的来说DeepSORT通过结合目标检测和目标跟踪能够更加准确地跟踪目标具有较高的实时性和鲁棒性。
一、匈牙利算法
在DeepSORT中匈牙利算法用来将前一帧中的跟踪框tracks与当前帧中的检测框detections进行关联通过外观信息appearance information和马氏距离Mahalanobis distance或者IOU来计算代价矩阵通过代价矩阵完成新一帧检测框与原被跟踪对象的最优匹配。即匈牙利算法可以告诉我们当前帧的某个目标是否与前一帧的某个目标相同。
二、卡尔曼滤波
卡尔曼滤波的核心思想是通过动态模型和测量模型来估计系统的状态。动态模型描述了系统的状态如何随时间变化测量模型描述了如何将系统的状态转换为测量结果。卡尔曼滤波将这两个模型结合起来通过状态预测和测量更新来估计系统的状态。 卡尔曼滤波的过程可以分为两个阶段预测和更新。在预测阶段卡尔曼滤波器根据动态模型预测系统的状态并计算出预测误差。在更新阶段卡尔曼滤波器将预测的状态与测量结果进行比较计算出状态的估计值和估计误差。卡尔曼滤波器通过不断进行预测和更新逐步提高对系统状态的估计精度。 卡尔曼滤波的优点在于可以根据系统的动态模型和测量模型来估计状态可以适应不同的系统和环境。同时卡尔曼滤波器可以对测量结果进行加权平均有效抑制测量误差和干扰。不过卡尔曼滤波的缺点在于需要对系统进行建模并且对于非线性系统需要进行扩展卡尔曼滤波等变种方法的处理。 卡尔曼滤波被广泛应用于无人机、自动驾驶、卫星导航等领域简单来说其作用就是基于传感器的测量值来更新预测值以达到更精确的估计。
DeepSORT算法使用卡尔曼滤波进行预测的原因是通过对目标运动状态的建模能够更加准确地预测目标的未来位置从而提高目标跟踪的准确性和鲁棒性。 如果不使用卡尔曼滤波进行预测直接跟踪目标的位置和大小可能会受到多种因素的影响例如目标运动的加速度、噪声干扰等等从而导致目标跟踪的不稳定容易出现跟踪丢失或误判的情况。而卡尔曼滤波则可以对这些因素进行建模并对目标的位置、速度等状态进行估计和预测从而在一定程度上保证目标跟踪的稳定性和准确性。 此外卡尔曼滤波还能够根据目标的运动特性对跟踪结果进行优化例如对于匀速直线运动的目标卡尔曼滤波能够更加准确地预测目标的位置和速度从而提高跟踪的效果。
车速预测例子
假设你有一个车速传感器但是由于传感器的误差和外界干扰等原因传感器测量的车速数据会存在一定程度的误差。现在你希望通过这个传感器测量的数据来估计车辆的真实速度这时候就可以使用卡尔曼滤波。 卡尔曼滤波的基本思想是将观测数据和模型预测结果加权平均得到更精确的状态估计结果。因此在这个例子中我们可以将车速传感器的测量结果作为观测值将车速模型预测的结果作为模型预测值然后使用卡尔曼滤波算法来对两者进行融合得到更加准确的车速估计值。 具体来说卡尔曼滤波算法可以分为两个步骤预测和更新。在预测步骤中我们使用车速模型来预测当前时刻车速的值和协方差矩阵在更新步骤中我们将车速传感器测量的值和预测值进行比较计算卡尔曼增益然后使用卡尔曼增益对预测值进行修正得到当前时刻的最优估计值和协方差矩阵。 通过这种方式我们可以将传感器测量的数据和模型预测的结果进行融合得到更加精确的车速估计值从而提高了行车安全。
动态模型的概念
动态模型指的是描述系统状态随时间变化的数学模型。在卡尔曼滤波中动态模型通常用状态转移矩阵和控制向量来表示系统状态的演化规律。 状态转移矩阵描述了系统状态在没有控制输入情况下的演化规律它将当前时刻的状态向量映射到下一时刻的状态向量表示为 X_k F_k * X_{k-1} 其中X_k和X_{k-1}分别表示第k和第k-1时刻的系统状态向量F_k为状态转移矩阵。 控制向量描述了外部输入对系统状态的影响它通常用来修正状态转移矩阵表示为 X_k F_k * X_{k-1} B_k * u_k 其中B_k为控制矩阵u_k为控制向量。 动态模型的建立需要根据具体的系统进行选择和设计一般需要考虑系统的物理特性、运动规律等因素。在卡尔曼滤波中动态模型的准确性对滤波器的估计精度有重要影响因此需要根据实际情况进行适当的调整和优化。
卡尔曼滤波在deepsort中的动态模型
在DeepSORT中卡尔曼滤波的动态模型是针对目标运动状态建立的。具体来说DeepSORT使用了一个匀速模型即假设目标在运动过程中保持匀速运动。在这个假设下目标的状态向量可以表示为 X_k [u, v, s, r, a, b]^T 其中u和v表示目标在图像平面上的位置s和r表示目标的大小和纵横比a和b表示目标的加速度。 状态转移矩阵F_k可以表示为 F_k [1, 0, Δt, 0, 0, 0; 0, 1, 0, Δt, 0, 0; 0, 0, 1, 0, 0, 0; 0, 0, 0, 1, 0, 0; 0, 0, 0, 0, 1, 0; 0, 0, 0, 0, 0, 1] 其中Δt表示两帧之间的时间间隔。 控制向量u_k为0即没有外部控制影响。 根据上述动态模型可以使用卡尔曼滤波器预测目标在下一帧中的状态并计算出预测误差。同时在更新阶段可以将预测的状态与测量结果进行比较计算出状态的估计值和估计误差从而对目标进行跟踪。 需要注意的是在实际应用中动态模型的建立需要根据实际情况进行调整例如对于不同的目标可以根据其运动特征和目标跟踪的要求进行相应的优化。
三、预测值及测量值的含义
注意预测值和测量值都不是真值卡尔曼滤波最终输出值是对于真值的最优估计值。
预测值指根据目标的历史状态和运动模型上一帧的跟踪结果对目标在当前帧出现的位置进行预测。
测量值指在当前帧中通过目标检测得到的目标位置和大小信息。‘
在DeepSORT算法中对于每一帧输入的目标检测结果首先需要对其进行匹配将其与之前跟踪的目标进行匹配得到目标的标识信息以及当前帧中目标的位置和大小信息。然后需要对这些目标进行预测得到它们在下一帧中的位置和大小信息。这里的预测值是指在当前帧中通过之前跟踪的目标状态以及卡尔曼滤波来预测下一帧中目标的位置和大小信息。 需要注意的是预测值和测量值并不是同一帧中的数据。预测值是根据之前的跟踪结果和模型预测出来的目标位置和大小信息而测量值是当前帧中通过目标检测获取的目标位置和大小信息。因此预测值和测量值是不同的它们来自于不同的帧用于不同的目的。 至于时间概念和帧间关系DeepSORT算法是一个序列化的算法需要对每一帧的输入数据进行处理同时需要考虑到不同帧之间的目标运动状态变化和相邻帧之间的目标位置和大小变化。在进行目标预测和匹配时需要考虑到这些因素从而保证目标跟踪的连续性和准确性。因此时间概念和帧间关系是DeepSORT算法中非常重要的概念。
检测器得到bbox → 生成detections → 卡尔曼滤波预测→ 使用匈牙利算法将预测后的tracks和当前帧中的detecions进行匹配级联匹配和IOU匹配 → 卡尔曼滤波更新
例子
Frame 0检测器检测到了3个detections当前没有任何tracks将这3个detections初始化为tracks
Frame 1检测器又检测到了3个detections对于Frame 0中的tracks先进行预测得到新的tracks然后使用匈牙利算法将新的tracks与detections进行匹配得到(track, detection)匹配对最后用每对中的detection更新对应的trackdeepsort在pytorch中的运行
下载https://github.com/HowieMa/DeepSORT_YOLOv5_Pytorch.git相关代码。 在base内已经装有pytorch环境配置详见 pytorch的docker环境的安装
conda create -n deepsort --clone base
conda activate deepsort 将清华源替换后安装一个requirements.txt
pip install -r requirements.txt 安装依赖库
sudo apt-get install libgl1-mesa-glx解决报错 1在upsampling.py中报错行改为return F.interpolate(input, self.size, self.scale_factor, self.mode, self.align_corners) 2报错行self.update(yaml.load(fo.read()))改为self.update(yaml.load(fo, Loaderyaml.FullLoader) 工程main.py中的视频源文件改为
parser.add_argument(--input_path, typestr, default/home/DeepSORT_YOLOv5_Pytorch-master/001.avi, helpsource) 即可运行demo:
python3 main.py