目标跟踪综述:《Machine Learning Methods for Solving Assignment Problems in Multi-Target Tracking》

引言

多目标跟踪的主要任务是给定一个图像序列,找到图像序列中运动的物体,并将不同帧的物体一一对应,给出不同物体的运动轨迹。应用场景包括行人检测,交通监控,自动驾驶等。
多目标跟踪问题在关键在于数据关联(data association)和轨迹间关联问题(track-to-track association)。数据关联指的是对一组新检测结果与已存在目标轨迹进行匹配。当有多个传感器时,需要处理轨迹间关联问题。我们需要对来自不同传感器的相同目标进行匹配。

问题表达

2.1 Linear Assignment

问题描述:在 k k k时刻有 m m m个已知轨迹(track)和 n n n个检测结果(detection, measurement)其中 k = 1 , . . . , T k = 1,...,T k=1,...,T。假设有一个矩阵 C k ∈ R m × n C_k \in R^{m \times n} CkRm×n,元素 c k i j ∈ C c_k^{ij} \in C ckijC表示在 k k k时刻将第 j j j个measurement与第 i i i个track进行匹配的成本。用二元变量 x i j ∈ { 0 , 1 } x^{ij} \in \{0,1\} xij{0,1}表示是否分配。问题的目标是找到最优匹配使总成本最小。
在这里插入图片描述
min ⁡ x ∈ X ∑ i = 1 m ∑ j = 1 n c k i j x i j \min_{x \in X}\sum_{i=1}^m\sum_{j=1}^nc_k^{ij}x^{ij} xXmini=1mj=1nckijxij
with constraints
∑ i = 1 m x i j , j = 1 , . . . , n \sum_{i=1}^mx^{ij}, j = 1,...,n i=1mxij,j=1,...,n
∑ j = 1 n x i j , j = 1 , . . . , m \sum_{j=1}^nx^{ij}, j = 1,...,m j=1nxij,j=1,...,m
约束条件说明measurement与track间只能唯一匹配。
最常用的算法是Hungarian (匈牙利算法),复杂度为 O ( n 3 ) O(n^3) O(n3)。对于目标跟踪问题,LA只考虑前一时刻的measurement数据关联,优点是速度快,可实现实时跟踪算法,问题是对于堵塞,误检,漏检等情况表现不行。一个可行的方法是设置时间上的滑动窗口,关联时延时决策,使用多个时刻的measurement信息。问题变换为下面要说明的问题。

2.2 Multidimensional Assignment

在这里插入图片描述
问题描述: T T T为时间窗口, Z T = { Z 1 , Z 2 , . . . . , Z T } Z^T = \{Z_1,Z_2,....,Z_T\} ZT={Z1,Z2,....,ZT}为不同时刻的measurements组成的集合,目标是找到一个该集合的划分使总成本最小。

在这里插入图片描述

M k M_k Mk k k k时刻mesurements总个数
c i 1 , i 2 , . . . , i T c_{i_1,i_2,...,i_T} ci1,i2,...,iT:不同时刻的measurements串成一条轨迹的成本
ρ \rho ρ:相应二元决策变量
注意:其它论文中 i 1 , i 2 , . . . , i T {i_1,i_2,...,i_T} i1,i2,...,iT从0开始,为0时说明选择的measurement为假。因为个个时刻的measurement个数可能不等。
说明一下第一个约束等式,等式中 i 1 i_1 i1不变,指第1个时刻时的任意measurement都只与一个track匹配。其它约束等式相同。

2.3 Assignment Costs
计算Cost 矩阵
2.3.1 Kinematic Costs

基于概率计算cost

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述串成真轨迹和假轨迹概率之比。检测的measurement不一定为真,存在一个真假的概率分布,分子是measurement为真且串成轨迹的概率,分母是假轨迹概率。
在这里插入图片描述:第k个时刻目标状态的measurement为 z k i z^i_k zki的概率
在这里插入图片描述:第j个轨迹k时刻的状态为 x k x_k xk的概率。

优化

由于该问题为NP-Hard问题,我们需要设计算法近似求解最优值。
3.1 最大权重独立集问题

独立集指图顶点的一个子集,满足任意两点间没有边连接,两个问题等价,不过要将cost转换为track score。证明可查阅《The Maximum Weight Independent Set Problem for Data Association in Multiple》。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述 Z 0 , 0 , 2 , 2 Z_{0,0,2,2} Z0,0,2,2说明四个时刻分别将1时刻第0个measurement,2时刻第0个measurement。。。串成一个轨迹,与第4个轨迹后两个选择冲突,也与6最后一个冲突。

在这里插入图片描述

3.2 贪婪随机搜索

参考论文《Multiple object video tracking using GRASP-MHT》。

3.2.1 TOMHT Framework

记k时的measurements为 Z ( k ) = { z i k } i = 0 M k , k = 1 , 2 , . . . , N , N Z(k) = \{z_i^k\}^{M_k}_{i=0}, k = 1,2,...,N, N Z(k)={zik}i=0Mk,k=1,2,...,N,N为扫描次数或滑动窗口大小, z i k z_i^k zik为k时第 i i i个measurement, z 0 k z_0^k z0k记为可能的漏检。一个track hypothesis 轨迹假设由一组mesurements组成:
T j k = ( z j 1 1 , z j 2 2 , . . . , z j n n , . . . , z j k k ) , j n ∈ Z ( n ) T_j^k = (z^1_{j_1},z^2_{j_2},...,z^n_{j_n},...,z^k_{j_k}),j_n \in Z(n) Tjk=(zj11,zj22,...,zjnn,...,zjkk),jnZ(n)如果track T j k − 1 T_j^{k-1} Tjk1与measuremetn z i k z_i^k zik关联,则轨迹得分 track score 的增量为
Δ L i j i = { l o g ( p ( z i k ∣ T j k − 1 ) P D λ ϕ + λ υ ) i ≠ 0 l o g ( 1 − P D ) i = 0 \Delta L^i_{ij} = \begin{cases} log(\frac{p(z_i^k|T_j^{k-1})P_D}{\lambda_{\phi}+\lambda_{\upsilon}}) & i \neq 0 \\ log(1-P_D) & i = 0 \end{cases} ΔLiji={log(λϕ+λυp(zikTjk1)PD)log(1PD)i̸=0i=0
在这里插入图片描述
T j k T^k_j Tjk的track sorce 为增量总和:
L ( T j k ) = ∑ i = j 1 j k Δ L i j k L(T^k_j)=\sum_{i=j_1}^{j_k}\Delta L^k_{ij} L(Tjk)=i=j1jkΔLijk
当两个track不共享正确检测则它们互相兼容。一个全局假设global hypothesis 为互相兼容的track组成的集合。则假设 H i k H_i^k Hik的score为其中包含的所有tracks scores之和:
L ( H i k ) = ∑ T j k ∈ H i k L ( T j k ) L(H_i^k)=\sum_{T^k_j \in H_i^k}L(T^k_j) L(Hik)=TjkHikL(Tjk)
在枚举所有 J J J个假设后,特定假设发生概率为:
P { H i k } = exp ⁡ ( L ( H i k ) ) 1 + ∑ j = 1 J exp ⁡ ( L ( H i k ) ) P\{H^k_i\} = \frac{\exp(L(H^k_i))}{1+\sum_{j=1}^J\exp(L(H^k_i))} P{Hik}=1+j=1Jexp(L(Hik))exp(L(Hik))
track T j k T^k_j Tjk的概率为:
P { T j k } = ∑ T j k ∈ H i k P { H i k } P\{T^k_j\}=\sum_{T^k_j \in H_i^k}P\{H^k_i\} P{Tjk}=TjkHikP{Hik}
计算复杂度太高:
Gate 方法,只考虑满足不等式的measurement
[ z i k − z ^ j k ∣ k − 1 ] T S − 1 [ z i k − z ^ j k ∣ k − 1 ] ≤ η 2 [z^k_i - \widehat{z}_j^{k|k-1}]^TS^{-1}[z^k_i - \widehat{z}_j^{k|k-1}] \leq \eta^2 [zikz jkk1]TS1[zikz jkk1]η2
z ^ j k ∣ k − 1 \widehat{z}_j^{k|k-1} z jkk1为先验预测, S S S [ z i k − z ^ j k ∣ k − 1 ] [z^k_i - \widehat{z}_j^{k|k-1}] [zikz jkk1]的协方差。

3.2.2 GRASP for the Hypothesis Enumeration
在有限次数计算内找出次优解,计算最大权重独立集问题。
搜索算法

在这里插入图片描述
每次计算构造一个可行解,再本地搜索返回一个更优解。

可行解的构造

将图顶点按贪心策略排序:greedy function
在这里插入图片描述
N + ( v i ) N^+(v_i) N+(vi)为与 v i v_i vi相邻的点和自己本身组成的集合,每次贪心选点时维护一个候选列表condidate list 满足条件:

在这里插入图片描述
g m a x g_{max} gmax为剩余点的greed function最大值。在初始化选点是,先排序
在这里插入图片描述
选择一对不相连且greedy function 值之和最大的顶点对,初始化后从候选列表中随机抽取一个顶点。
在这里插入图片描述
在这里插入图片描述

本地搜索
无向图的最大团=该补图的最大独立集

在这里插入图片描述

3.3 网络流方法

参考论文《Global Data Association for Multi-Object Tracking Using Network Flows》,《Multi-target Tracking by Lagrangian Relaxation to Min-Cost Network Flow》

<think>好的,我现在要解决用户提到的LibMambaUnsatisfiableError错误,特别是在处理python-3.8.0-hff0d562_2包时出现的strict repo priority问题。首先,我需要了解这个错误的具体原因。 用户提到了使用pip和conda安装时遇到问题,其中提到conflicts涉及到源码,导致无法解决。现在转向LibMamba引擎的错误,这可能与conda的环境配置或包依赖冲突有关。LibMamba是conda的新依赖解析引擎,速度更快,但在处理某些复杂依赖时可能更严格,导致出现UnsatisfiableError。 接下来,错误信息中的“strict repo priority”提示说明conda被设置为严格遵循仓库优先级,可能限制了包的来源,导致无法找到兼容的版本。用户可能在尝试安装python-3.8.0-hff0d562_2时,conda无法从配置的渠道中找到满足所有依赖关系的版本,或者存在渠道之间的冲突。 首先,我应该建议用户检查conda的配置,特别是渠道优先级设置。查看.condarc文件中的channel_priority设置,如果设置为strict,可能需要调整为flexible或disabled,以允许更灵活的依赖解析。不过,用户需要知道,调整优先级可能会影响环境稳定性,但有时是必要的。 然后,建议用户更新conda和libmamba相关工具,确保使用最新版本,可能修复了一些已知问题。命令如conda update -n base conda conda-libmamba-solver,然后尝试用--solver=libmamba指定解析器。 另外,添加更多可靠的conda渠道,如conda-forge,可能提供更广泛的包版本。用户可能在默认渠道中找不到合适的包版本,而conda-forge通常有更多更新的包。 如果特定包版本存在问题,可以尝试明确指定版本,或者使用通配符让conda选择最接近的兼容版本。例如,python=3.8.0,或者python=3.8.*,看是否能解决冲突。 创建一个新的干净环境可能有助于隔离问题,避免现有环境中的依赖冲突。使用conda create -n new_env python=3.8.0命令,并指定必要的渠道。 如果以上方法无效,可能需要手动检查依赖关系,使用conda search和conda info来查看可用版本及其依赖,找出冲突的包,并尝试逐个安装或排除问题包。 最后,作为备选方案,可以考虑使用虚拟环境工具如venv或pipenv结合pip安装,虽然这可能无法完全替代conda的环境管理,但在某些情况下可以绕过conda的依赖问题。 需要注意的是,用户之前提到conflicts涉及源码导致的问题,所以可能某些包需要编译或特定环境,而conda的预编译包可能不存在,导致无法解决。这时可能需要寻找替代包或从源码安装,但需要处理依赖问题。 总结步骤应该是先调整渠道优先级,更新工具,添加渠道,明确包版本,创建新环境,逐步排查依赖,最后考虑替代方案。同时提醒用户注意调整优先级可能带来的稳定性影响,并建议备份环境。</think>### 分步解决方案 #### 1. **检查仓库优先级设置** - **问题根源**:`strict repo priority`表示conda的仓库优先级设置为严格模式,导致依赖解析器无法跨渠道寻找兼容包。 - **操作**: - 打开`.condarc`文件(位于用户根目录),检查是否有`channel_priority: strict`配置。 - 若存在,将其修改为`channel_priority: flexible`或直接删除该行[^1]。 - 若不存在,手动添加`channel_priority: flexible`。 - **示例**: ```yaml channel_priority: flexible channels: - conda-forge - defaults ``` #### 2. **更新conda与libmamba解析器** - **目的**:确保使用最新的依赖解析逻辑和兼容性修复。 - **操作**: ```bash conda update -n base conda conda install -n base conda-libmamba-solver ``` - **验证**: 使用以下命令尝试安装时指定解析器: ```bash conda install --solver=libmamba python=3.8.0 ``` #### 3. **添加/调整conda渠道** - **原因**:默认渠道可能缺少特定包版本或依赖组合。 - **操作**: 在`.condarc`中将`conda-forge`设为最高优先级: ```yaml channels: - conda-forge - defaults ``` - **清理缓存**: ```bash conda clean --all ``` #### 4. **明确指定包版本与构建号** - **场景**:当包版本冲突时,需精确匹配构建号。 - **操作**: 尝试直接指定构建号`hff0d562_2`: ```bash conda install python=3.8.0=hff0d562_2 ``` - **备选方案**: 若失败,放宽版本限制: ```bash conda install "python=3.8.*" ``` #### 5. **创建新环境隔离问题** - **目的**:避免现有环境的依赖污染。 - **操作**: ```bash conda create -n py38_env python=3.8.0 conda activate py38_env ``` #### 6. **手动依赖排查** - **步骤**: 1. 查看冲突包依赖: ```bash conda search python=3.8.0 --info ``` 2. 检查冲突包的依赖树: ```bash conda info python=3.8.0 ``` 3. 手动安装核心依赖(如openssl、sqlite等)。 --- ### 备用方案 如果上述方法均无效,可尝试: 1. **使用pip安装Python**: ```bash conda create -n py38_env conda activate py38_env pip install python==3.8.0 ``` (注意:可能需要额外配置环境变量) 2. **从源码编译Python**: 需提前安装编译工具链(如gcc、zlib-dev等)。 --- ### 关键注意事项 - **渠道优先级风险**:`flexible`模式可能引入环境不稳定,建议在解决问题后恢复为`strict`模式。 - **版本兼容性**:Python 3.8.0可能存在已知漏洞,建议升级到3.8.x的最新子版本(如3.8.18)。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值