Two-Pass的论文2——方法和实验
一、前言
论文标题:Two-Pass Zero-Shot Temporal-Spatial Grounding of Rare Traffic Events in Surveillance Video
(监控视频中稀有交通事件的两阶段零样本时空定位)
论文地址:https://arxiv.org/pdf/2605.01512
3. 方法
3.1. 管道概述
给定一段时长为 D D D 秒的交通监控视频 V V V,我们预测一个元组 ( t ∗ , x ∗ , y ∗ , c ∗ ) (t^*, x^*, y^*, c^*) (t∗,x∗,y∗,c∗),其中 t ∗ ∈ [ 0 , D ] t^* \in [0, D] t∗∈[0,D], ( x ∗ , y ∗ ) ∈ [ 0 , 1 ] 2 (x^*, y^*) \in [0, 1]^2 (x∗,y∗)∈[0,1]2(Qwen3-VL 在 [ 0 , 1000 ] 2 [0, 1000]^2 [0,1000]2 网格上输出原始坐标;我们在合并和评估前将其除以 1000),且 c ∗ ∈ C = { head-on, rear-end, t-bone, sideswipe, single } c^* \in \mathcal{C} = \{\text{head-on, rear-end, t-bone, sideswipe, single}\} c∗∈C={head-on, rear-end, t-bone, sideswipe, single}。ACCIDENT@CVPR 2026 协议禁止在真实事故录像上训练;主路径使用冻结的 VLM,API 调用失败时回退到"冻结检测器 + 基于规则的物理模块"。图 2 展示了三个阶段。
第一遍(Pass 1):使用 Qwen3-VL-Plus [1] 以 1 fps 对 V V V 进行处理,生成一个粗略元组 ( t 1 , x 1 , y 1 , c 1 ) (t_1, x_1, y_1, c_1) (t1,x1,y1,c1)。
第二遍(Pass 2):在 t 1 t_1 t1 周围的 ± 3 \pm 3 ±3 秒窗口内以 5 fps 和 1024 像素采样,将时间和位置细化为 ( t 2 , x 2 , y 2 ) (t_2, x_2, y_2) (t2,x2,y2)。
随后,一个确定性的合并步骤协调两个空间估计,然后 Gemini 3.1 Flash-Lite [6] 分类器从以 t ∗ t^* t∗ 为中心的短片段中重新标注类型。
三个设计选择驱动了该方法:
- (i) 由粗到细的分解:利用 VLM 原生的时空定位能力,无需微调(与 [9] 需要训练的层次结构不同);
- (ii) 基于置信度的回退机制:仅当第二遍通过时间和空间合理性检查时,才接受其结果;
- (iii) 专家角色分配:跨两个 VLM 进行分工([23] 仅使用单个描述生成器)。
算法 1 给出了完整流程;在 2,027 段测试视频上的总推理成本约为 20 美元(约每视频 0.01 美元)。
类别标签说明: C \mathcal{C} C 中的五类事故类型分别为——head-on(正面碰撞)、rear-end(追尾)、t-bone(侧面垂直碰撞)、sideswipe(刮擦)、single(单车事故)。
3.2. 第一遍:粗定位
第一遍以 1 帧/秒 对视频 V V V 进行采样,最多 30 帧,长边缩放到 720 像素(ACCIDENT 数据集片段的中位时长为 26.8 秒)。所有帧被序列化为一条多模态消息,每帧前附加一个 [Frame at t.ts] 标签,将像素网格与其绝对秒数绑定——这是一种轻量级的锚定方式,Qwen3-VL 可以直接读取,避免了专门训练的时间-令牌模块 [8, 10]。
提示词(prompt)首先声明**“一段事故正在发生”**(闭世界设定,减少模型拒绝回答的情况;这与 ACCIDENT 基准一致,即每段视频都包含事故,并将开放世界部署限制在有人类介入把关的场景,详见附录 F)。提示词要求模型输出:碰撞发生的秒数、 [ 0 , 1000 ] 2 [0, 1000]^2 [0,1000]2 内的一个点(Qwen3-VL 的原生定位约定 [1]),以及 C \mathcal{C} C 中的一个类别(附带一行视觉定义)。
1 fps 采样、整数秒输出、以及每帧文本标签 的组合,将时间定位转化为"命名一个特定帧"的问题,而非生成连续的时间戳。
若 API 调用失败(实践中约占 17% 的视频),则回退到一个并行的 YOLO26x + ByteTrack + 物理规则管道(对车辆对和单车进行评分,基于规则推断类型);其余所有视频均由 VLM 端到端处理。

图 2. 带有两个置信门控的两阶段零样本定位管道。 第一遍(Qwen3-VL-Plus)以 1 fps 对全视频采样,生成一个粗略元组;主路径中 c 1 c_1 c1 被划掉,因为类型被重新分配给 Gemini 处理,但若 Gemini 调用失败则保留 c 1 c_1 c1 作为备用。第二遍在 ± 3 \pm 3 ±3 秒窗口内以 5 fps、1024 像素采样,细化时间和位置。门控 1(时间回退):当第二遍返回 − 1 -1 −1 或时间靠近窗口边界时,保留 t 1 t_1 t1;否则 t ∗ ← t 2 t^* \leftarrow t_2 t∗←t2。门控 2(空间合并):仅当两个坐标轴都落在 [ 0 , 1000 ] 2 [0, 1000]^2 [0,1000]2 网格的 [ 10 , 990 ] [10, 990] [10,990] 范围内时,保留 ( x 2 , y 2 ) (x_2, y_2) (x2,y2);否则回退到 ( x 1 , y 1 ) (x_1, y_1) (x1,y1)。专家型 Gemini 3.1 Flash-Lite Preview 分类器在以 t ∗ t^* t∗ 为中心的 5 秒片段上重新标注类型。所有模型均为冻结状态,以零样本方式使用。
3.3. 第二遍:细定位与合并
第二遍在窗口 W = [ max ( 0 , t 1 − 3 ) , min ( D , t 1 + 3 ) ] W=[\max(0, t_1-3), \min(D, t_1+3)] W=[max(0,t1−3),min(D,t1+3)] 内以 5 帧/秒 对 V V V 重新采样,生成最多 30 帧、1024 像素 的图像,每帧都标有其小数时间戳。提示词要求 0.1 秒精度 以及 [ 0 , 1000 ] 2 [0, 1000]^2 [0,1000]2 内的一个新坐标点,并明确允许当窗口 W W W 内未看到碰撞时返回 t 2 = − 1 t_2=-1 t2=−1。这个"逃生通道"将第二遍转变为一个置信门控的细化器,而非简单粗暴的覆盖。
时间回退(门控 1)。 以边界容差 τ = 0.3 \tau=0.3 τ=0.3 秒,
t ∗ = { t 1 t 2 < 0 或 ∣ t 2 − W min ∣ < τ 或 ∣ t 2 − W max ∣ < τ , t 2 否则。 ( 1 ) t^* = \begin{cases} t_1 & t_2 < 0 \text{ 或 } |t_2 - W_{\min}| < \tau \\ & \text{或 } |t_2 - W_{\max}| < \tau, \\ t_2 & \text{否则。} \end{cases} \quad (1) t∗=⎩ ⎨ ⎧t1t2t2<0 或 ∣t2−Wmin∣<τ或 ∣t2−Wmax∣<τ,否则。(1)
公式 1 将 − 1 -1 −1 响应或靠近窗口边界的时间解释为低置信度的对冲,回退到更稳健的第一遍估计。
空间合并(门控 2)。 一个确定性的后处理步骤协调两个空间估计。令 ( x ~ 1 , y ~ 1 ) (\tilde{x}_1, \tilde{y}_1) (x~1,y~1) 和 ( x ~ 2 , y ~ 2 ) (\tilde{x}_2, \tilde{y}_2) (x~2,y~2) 分别表示第一遍和第二遍在 [ 0 , 1000 ] 2 [0, 1000]^2 [0,1000]2 网格上的原始坐标。以边距 m = 10 m=10 m=10,
( x ∗ , y ∗ ) = { ( x ~ 2 / 1000 , y ~ 2 / 1000 ) m ≤ x ~ 2 ≤ 1000 − m 且 m ≤ y ~ 2 ≤ 1000 − m , ( x ~ 1 / 1000 , y ~ 1 / 1000 ) 否则。 ( 2 ) (x^*, y^*) = \begin{cases} (\tilde{x}_2/1000, \tilde{y}_2/1000) & m \leq \tilde{x}_2 \leq 1000-m \text{ 且} \\ & m \leq \tilde{y}_2 \leq 1000-m, \\ (\tilde{x}_1/1000, \tilde{y}_1/1000) & \text{否则。} \end{cases} \quad (2) (x∗,y∗)=⎩ ⎨ ⎧(x~2/1000,y~2/1000)(x~1/1000,y~1/1000)m≤x~2≤1000−m 且m≤y~2≤1000−m,否则。(2)
四个轴向条件必须同时满足;如果任一坐标轴被边缘截断(即超出 [ 10 , 990 ] [10, 990] [10,990] 安全范围),我们就回退到第一遍的坐标。两个门控(公式 1、2)构成了独立的置信度检查,使得两阶段联合表现优于单独使用任一阶段(见 §4.3)。
以下是 算法 1 的中文 Markdown 格式及逐行解释:
算法 1:TwoPassGround — 零样本时间+空间+类型(T+S+C)定位
算法 1 TwoPassGround:零样本 T+S+C 定位
输入: 时长为 D D D 的视频 V V V;视觉-语言模型 M Q \mathcal{M}_Q MQ(Qwen3-VL)、 M G \mathcal{M}_G MG(Gemini);窗口 Δ = 3 s \Delta=3\,\text{s} Δ=3s;边界容差 τ = 0.3 s \tau=0.3\,\text{s} τ=0.3s;边距 m = 10 m=10 m=10。
输出: ( t ∗ , x ∗ , y ∗ , c ∗ ) (t^*, x^*, y^*, c^*) (t∗,x∗,y∗,c∗)。
1: F 1 ← SAMPLE ( V , 1 fps , 720 px , ≤ 30 ) F_1 \leftarrow \text{SAMPLE}(V,\, 1\,\text{fps},\, 720\,\text{px},\, \leq 30) F1←SAMPLE(V,1fps,720px,≤30)
2: ( t 1 , x ~ 1 , y ~ 1 , c 1 ) ← M Q ( F 1 , π coarse ) (t_1, \tilde{x}_1, \tilde{y}_1, c_1) \leftarrow \mathcal{M}_Q(F_1, \pi_{\text{coarse}}) (t1,x~1,y~1,c1)←MQ(F1,πcoarse);原始坐标在 [ 0 , 1000 ] 2 [0,1000]^2 [0,1000]2 网格上
3: W ← [ max ( 0 , t 1 − Δ ) , min ( D , t 1 + Δ ) ] W \leftarrow [\max(0, t_1-\Delta),\, \min(D, t_1+\Delta)] W←[max(0,t1−Δ),min(D,t1+Δ)]
4: F 2 ← SAMPLE ( V ∣ W , 5 fps , 1024 px , ≤ 30 ) F_2 \leftarrow \text{SAMPLE}(V|_W,\, 5\,\text{fps},\, 1024\,\text{px},\, \leq 30) F2←SAMPLE(V∣W,5fps,1024px,≤30)
5: ( t 2 , x ~ 2 , y ~ 2 ) ← M Q ( F 2 , π fine ) (t_2, \tilde{x}_2, \tilde{y}_2) \leftarrow \mathcal{M}_Q(F_2, \pi_{\text{fine}}) (t2,x~2,y~2)←MQ(F2,πfine);若 API 失败则返回 ( − 1 , 0 , 0 ) (-1,0,0) (−1,0,0)(由门控 1 和 2 吸收处理)
6: // 门控 1:时间回退
7: if t 2 < 0 t_2 < 0 t2<0 or ∣ t 2 − W min ∣ < τ |t_2 - W_{\min}| < \tau ∣t2−Wmin∣<τ or ∣ t 2 − W max ∣ < τ |t_2 - W_{\max}| < \tau ∣t2−Wmax∣<τ then
8: t ∗ ← t 1 t^* \leftarrow t_1 t∗←t1
9: else
10: t ∗ ← t 2 t^* \leftarrow t_2 t∗←t2
11: end if
12: // 门控 2:空间合并
13: if m ≤ x ~ 2 ≤ 1000 − m m \leq \tilde{x}_2 \leq 1000-m m≤x~2≤1000−m and m ≤ y ~ 2 ≤ 1000 − m m \leq \tilde{y}_2 \leq 1000-m m≤y~2≤1000−m then
14: ( x ∗ , y ∗ ) ← ( x ~ 2 / 1000 , y ~ 2 / 1000 ) (x^*, y^*) \leftarrow (\tilde{x}_2/1000,\, \tilde{y}_2/1000) (x∗,y∗)←(x~2/1000,y~2/1000)
15: else
16: ( x ∗ , y ∗ ) ← ( x ~ 1 / 1000 , y ~ 1 / 1000 ) (x^*, y^*) \leftarrow (\tilde{x}_1/1000,\, \tilde{y}_1/1000) (x∗,y∗)←(x~1/1000,y~1/1000)
17: end if
18: C ← CROPCLIP ( V , t ∗ , ( x ~ 1 / 1000 , y ~ 1 / 1000 ) , [ t ∗ − 3 , t ∗ + 2 ] , 2.5 × ) C \leftarrow \text{CROPCLIP}\bigl(V,\, t^*,\, (\tilde{x}_1/1000, \tilde{y}_1/1000),\, [t^*-3, t^*+2],\, 2.5\times\bigr) C←CROPCLIP(V,t∗,(x~1/1000,y~1/1000),[t∗−3,t∗+2],2.5×)
19: c ∗ ← M G ( C , π type ) c^* \leftarrow \mathcal{M}_G(C, \pi_{\text{type}}) c∗←MG(C,πtype);若失败则 c ∗ ← c 1 c^* \leftarrow c_1 c∗←c1
20:
21: return ( t ∗ , x ∗ , y ∗ , c ∗ ) (t^*, x^*, y^*, c^*) (t∗,x∗,y∗,c∗)
逐步解释
| 行号 | 操作 | 解释 |
|---|---|---|
| 1 | 第一遍采样 | 对整段视频 V V V 以 1 帧/秒 采样,长边缩放到 720 像素,最多取 30 帧(覆盖约 30 秒)。这是"粗"分辨率,追求时间覆盖范围。 |
| 2 | 第一遍推理(粗定位) | 将 F 1 F_1 F1 送入 Qwen3-VL-Plus( M Q \mathcal{M}_Q MQ),使用粗粒度提示词 π coarse \pi_{\text{coarse}} πcoarse。输出:碰撞秒数 t 1 t_1 t1、原始坐标 ( x ~ 1 , y ~ 1 ) (\tilde{x}_1, \tilde{y}_1) (x~1,y~1)(在 [ 0 , 1000 ] 2 [0,1000]^2 [0,1000]2 网格上)、以及类型 c 1 c_1 c1。 |
| 3 | 构建细化窗口 | 以 t 1 t_1 t1 为中心,向前后各扩展 Δ = 3 \Delta=3 Δ=3 秒,得到窗口 W W W(同时裁剪到视频边界 [ 0 , D ] [0,D] [0,D] 内)。 |
| 4 | 第二遍采样 | 仅在窗口 W W W 内以 5 帧/秒 重新采样,长边 1024 像素,同样最多 30 帧。这是"细"分辨率,追求时间精度。 |
| 5 | 第二遍推理(细定位) | 将 F 2 F_2 F2 再次送入 Qwen3-VL,使用细粒度提示词 π fine \pi_{\text{fine}} πfine。输出更精确的时间 t 2 t_2 t2(0.1 秒精度)和坐标 ( x ~ 2 , y ~ 2 ) (\tilde{x}_2, \tilde{y}_2) (x~2,y~2)。若 API 失败,输出 ( − 1 , 0 , 0 ) (-1,0,0) (−1,0,0),后续门控会自动处理。 |
| 6-11 | 门控 1:时间回退 | 判断第二遍时间是否可信: • 若 t 2 = − 1 t_2=-1 t2=−1(模型表示没找到碰撞) • 或 t 2 t_2 t2 距离窗口边界 < 0.3 <0.3 <0.3 秒(可能是模型在"猜"边界) → 回退到第一遍的 t 1 t_1 t1(更稳健)。 否则接受 t 2 t_2 t2 作为最终 t ∗ t^* t∗。 |
| 12-17 | 门控 2:空间合并 | 判断第二遍坐标是否可信: • 若 x ~ 2 , y ~ 2 \tilde{x}_2, \tilde{y}_2 x~2,y~2 都落在 [ 10 , 990 ] [10, 990] [10,990] 安全区内(未触及图像边缘) → 接受第二遍坐标,归一化到 [ 0 , 1 ] 2 [0,1]^2 [0,1]2。 否则说明坐标可能被边缘截断(edge-clamped),回退到第一遍坐标。 |
| 18 | 裁剪类型分类片段 | 以最终时间 t ∗ t^* t∗ 为中心,在第一遍粗坐标 ( x ~ 1 / 1000 , y ~ 1 / 1000 ) (\tilde{x}_1/1000, \tilde{y}_1/1000) (x~1/1000,y~1/1000) 周围裁剪一个 2.5 倍 放大的 5 秒视频片段 C C C(时间范围 [ t ∗ − 3 , t ∗ + 2 ] [t^*-3, t^*+2] [t∗−3,t∗+2])。注意:这里故意用 Pass 1 的粗坐标做裁剪中心,因为它比 Pass 2 更稳定,适合做分类的上下文。 |
| 19 | 专家类型分类 | 将片段 C C C 送入 Gemini 3.1 Flash-Lite( M G \mathcal{M}_G MG),使用类型专用提示词 π type \pi_{\text{type}} πtype 重新标注碰撞类型 c ∗ c^* c∗。若 Gemini API 失败,则回退到第一遍的 c 1 c_1 c1。 |
| 21 | 返回结果 | 输出最终四元组:时间 t ∗ t^* t∗、归一化坐标 ( x ∗ , y ∗ ) (x^*, y^*) (x∗,y∗)、类型 c ∗ c^* c∗。 |
核心设计要点总结
- 两阶段由粗到细:第一遍"看全局"定大致范围,第二遍"看局部"提精度,避免单遍在覆盖率和分辨率之间做取舍。
- 双门控保险:时间和空间各自有独立的确定性回退规则,不盲目相信第二遍结果,防止过拟合到局部噪声。
- 专家分工:Qwen 负责"找位置"(时空定位),Gemini 负责"判类型"(视频分类),各司其职。
- 失败兜底:API 失败或模型异常时,每一步都有回退路径( t 1 t_1 t1、 ( x 1 , y 1 ) (x_1,y_1) (x1,y1)、 c 1 c_1 c1),保证系统鲁棒性。
3.4. 专家类型分类
Qwen3-VL 的类型准确率在 1,681 段 Pass-1 有效视频上仅为 0.462(包含 17% 物理回退的全测试集 C = 0.474 C=0.474 C=0.474),远低于其空间得分,因此我们将类型分类任务重新分配给第二个 VLM。提取一段跨越 [ t ∗ − 3 , t ∗ + 2 ] [t^*-3, t^*+2] [t∗−3,t∗+2] 的 5 秒 片段,以 Pass 1 中心 ( x 1 , y 1 ) (x_1, y_1) (x1,y1) 为基准按 2.5 倍框 进行空间裁剪,然后送入 gemini-3.1-flash-lite-preview,使用一个枚举 C \mathcal{C} C 并禁止弃权的闭世界提示词。API 失败时回退到 c 1 c_1 c1。我们围绕 Pass-1 中心 ( x 1 , y 1 ) (x_1, y_1) (x1,y1) 而非合并后的 ( x ∗ , y ∗ ) (x^*, y^*) (x∗,y∗) 进行裁剪,因为 Pass 1 为类型分类提供了更稳定的粗粒度区域。这种拆分将全测试集类型准确率从 0.474 提升到 0.591(相对提升 +25%),每视频增加一次额外的 API 调用。
| Method | T T T | S S S | C C C | A C C S ACC^S ACCS |
|---|---|---|---|---|
| Optical Flow [11] | — | — | — | .251 |
| BBox Dynamics + OF [11] | — | — | — | .270 |
| Naive baseline [14] | .30 | .25 | .34 | .289 |
| Molmo-7B [4] | .48 | .60 | .27 | .396 |
| Best-of-baselines [14] | .48 | .60 | .49 | .412 |
| Gemini 3.1 single-pass (ours) | .44 | .49 | .49 | .473 [.46,.49] |
| Qwen3-VL Pass 1 (ours) | .46 | .51 | .47 | .480 [.47,.49] |
| Ours (full) | .50 | .54 | .59 | .539 [.53,.55] |
| Human [14] | .98 | 1.0 | .92 | .843 |
表 1. ACCIDENT 上的主要结果(2,027 段真实 CCTV 视频),官方评估器 σ t = 1 \sigma_t=1 σt=1。Kaggle 基线 [11];Naive / Molmo-7B / Best-of-baselines / Human 来自 [14]。 T , S , C T, S, C T,S,C:数据集级别均值; A C C S ACC^S ACCS:每视频调和均值取平均(我们的为排行榜报告值);置信区间来自 1,000 次 bootstrap 重采样。
4. 实验
4.1. 实验设置
我们在 ACCIDENT@CVPR 2026 的 2,027 段真实 CCTV 片段上进行评估,每段视频带有(时间、2D 中心、类型)标注;测试集标签在赛后公开发布,我们的超参数在发布前已冻结(附录 B)。根据 [14], A C C S ACC^S ACCS 是每视频调和均值在视频上的平均;报告的 T , S , C T, S, C T,S,C 是数据集级别分量均值(通常 ≠ 3 / ( 1 / T + 1 / S + 1 / C ) \neq 3/(1/T+1/S+1/C) =3/(1/T+1/S+1/C))。 T T T:在真实时间处的高斯评分( σ t = 1 \sigma_t=1 σt=1 秒); S S S:各向异性空间高斯( σ x = 0.127 , σ y = 0.119 \sigma_x=0.127, \sigma_y=0.119 σx=0.127,σy=0.119); C C C:top-1 类型准确率。基线包括:两个 Kaggle 公开笔记本 [11]、基准论文的朴素基线、Molmo-7B、最佳基线组合 oracle,以及人类上限 [14]。
4.2. 主要结果
我们的管道达到 A C C S = 0.539 ACC^S=0.539 ACCS=0.539(95% CI [0.525, 0.553]):比最佳基线组合 oracle 高 +0.127,比 Molmo-7B 高 +0.143。 T = 0.497 T=0.497 T=0.497 超过 Molmo 的对应值; S = 0.538 S=0.538 S=0.538 低于 Molmo 的 0.596; C = 0.591 C=0.591 C=0.591 为目前报告的最高值。单独的 Gemini 3.1 在相同 1 fps 输入上仅得 0.473 [.46, .49],低于我们的 Qwen Pass 1(0.480);成对 bootstrap 检验显示我们的管道比单独 Gemini 高 Δ = + 0.066 \Delta=+0.066 Δ=+0.066( p < 0.001 p<0.001 p<0.001)。在 1,681 段 Pass-1 有效视频上 A C C S = 0.554 ACC^S=0.554 ACCS=0.554;346 段回退视频(附录 D)得 0.457;朴素填充回退得 0.501,证实** VLM 管道驱动了整体提升**。
图 3. 失败诊断。 (a) Pass 1 时间呈右偏分布,均值 +1.55 秒。(b) 时间 MAE 随视频长度增长。© Head-on(正面碰撞)被误判为 t-bone(侧面垂直碰撞)占 79%,sideswipe(刮擦)被误判为 rear-end(追尾)占 39%。(d) YOLO+物理(6.63 秒)与 Qwen-Pass 1(3.20 秒)的 oracle 组合达到 2.13 秒(−33.5%)。
4.3. 消融实验
| Configuration | T σ 1 T_{\sigma_1} Tσ1 | T σ 2 T_{\sigma_2} Tσ2 | S S S | C C C | A C C S ACC^S ACCS |
|---|---|---|---|---|---|
| Pass 1 only (Qwen type) | 0.463 | 0.614 | 0.506 | 0.474 | 0.480 |
| + Gemini type | 0.463 | 0.614 | 0.506 | 0.590 | 0.514 |
| + Pass 2 time | 0.497 | 0.626 | 0.506 | 0.591 | 0.528 |
| + Pass 2 spatial | 0.497 | 0.626 | 0.538 | 0.591 | 0.539 |
表 2 分解了各项增益。用 Gemini 替换 Qwen 的类型头将 C C C 提升 +0.12(最大单项提升);Pass 2 时间细化在 σ t = 1 \sigma_t=1 σt=1 下为 T T T 增加 +0.034;Pass 2 空间合并为 S S S 增加 +7%。相比单独 Pass 1 的累计增益为 +0.059 A C C S ACC^S ACCS。
4.4. 失败模式分析
时间:滞后偏差 + 视频长度。 Pass 1 的(预测 − 真实值)时间均值 +1.55 秒,中位数 +0.37 秒(图 3a):VLM 选择的是碰撞后的残骸帧,而非接触瞬间。 T M A E T_{MAE} TMAE 也从 ≤10 秒片段的 0.94 秒 增长到 ≥20 秒片段的 >4 秒(图 3b),说明需要运动自适应采样。
类型混淆。 混淆矩阵(图 3c)显示两个最难类别发生崩塌:79% 的 head-on 被预测为 t-bone,39% 的 sideswipe 被预测为 rear-end。按类型细分(附录 E),head-on 和 sideswipe 仅从类型一项就导致 A C C S ACC^S ACCS 接近 0.12——而它们的 T , S T, S T,S 是健康的。head-on → t-bone 的崩塌很可能是由高角度 CCTV 的单目深度模糊以及网络数据标签偏差共同导致的。
物理–VLM oracle。 在 1,681 段 Pass-1 有效视频上,YOLO+物理(6.63 秒 MAE)与 Qwen-Pass 1(3.20 秒 MAE)的 oracle 组合达到 2.13 秒 MAE(图 3d,−33.5%)。
4.5. 结论
两阶段定位加专家 VLM 拆分在 ACCIDENT@CVPR 2026 上达到 A C C S = 0.539 ACC^S=0.539 ACCS=0.539(比基准论文的最佳基线组合 oracle 高 +0.127,成本约 20 美元)。下一步的着力点:自适应采样和物理–VLM 融合,而非单纯扩大模型规模。
通俗解释
我用一个完整的故事给你讲清楚这篇论文到底在干什么。
故事背景:城市里的"电子交警"
想象你是一座城市的交通管理者。路上有成千上万个监控摄像头,24小时不停地录视频。
但问题是: 交通事故非常稀少——可能看一整天的录像,也就能碰到一两起。可一旦发生,必须立刻知道:
- 什么时候 撞的?(精确到秒)
- 在哪里 撞的?(画面中的具体位置)
- 怎么撞的?(追尾?刮擦?正面相撞?单车翻车?)
如果靠人工盯着屏幕看,眼睛会瞎掉。你想让 AI 自动帮你找。
第一个难题:没有"教材"
如果你想教一个 AI 识别事故,通常的做法是找几万段事故视频,标注好"第5秒、画面中央、追尾",然后让 AI 反复学习。
但交通事故视频有个尴尬的特点:
- 真实事故录像很少(毕竟事故不常发生)
- 很多录像涉及隐私,法律不允许你拿它来训练 AI
这就好比你想让一个学生学会看病,但不允许他去医院实习,只能给他看一些电脑合成的"假病人"。到了考场上,考的却是真病人——这怎么考得好?
2026 年 CVPR(计算机视觉顶会)办了一个叫 ACCIDENT 的比赛,规则就是这样:给你 2000 多段假视频练手,但真正的考试是 2000 多段真实监控录像,而且严禁在真实事故视频上训练。
作者的灵光一闪:直接"问"大模型
作者想:现在的 AI 大模型(比如 Qwen3-VL、Gemini)已经很聪明了,它们虽然没专门学过"看交通事故",但本来就能理解视频画面和文字。既然不能训练,那干脆不训练,直接把视频丢给大模型,用文字问它:
“这段视频里发生了事故吗?在第几秒?在画面哪个位置?是什么类型?”
这叫零样本(Zero-Shot)——就像让一个没学过医的博学天才直接给人看病,靠常识推理。
但直接问有个大问题:视频太长,模型会"看花眼"
假设一段视频有 30 秒。如果你把每帧画面都塞给 AI,AI 会懵:信息量太大,它要么看得很粗略,要么只盯着某几帧看。
就像你让一个人快速翻完一本 30 页的画册,问他"第几页有个穿红衣服的人",他大概率会猜错。
现有的笨办法:
- 光流法:看画面哪里动得厉害。但问题是,正常变道、刹车也会动得厉害,经常误判。
- 单遍大模型:把整段视频压缩成很少几帧给 AI 看。时间精度只能到"第 5 秒左右",位置精度也很差。
核心创意:“两遍看病法”
作者设计了一个很巧妙的流程,就像医生看病:
第一遍:门诊初筛(粗看)
把视频每秒抽一帧(1fps),像快速翻相册一样丢给 Qwen3-VL:
“医生,这段 30 秒的视频里,事故大概发生在第几秒?大概在画面哪里?”
AI 会给你一个粗略答案,比如:“大概第 8 秒,画面左下角。”
这一步不求精确,只求找对大致范围。
第二遍:专家会诊(细看)
既然知道大概在第 8 秒,那就只把第 5 秒到第 11 秒(前后各 3 秒)这段剪出来,每秒抽 5 帧(5fps,分辨率也更高),再丢给同一个 AI:
“医生,现在只看这 6 秒,精确告诉我,碰撞发生在第几秒?精确坐标是多少?”
因为视频短了、帧数密了,AI 就能看得更仔细。
关键保险:如果第二遍在"瞎猜",就回退
但第二遍的结果不一定更准。有时候 AI 在这 6 秒里反而看不出来了,或者为了应付你而瞎猜一个边界值。
作者设了两道**“防盗门”**:
门 1(时间防盗门):
- 如果 AI 说"我没看清"(返回 -1)
- 或者 AI 说的时间刚好卡在窗口边缘(比如"第 5.0 秒"或"第 11.0 秒",像在硬猜)
→ 不信任第二遍! 回退到第一遍的粗略时间。
门 2(空间防盗门):
- 如果 AI 指的坐标在画面最边缘(比如 x=0 或 x=1000,像手指随便往边框一指)
→ 不信任第二遍! 回退到第一遍的粗略位置。
这就像:专家会诊如果结论很含糊,就还是以初诊医生的判断为准。
另一个发现:AI 也要"术业有专攻"
作者发现,Qwen3-VL 这个模型找时间和位置很准,但判断"这是什么类型的事故"很烂(准确率只有 46%)。
于是他们又引入另一个模型 Gemini 3.1,专门干一件事:
“我只给你看碰撞前后 5 秒、以碰撞点为中心裁剪好的小片段,你告诉我这是追尾还是刮擦?”
这就像一个医院里的分工:放射科医生看片子定位病灶,病理科医生专门判断是良性还是恶性。
这一招把事故类型判断的准确率从 47% 拉到了 59%,提升了 25%。
考试结果:花 20 美元,打败所有对手
在 ACCIDENT@CVPR 2026 的真实监控录像考试上:
| 方法 | 得分 A C C S ACC^S ACCS |
|---|---|
| 光流法(Kaggle 基线) | 0.251 |
| 边界框动力学(另一个基线) | 0.270 |
| 朴素基线 | 0.289 |
| 最强单个大模型(Molmo-7B) | 0.396 |
| 之前最好的"组合拳" | 0.412 |
| 本文方法 | 0.539 |
| 人类专家 | 0.843 |
本文方法比之前的最佳成绩高了 0.127,而且全程没有训练,只花了约 20 美元(140 块人民币)的 API 调用费,就把 2000 多段视频全处理完了。
但作者很诚实:我们的 AI 也有毛病
论文最后坦白了几个有趣的缺陷:
-
总是"慢半拍":AI 平均会晚 1.55 秒才报事故。因为它看到的往往是"撞完之后冒烟/停车的残骸画面",而不是"两车接触的那一瞬间"。
-
视频越长越懵:10 秒以内的短视频,时间误差不到 1 秒;但超过 20 秒的长视频,误差能飙到 4 秒以上。
-
有些类型永远分不清:
- 79% 的"正面相撞"被误判成"侧面垂直碰撞"
- 39% 的"刮擦"被误判成"追尾"
作者分析:监控摄像头是从高处斜着往下拍的,单目视觉有深度歧义,而且训练大模型的网络图片里这些标签本身就有偏差。
-
物理+AI 的梦幻组合:如果把传统物理方法(检测车辆运动轨迹)和 AI 的第一遍结果取最优,时间误差能从 3.2 秒降到 2.1 秒。说明未来把老方法和 AI 结合起来,还有很大空间。
一句话总结
这篇论文讲了一个"花小钱办大事"的故事:既然不能拿真实事故视频训练 AI,那就干脆不训练,让两个各有所长的大模型分工合作,先粗看后细看,还加了双保险防止瞎猜,最后用 20 美元的成本在交通事故检测比赛上大幅刷新了零样本方法的最好成绩。
就像两个没学过医的博学天才,一个负责"找病灶位置",一个负责"判断病情性质",通过"先看全身再放大局部"的会诊流程,愣是在没有实习过的情况下,考出了比很多正规医生还好的成绩。
更多推荐

所有评论(0)