论文阅读-SurgiTrack: Fine-grained multi-class multi-tool tracking in surgical videos

2026-06-05发布于论文随笔 | 最后更新于2026-06-05 14:06:00

Medical Image Analysis原文链接:SurgiTrack: Fine-grained multi-class multi-tool tracking in surgical videos

基本介绍

CholecTrack20数据集的追踪轨迹从小到大分为三个层级/视角,决定了器械ID保持的时间范围:

  1. visibility trajectory

    内窥镜画面视野范围内的轨迹。在该轨迹片段中,保证器械没有离开视频画面。在这个层级下,器械可能会被短暂遮挡,导致无法追踪,但仍同属本次visibility轨迹。

  2. intracorporeal trajectory

    体内轨迹。在该轨迹片段中,保证器械没有离开人体,即没有拔出。

  3. intraoperative trajectory

    整场手术轨迹。单个患者的整场手术作为一个轨迹片段。

三视角层级的Track标注

上图就展示了这三个不同的追踪层级:

  • ID为1的Grasper在\(t_1\)\(t_3\)保持存在
  • ID为2的Grasper在\(t_2\)的画面中消失了,但并没有移出体内,在\(t_3\)中又重现在画面中
  • ID为3的Hook在\(t_3\)之后移出了人体。当然,有可能在后续还会重新进入,在intraoperative trajectory层面上,会为重入的器械标注和之前相同的ID

方法介绍

整体框架

整体框架如上图所示。简单来说,先使用YOLOv7作为Detector得到bbox以及对应的分类结果。bbox用于裁剪图片,局部图片送入Direction Estimator中推理器械朝向。class features(即分类结果与置信度)、预测的器械方向与bbox一起送入最终的Graph Matching。Graph Matching事实上就是一个基本的匹配和挑选策略,和图的关系并不是很大。

Direction Estimator

Direction Estimator模块示意图

如何推理

通过Detector得到bbox后,以bbox为基础,四周都向外扩展一些,使得器械的杆能更多地露出一些,若扩展时碰到边界,就用 0 padding。将如此得到的各器械的局部图片resize到Direction Estimator中Encoder的输入尺寸,本文使用EfficientNet-b0作为Direction Estimator中的Encoder。

至此,每个bbox对应的扩展局部图片都变成了一个embedding,通过线性层将其投影为\(Q\)\(K\)\(V\),再进行一次attention:

$$ \mathbf{A}(\mathbf{Q}, \mathbf{K}, \mathbf{V}) = \text{Softmax}\left(\frac{\mathbf{K}\mathbf{Q}^T}{\sqrt{d_{\mathbf{K}}}}\right)\mathbf{V} $$

本文将如此得到的注意力\(A\)视为Direction Re-ID Features,即\(\theta\),用于直接表示器械的方向。接下来预测operator,即判断该器械的握持者情况:

  • MSLH: main surgeon left hand
  • MSRH: main surgeon right hand
  • ASRH: assistant surgeon right hand
  • NULL: null operator

计算方式很简单,将\(A\)与器械类别表示(例如onehot)拼接后直接输入一个线性层:

$$ \begin{aligned} \hat{y}&=w\cdot \left[A,C\right]+b\\ P&=\text{Softmax}(\hat{y}) \end{aligned} $$

如何训练

文中提到Direction Estimator的训练可以通过三种训练方式完成。首先是全监督训练,用operator的GT直接算loss,其中\(\sigma\)为sigmoid,\(w\)为类平衡权重:

$$ L = - \left( y \log(\sigma(\hat{y})) w + (1 - y) \log(1 - \sigma(\hat{y})) \right) $$

接着是弱监督,假设没有operator的GT标签,但是track ID的标注还有,就可以拿track ID相同的器械局部图片作为正样本对、track ID不同的作为负样本对。记样本对中两个样本的局部图片得到的Direction Re-ID Features为\(\theta_a\)\(\theta_b\)(a,b)为正样本对时,对比损失中\(y=1\),负样本对时,\(y=0\)\(m\)为超参margin(本文中设为0.5):

$$ \begin{gather} d = \|\theta_a - \theta_b\|\\ L = d^2 y + \max(m - d, 0)^2 (1 - y) \end{gather} $$

再是自监督的情况,即operator和track ID标注都没有。由于同一帧中多个工具往往来自不同方向,将同一帧中的不同工具视为负样本,将同一个工具做轻微图片增强作为正样本。当然,有些帧中可能只有一个工具,此时将同一个工具大幅度旋转作为负样本,正样本仍然来自轻微增强。

HBGM

HBGM模块示意图

简单来说,HBGM(Harmonizing Bipartite Graph Matching)用于管理视频中多条track轨迹的状态,它会将当前帧新检测出来的detection结果关联到某个track上。在上图中,就是将当前\(t\)时刻的各个detection尝试匹配到之前的历史track中,或者新开一个track。

每个track \(q_j^{t-1} = \{ B_j^{t-1}, C_j^{t-1}, \theta_j^{t-1}, \text{IDS}_j \}\) 中包含了上一个detection的检测框、类别、方向特征以及当前track在三个尺度上的ID;当前的检测结果\(p_i^t = \{ B_i^t, C_i^t, \theta_i^t \}\)包含detection的检测框、类别、方向特征。

在HBGM中,track的状态以及操作有:

  • New:即创建一个track
  • Active:当一个detection结果匹配到某track上时,认为这个track是Active的
  • Lost:当前时刻没有detection结果可以匹配到某个track上时,认为这个track Lost了。若5秒阈值内该track又重新有匹配的,就会重新激活
  • Out of Camera View(OOCV):Lost状态的track超出恢复时间阈值时,则转入本状态。本状态对于体内轨迹和整场手术轨迹来说可以重新激活
  • Out of Body(OOB):通过“Class-Direction Consistency Check”判别出工具离开人体时,标记track为本状态。本状态是体内轨迹的末尾标记,对整场手术轨迹来说可以重新激活
  • Removed:长时间没有转到Active的New track会被移除,长时间未重新激活的track也会被移除

在当前时刻\(t\)检测出来的目标按阈值\(\tau\)分为高置信度和低置信度两组,在每个历史轨迹上利用Kalman滤波预测当前时刻检测框位置。

Bipartite Association

每个历史track i与当前每个detection结果 j之间可以计算一个距离\(\mathrm{Dist}_{i,j}\),其中类别距离中的S为\(C_j^{t+1}\)的预测概率、\(\tau\)就是一开始用于区分高/低置信度的阈值。

$$ \begin{gather} \mathrm{Dist}_{i,j} = \alpha \cdot \mathrm{Dist}_{\mathrm{spatial}}(B_i^t, B_j^{t+1}) + \beta \cdot \mathrm{Dist}_{\mathrm{direction}}(\theta_i^t, \theta_j^{t+1}) + \gamma \cdot \mathrm{Dist}_{\mathrm{class}}(C_i^t, C_j^{t+1})\\ \text{Dist}_{\text{spatial}}(B_i^t, B_j^{t+1}) = 1 - \frac{|B_i^t \cap B_j^{t+1}|}{|B_i^t \cup B_j^{t+1}|}\\ \text{Dist}_{\text{direction}}(\theta_i^t, \theta_j^{t+1}) = 1 - \frac{\theta_i^t \cdot \theta_j^{t+1}}{\|\theta_i^t\| \cdot \|\theta_j^{t+1}\|}\\ \text{Dist}_{\text{class}}(C_i^t, C_j^{t+1}) = \begin{cases} 1 - S & \text{if } C_i^t = C_j^{t+1} \\ \tau & \text{if } C_i^t \neq C_j^{t+1} \end{cases} \end{gather} $$

遵循“每条轨迹最多匹配一个检测,每个检测最多匹配一条轨迹”的原则进行二分图匹配,将检测结果匹配到历史轨迹中,并要求达到全局距离最小。

在这第一轮高置信度检测结果的匹配中: - 对于没有成功匹配到轨迹的高置信度检测结果,会进入到第二轮Bipartite Association - 对于没有匹配到高置信度检测结果的轨迹,会进行Recovery Matching - 对于成功匹配到轨迹的高置信度检测结果,会进行Track Harmonization

第二轮二分图匹配过程和第一轮相同,匹配的对象包含低置信度检测结果和第一轮没有成功匹配到轨迹的高置信度检测结果。在这第二轮匹配中: - 对于成功匹配到轨迹的检测结果,会进行Track Harmonization - 对于没有匹配到检测结果的轨迹,会按照状态转换规则对其进行状态更新,转换到某个inactive状态(即Lost、OOCV或OOB)

Recovery Matching

对于第一轮匹配中没有完成匹配的检测结果i和inactive状态的轨迹j,计算recovery score \(S_{ij}\),将这个检测结果匹配给分数最低(即距离最近)且低于阈值\(\tau_{\text{rec}}\)的inactive轨迹,即框架图中的Re-initialize;若每个inactive轨迹与该未匹配检测结果的recovery score都高于\(\tau_{\text{rec}}\),则进入Track Harmonization进一步操作

$$ S_{ij} = \alpha \cdot \text{Dist}_{\text{direction}}(\theta'_i, \theta_j) + \beta \cdot \mathbb{1}(C'_i \neq C_j) $$

需要注意的是,从不同的inactive(即Lost、OOCV或OOB)状态中恢复时,对track ID的处理方式是不同的: - Lost 后恢复:三个 ID 都可保留 - OOCV 后恢复:新 visibility ID,保留 intracorporeal 和 intraoperative ID - OOB 后恢复:新 visibility 和 intracorporeal ID,只保留 intraoperative ID

Track Harmonization

从框架图中可以看出,track harmonization用于进一步处理匹配成功的检测结果和轨迹,当然,也包括来自于Recovery Matching的新建轨迹请求。track harmonization本质上是一套维护track的启发式策略

  1. 当某个track中的器械类别\(C\)发生变化,但方向特征\(\theta\)没有变化或非常接近,说明器械被更换了,该track的状态应更新为OOB
  2. 当track分配了新的高层ID后,所有比它低层的ID也都要分配新的。也就是说,新出现在手术中的器械,一定新出现在体内、新出现在视野内;新出现在体内的器械,一定新出现在视野内
  3. 低层的track状态(Lost、OOCV、OOB)更新时,所有更高层的track状态也要更新。因为追踪的本质上是器械,一个器械在不同视角中的状态肯定是一致的

需要注意的是,track ID整体呈现一个三层的树状结构,一个Intraoperative ID对应多个Intracorporeal ID;而一个Intracorporeal ID又对应多个Visibility ID。

实验结果

表3说明了文中提出的direction estimator在全监督、弱监督和自监督的训练方式下都能得到良好的表现。

全/弱/自监督训练

表4展现了使用不同的方法以及方法的组合替代direction feature(DF)时,track的效果。表中涉及的特征指代: - BYTE:ByteTrack中的二阶段匹配方法 - KF:Kalman Filter - CMC:Camera Motion Compensation - MC:Multi-Class,直接使用类别作为track,一个类别一个track - AF:Appearance Feature,即用一个可学习的网络为detection出来的部分计算embedding - SF:Similarity Feature,即用一个可学习的网络计算detection和track之间的相似度

Re-ID特征类型对比

表6中和其他模型进行了对比

主要性能对比

图5展示了画面低质时,性能的稳定性

低质场景下的可视化展示