发布时间:2025-12-09 11:52:46 浏览次数:1
是一类在离散状态下求极值的最优化问题二分图(Bipartite graph) 匹配是由一组没有公共端点的边构成的集合。 U与V之间的关联视为前一帧与当前帧的同一id目标的检测框的关联数据关联是多目标跟踪任务中的关键步骤, 运筹学方法,比较经典的即为匈牙利匹配算法和KM算法-传统方法被计算量限制, 数据关联的最大瓶颈是计算量爆炸的问题-只需要用一个方法找到最优解即可。从这个角度,问题变成了一个分配问题求最优解的过程 随机有限集(RFS)理论-实现长时间追踪一百万数量以上的目标匈牙利算法主要用来解决两个问题:求二分图的最大匹配数和最小点覆盖数匈牙利算法计算 1. 算法条件 求目标函数的最小值 人数和任务数相等 效率非负 2.算法本质:变换系数矩阵(效率),找到n个不同行不同列的0,使指派问题达到最优(也称lapjv算法)是一个比匈牙利解法更快的算法KM算法(Kuhn-Munkres Algorithm) KM算法解决的是带权二分图的最优匹配问题,即引入了权值这 引入了权值作为约束条件,可以使匹配成功率大大提高 场景是这样,检测中有9个ground truth,我预测了10个检测,他们和每个ground truth的IOU矩阵如下 需要把最合适的预测和标签绑定到一起,并且每个预测和标签只能使用一次 混淆矩阵 Confusion Matrix IOU(交并比)矩阵 cost: 距离计算处理出来的,具体有余弦距离,欧氏距离和IOU距离目标跟踪(Object-Tracking) 利用检测+跟踪的模式 利用将检测器和re-id模型两个结合成一个网络结构,这 单目标跟踪典型算法有:Mean Shift、TLD(基于在线学习的跟踪)、KCF(基于相关滤波性) DFT(Deteciton-Free Tracking) 需要人工标定视频的第一帧图像中的目标,之后边检测边跟踪,常用于单目标跟踪 Multi-Object-Tracking 多目标跟踪算法典型有:SORT、DeepSORT TBD(Tracking-by-Detecton),又或者也可叫DBT(Detection-Based-Tracking) 在线跟踪(Online Tracking)和离线跟踪(Offline Tracking) Deepsort的前身是sort算法,sort算法的核心是卡尔曼滤波算法和匈牙利算法 而Deepsort算法在sort算法的基础上增加了级联匹配(Matching Cascade)和新轨迹的确认(confirmed) 跟踪框与检测框: 卡尔曼滤波(Kalman filtering)是一种利用线性系统状态方程,它将两个都不是那么可靠的方式做了融合,从而可以有效抵抗噪点等外部影响,得到相对准确的预测值。卡尔曼滤波算法就是根据你检测框的位置去预测目标在下一帧的位置检测框与跟踪框(卡尔曼滤波预测出来的跟踪框)他们匹配起来,找到最优(**)的匹配,从而实现跟踪 多目标跟踪算法benckmark 数据集 算法评价指标import numpy as npfrom scipy.optimize import linear_sum_assignmentif __name__ == '__main__': ## data base_row = ["a","b","c"] comp_col = ["x","z","y"] #square matrix cost = np.array([[4, 1, 3], [2, 0, 5], [3, 2, 2]]) base_row = ["a","b","c"] comp_col = ["x","z","y","i"] # rectangular matrix cost = np.array([[4, 1, 3,3], [2, 0, 5,7], [3, 2, 2,0]]) ## method row_ind, col_ind = linear_sum_assignment(cost) print(row_ind,"$")#开销矩阵对应的行索引 print(col_ind,"#")#对应行索引的最优指派的列索引 print(cost[row_ind,col_ind])#提取每个行索引的最优指派列索引所在的元素,形成数组 print(cost[row_ind, col_ind].sum()) for i in range(len(row_ind)): print(base_row[row_ind[i]],comp_col[col_ind[i]])from ._lsap import linear_sum_assignment 线性和分配问题 linear_sum_assignment -- Solves the linear-sum assignment problem. 二次指派问题(quadratic assignment problem) quadratic_assignment -- Solves the quadratic assignment problem. scipy.sparse.csgraph.maximum_bipartite_matching 最大匹配问题: scipy.sparse.csgraph.min_weight_full_bipartite_matching scipy.optimize.linear_sum_assignment 求权值最小scipy是一个python开源的数学计算库,可以应用于数学、科学以及工程领域,它是基于numpy的科学计算库 scipy.sparse 提供了 7 种稀疏矩阵数据结构,或者称之为稀疏格式Scikit-learn(以前称为scikits.learn,也称为sklearn) sklearn 里的linear_assignment() 指派问题或分派问题 idx_main, idx_other = scipy.optimize.linear_sum_assignmen(cost_matrix) scipy.optimize.linear_sum_assignment 可以解指派问题(the linear sum assignment problem) scipy中有对应的接口scipy.optimize.linear_sum_assignment, 输入代价矩阵,即可得到分配问题的结果 scipy.optimize.linear_sum_assignment 输入和返回值 maximum cost_matrix[row_ind, col_ind].sum() numpy.arange(cost_matrix.shape[0]). 方矩阵 square matrix 矩阵矩形 a generalization of the classic assignment problem where the cost matrix is rectangular jonker-volgenant(lapjv:Linear Assignment Problem solver using Jonker-Volgenant algorithm) jonker-volgenant算法(也称lapjv算法)是一个比匈牙利解法更快的算法interval=100 time_gap = abs(float(txt_timestamp) - float(get_ime_timestamp(img_file)))time_gap = time_gapif time_gap <= interval else 10000”E“ 是 exponent(指数) 的缩写。 3.14E3表示3140 科学计数法中E代表10的次幂 或者 3.14E+03表示3140 “E+”后面要精确到十分位位数不够末尾补0源码: https://github.com/scipy/scipyhttps://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.linear_sum_assignment.html Assignment problem https://en.wikipedia.org/wiki/Assignment_problemhttps://blog.csdn.net/weixin_39548859/article/details/120276651 IOU计算,邻接矩阵法 https://blog.csdn.net/zhuhuigege/article/details/127508137DeepSORT目标跟踪里的匈牙利算法 最小代价分配问题 https://zhuanlan.zhihu.com/p/544534720DETR中匈牙利Hungarian算法介绍 taken from # scikit-learn https://blog.csdn.net/wsLJQian/article/details/118365084