文章目录
一、前言
论文标题:A Modular Zero-Shot Pipeline for Accident Detection, Localization, and Classification in Traffic Surveillance Video
(ACCIDENT:交通监控视频中事故检测、定位与分类的模块化零样本流水线)
论文地址:https://arxiv.org/pdf/2604.09685v1
项目地址: https://accidentbench.github.io/
Github地址:https://github.com/accidentbench/ACCIDENT
二、方法
2.1 问题形式化(Problem Formulation)
A test video
V
V
V has
N
N
N frames recorded at
f
f
f frames per second. The task is to produce a tuple
(
t
∗
,
c
x
∗
,
c
y
∗
,
k
∗
)
(t^*, c_x^*, c_y^*, k^*)
(t∗,cx∗,cy∗,k∗) :
t
∗
t^*
t∗ is the accident time in seconds,
(
c
x
∗
,
c
y
∗
)
∈
[
0
,
1
]
2
(c_x^*, c_y^*) \in [0, 1]^2
(cx∗,cy∗)∈[0,1]2 are normalized image coordinates of the point of impact, and
k
∗
∈
K
k^* \in \mathcal{K}
k∗∈K is the collision type. The label space is
K
=
{
head-on, rear-end, sideswipe, single, t-bone
}
\mathcal{K} = \{\text{head-on, rear-end, sideswipe, single, t-bone}\}
K={head-on, rear-end, sideswipe, single, t-bone} .
一个测试视频
V
V
V 包含
N
N
N 帧,以
f
f
f 帧/秒的速率录制。任务需要输出一个四元组
(
t
∗
,
c
x
∗
,
c
y
∗
,
k
∗
)
(t^*, c_x^*, c_y^*, k^*)
(t∗,cx∗,cy∗,k∗):其中
t
∗
t^*
t∗ 是事故发生时间(单位:秒),
(
c
x
∗
,
c
y
∗
)
∈
[
0
,
1
]
2
(c_x^*, c_y^*) \in [0, 1]^2
(cx∗,cy∗)∈[0,1]2 是碰撞点的归一化图像坐标,
k
∗
∈
K
k^* \in \mathcal{K}
k∗∈K 是碰撞类型。标签空间为
K
=
{
正面碰撞(head-on), 追尾(rear-end), 侧面刮擦(sideswipe), 单车事故(single), T型碰撞(t-bone)
}
\mathcal{K} = \{\text{正面碰撞(head-on), 追尾(rear-end), 侧面刮擦(sideswipe), 单车事故(single), T型碰撞(t-bone)}\}
K={正面碰撞(head-on), 追尾(rear-end), 侧面刮擦(sideswipe), 单车事故(single), T型碰撞(t-bone)}。
We split the problem into three parts. Time and location predictions rely on classical signal processing; type classification relies on a pre-trained vision-language model.
我们将问题拆分为三个部分。时间与位置预测依赖经典信号处理方法;类型分类则依赖预训练的视觉-语言模型。
2.2 时序峰值检测(Temporal Peak Detection)
Collisions produce sudden intensity changes between consecutive frames. We exploit this observation by building a one-dimensional signal from per-frame brightness differences and then looking for statistical outliers in that signal.
碰撞会在相邻帧之间产生突发的强度变化。我们利用这一观察,通过逐帧亮度差异构建一维信号,然后在该信号中寻找统计异常值。
Let
I
t
∈
R
H
×
W
I_t \in \mathbb{R}^{H \times W}
It∈RH×W be the grayscale frame at index
t
t
t , resized to
H
=
180
,
W
=
320
H = 180, W = 320
H=180,W=320 for speed. We compute the mean absolute difference between adjacent frames:
设
I
t
∈
R
H
×
W
I_t \in \mathbb{R}^{H \times W}
It∈RH×W 为索引
t
t
t 处的灰度帧,为提升速度将其缩放至
H
=
180
,
W
=
320
H = 180, W = 320
H=180,W=320。我们计算相邻帧之间的平均绝对差:
d t = 1 H W ∑ u = 1 H ∑ v = 1 W ∣ I t + 1 ( u , v ) − I t ( u , v ) ∣ ( 1 ) d_t = \frac{1}{HW} \sum_{u=1}^H \sum_{v=1}^W |I_{t+1}(u, v) - I_t(u, v)| \quad (1) dt=HW1u=1∑Hv=1∑W∣It+1(u,v)−It(u,v)∣(1)
for
t
=
1
,
…
,
N
−
1
t = 1, \dots, N-1
t=1,…,N−1 . This series contains both collision signals and background noise from camera shake and ordinary traffic. A centered rolling mean with window
w
=
5
w = 5
w=5 suppresses the short-lived noise:
其中
t
=
1
,
…
,
N
−
1
t = 1, \dots, N-1
t=1,…,N−1。该序列同时包含碰撞信号以及由相机抖动和普通交通运动带来的背景噪声。使用窗口
w
=
5
w = 5
w=5 的中心滑动均值来抑制短时噪声:
d
ˉ
t
=
1
∣
W
t
∣
∑
s
∈
W
t
d
s
(
2
)
\bar{d}_t = \frac{1}{|W_t|} \sum_{s \in W_t} d_s \quad (2)
dˉt=∣Wt∣1s∈Wt∑ds(2)
where
W
t
=
{
s
:
∣
s
−
t
∣
≤
⌊
w
/
2
⌋
}
W_t = \{s : |s - t| \leq \lfloor w/2 \rfloor\}
Wt={s:∣s−t∣≤⌊w/2⌋} . We normalize the smoothed values into z-scores using the series-wide mean
μ
\mu
μ and standard deviation
σ
\sigma
σ :
其中
W
t
=
{
s
:
∣
s
−
t
∣
≤
⌊
w
/
2
⌋
}
W_t = \{s : |s - t| \leq \lfloor w/2 \rfloor\}
Wt={s:∣s−t∣≤⌊w/2⌋}。我们利用序列全局均值
μ
\mu
μ 和标准差
σ
\sigma
σ 将平滑后的值归一化为 z-score:
z
t
=
d
ˉ
t
−
μ
σ
+
ε
(
3
)
z_t = \frac{\bar{d}_t - \mu}{\sigma + \varepsilon} \quad (3)
zt=σ+εdˉt−μ(3)
with
ε
=
10
−
8
\varepsilon = 10^{-8}
ε=10−8 to avoid division by zero. Any frame whose
z
t
z_t
zt exceeds a threshold
τ
\tau
τ is treated as an anomaly candidate. Among all candidates, we select the one with the strongest anomaly score:
其中
ε
=
10
−
8
\varepsilon = 10^{-8}
ε=10−8 用于避免除零。任何满足
z
t
z_t
zt 超过阈值
τ
\tau
τ 的帧都被视为异常候选。在所有候选中,我们选择异常得分最强的一帧:
t
frame
∗
=
{
arg
max
t
:
z
t
>
τ
z
t
∃
t
s.t.
z
t
>
τ
arg
max
t
z
t
otherwise
(
4
)
t_{\text{frame}}^* = \begin{cases} \arg \max_{t: z_t > \tau} z_t & \exists t \text{ s.t. } z_t > \tau \\ \arg \max_t z_t & \text{otherwise} \end{cases} \quad (4)
tframe∗={argmaxt:zt>τztargmaxtzt∃t s.t. zt>τotherwise(4)
with
τ
=
1.5
\tau = 1.5
τ=1.5 . Taking the highest-scoring candidate among threshold-crossers favors the most prominent motion event. When no frame crosses the threshold, we fall back to the global maximum. Time in seconds is
t
∗
=
t
frame
∗
/
f
t^* = t_{\text{frame}}^* / f
t∗=tframe∗/f .
其中
τ
=
1.5
\tau = 1.5
τ=1.5。在超过阈值的候选中取得分最高者,有利于定位最显著的运动事件。当没有任何帧超过阈值时,我们回退到全局最大值。以秒为单位的时间为
t
∗
=
t
frame
∗
/
f
t^* = t_{\text{frame}}^* / f
t∗=tframe∗/f。
Figure 2 shows the raw frame-difference series and its z-score transform for a synthetic head-on collision. The raw signal (top panel) contains a mixture of gradual intensity drift from vehicle motion and a sharp transient near the collision moment. After smoothing and normalization (bottom panel), the collision event stands out as a distinct peak while background variation stays below the detection threshold.
图2展示了一个合成正面碰撞视频的原始帧差序列及其z-score变换结果。原始信号(上图)混合了车辆运动带来的渐进式强度漂移,以及碰撞时刻附近出现的尖锐瞬变。经过平滑与归一化处理后(下图),碰撞事件以一个明显的峰值凸显出来,而背景变化则始终保持在检测阈值以下。

Figure 2: Temporal localization on a synthetic CARLA video. Top: mean absolute frame difference
d
t
d_t
dt across all frames. Bottom: z-score anomaly series
z
t
z_t
zt after rolling-mean smoothing. The dashed line marks the detection threshold.
图2:在合成CARLA视频上的时序定位。 上图:所有帧的平均绝对帧差
d
t
d_t
dt。下图:经滑动均值平滑后的z-score异常序列
z
t
z_t
zt。虚线表示检测阈值。
2.3 空间碰撞定位(Spatial Impact Localization)
A collision concentrates high-magnitude motion in a small region of the image. We identify that region by accumulating dense optical flow over a short window and then computing the weighted centroid of the resulting magnitude map.
碰撞会将大幅度运动集中在图像的某个小区域内。我们通过在短时窗口内累积稠密光流,然后计算所得幅度图的加权质心来识别该区域。
When the predicted accident time
t
∗
t^*
t∗ is available from the temporal module, we center a 30-frame window on the corresponding frame index; otherwise, we fall back to starting at frame
⌊
N
/
3
⌋
\lfloor N/3 \rfloor
⌊N/3⌋ . For each pair of consecutive frames within this window, we run the Farneback dense optical flow algorithm [Farneback, 2003] at
320
×
180
320 \times 180
320×180 resolution. Farneback estimates per-pixel displacement using quadratic polynomial expansions and a multi-scale Gaussian pyramid. We set pyramid scale to 0.5, three levels, window size 15, three iterations, and polynomial parameters
n
=
5
n = 5
n=5 ,
σ
p
=
1.2
\sigma_p = 1.2
σp=1.2 .
当时序模块提供了预测的事故时间
t
∗
t^*
t∗ 时,我们以对应帧索引为中心取一个30帧的窗口;否则,回退到从第
⌊
N
/
3
⌋
\lfloor N/3 \rfloor
⌊N/3⌋ 帧开始。对于该窗口内的每一对连续帧,我们在
320
×
180
320 \times 180
320×180 分辨率下运行 Farneback 稠密光流算法 [Farneback, 2003]。Farneback 利用二次多项式展开和多尺度高斯金字塔估计逐像素位移。我们设置金字塔尺度为 0.5,三层,窗口大小为 15,三次迭代,多项式参数
n
=
5
n = 5
n=5,
σ
p
=
1.2
\sigma_p = 1.2
σp=1.2。
Let
f
t
(
u
,
v
)
=
(
f
x
,
f
y
)
\mathbf{f}_t(u, v) = (f_x, f_y)
ft(u,v)=(fx,fy) be the flow vector at pixel
(
u
,
v
)
(u, v)
(u,v) between frames
t
t
t and
t
+
1
t+1
t+1 . We sum the displacement magnitudes:
设
f
t
(
u
,
v
)
=
(
f
x
,
f
y
)
\mathbf{f}_t(u, v) = (f_x, f_y)
ft(u,v)=(fx,fy) 为帧
t
t
t 与
t
+
1
t+1
t+1 之间像素
(
u
,
v
)
(u, v)
(u,v) 处的光流向量。我们对位移幅度求和:
M
(
u
,
v
)
=
∑
t
f
x
2
(
u
,
v
,
t
)
+
f
y
2
(
u
,
v
,
t
)
(
5
)
M(u, v) = \sum_t \sqrt{f_x^2(u, v, t) + f_y^2(u, v, t)} \quad (5)
M(u,v)=t∑fx2(u,v,t)+fy2(u,v,t)(5)
Before extracting the centroid, we apply a percentile threshold at the 90th percentile of
M
M
M and zero out all values below it. This suppresses diffuse background motion and retains only the high-magnitude cluster near the collision site. The impact location is the weighted centroid of the thresholded map, normalized to unit coordinates:
在提取质心之前,我们对
M
M
M 施加 90% 分位数阈值,并将低于该阈值的所有值置零。这抑制了弥散的背景运动,仅保留碰撞点附近的高幅度聚类。碰撞位置为阈值化后图像的加权质心,归一化到单位坐标:
c
x
∗
=
1
W
∑
u
,
v
v
⋅
M
(
u
,
v
)
∑
u
,
v
M
(
u
,
v
)
,
c
y
∗
=
1
H
∑
u
,
v
u
⋅
M
(
u
,
v
)
∑
u
,
v
M
(
u
,
v
)
(
6
)
c_x^* = \frac{1}{W} \frac{\sum_{u,v} v \cdot M(u, v)}{\sum_{u,v} M(u, v)}, \quad c_y^* = \frac{1}{H} \frac{\sum_{u,v} u \cdot M(u, v)}{\sum_{u,v} M(u, v)} \quad (6)
cx∗=W1∑u,vM(u,v)∑u,vv⋅M(u,v),cy∗=H1∑u,vM(u,v)∑u,vu⋅M(u,v)(6)
If
∑
M
<
10
−
6
\sum M < 10^{-6}
∑M<10−6 , we return the frame center
(
0.5
,
0.5
)
(0.5, 0.5)
(0.5,0.5) . This centroid calculation is a special case of the image moment framework introduced by Hu [1962], applied to flow magnitudes instead of pixel intensities.
若
∑
M
<
10
−
6
\sum M < 10^{-6}
∑M<10−6,则返回帧中心
(
0.5
,
0.5
)
(0.5, 0.5)
(0.5,0.5)。该质心计算是 Hu [1962] 提出的图像矩框架的一个特例,只是将其应用于光流幅度而非像素强度。
Figure 3 shows the accumulation result on a synthetic video. The collision region concentrates most of the optical flow energy into a compact spatial cluster. After percentile thresholding, the weighted centroid falls within that cluster and provides a localized impact coordinate.
图3展示了在合成视频上的累积结果。碰撞区域将大部分光流能量集中到一个紧凑的空间聚类中。经过分位数阈值处理后,加权质心落入该聚类内部,从而提供了一个局部化的碰撞坐标。

Figure 3: Cumulative Farneback optical flow magnitude
M
(
u
,
v
)
M(u, v)
M(u,v) on a synthetic CARLA video after 90th-percentile thresholding. The bright region corresponds to the collision area; diffuse background motion is suppressed.
图3:在合成 CARLA 视频上,经 90% 分位数阈值处理后的累积 Farneback 光流幅度
M
(
u
,
v
)
M(u, v)
M(u,v)。 明亮区域对应碰撞区域;弥散的背景运动被抑制。
2.4 碰撞类型分类(Collision Type Classification)
We assign a collision type using CLIP [Radford et al., 2021], which learns a joint embedding space for images and text by contrastive training on 400 million image-text pairs collected from the internet. At test time, CLIP compares an image embedding against text embeddings of candidate class names using cosine similarity, allowing classification without any task-specific training data.
我们使用 CLIP [Radford et al., 2021] 来判定碰撞类型。CLIP 通过对从互联网收集的 4 亿个图像-文本对进行对比学习,构建了一个图像与文本的联合嵌入空间。在测试阶段,CLIP 通过余弦相似度将图像嵌入与候选类别名称的文本嵌入进行比较,从而无需任何任务特定的训练数据即可完成分类。
For each type
k
∈
K
k \in \mathcal{K}
k∈K , we write five natural language descriptions
{
p
k
1
,
…
,
p
k
5
}
\{p_k^1, \dots, p_k^5\}
{pk1,…,pk5} that characterize the collision from a bystander perspective (Table 1). Using several prompts per class reduces the influence of any one particular wording, consistent with the prompt ensembling approach studied by Radford et al. [2021] and Zhou et al. [2022]. Each prompt is encoded by the CLIP text encoder
ϕ
text
\phi_{\text{text}}
ϕtext , L2-normalized, and then averaged:
对于每个类型
k
∈
K
k \in \mathcal{K}
k∈K,我们撰写了五条从旁观者视角描述碰撞特征的自然语言描述
{
p
k
1
,
…
,
p
k
5
}
\{p_k^1, \dots, p_k^5\}
{pk1,…,pk5}(见表1)。每个类别使用多个提示词可以减少单一措辞带来的影响,这与 Radford et al. [2021] 和 Zhou et al. [2022] 研究的提示词集成方法一致。每条提示词由 CLIP 文本编码器
ϕ
text
\phi_{\text{text}}
ϕtext 编码,进行 L2 归一化后取平均:
t
k
=
1
5
∑
j
=
1
5
ϕ
text
(
p
k
j
)
∥
ϕ
text
(
p
k
j
)
∥
(
7
)
\mathbf{t}_k = \frac{1}{5} \sum_{j=1}^5 \frac{\phi_{\text{text}}(p_k^j)}{\|\phi_{\text{text}}(p_k^j)\|} \quad (7)
tk=51j=1∑5∥ϕtext(pkj)∥ϕtext(pkj)(7)
These vectors are computed once and cached before processing any video.
这些向量在处理任何视频之前只计算一次并缓存。
At inference time, we extract eight video frames centered on the predicted accident time
t
∗
t^*
t∗ and feed them into the CLIP visual encoder (ViT-B/32). Each embedding is L2-normalized, and we average the eight into a single representation:
在推理阶段,我们提取以预测事故时间
t
∗
t^*
t∗ 为中心的八帧视频图像,输入到 CLIP 视觉编码器(ViT-B/32)中。每个嵌入向量经 L2 归一化后,将八帧的表示平均为一个单一向量:
v
=
1
8
∑
i
=
1
8
ϕ
img
(
I
t
i
)
∥
ϕ
img
(
I
t
i
)
∥
(
8
)
\mathbf{v} = \frac{1}{8} \sum_{i=1}^8 \frac{\phi_{\text{img}}(I_{t_i})}{\|\phi_{\text{img}}(I_{t_i})\|} \quad (8)
v=81i=1∑8∥ϕimg(Iti)∥ϕimg(Iti)(8)
The predicted type is the class with highest similarity:
预测的类型为相似度最高的类别:
k
∗
=
arg
max
k
∈
K
v
⋅
t
k
(
9
)
k^* = \arg \max_{k \in \mathcal{K}} \mathbf{v} \cdot \mathbf{t}_k \quad (9)
k∗=argk∈Kmaxv⋅tk(9)
通俗解释
一、这篇论文到底要解决什么问题?
想象你是一个交警,坐在监控室里看路口的摄像头录像。你的任务是看完一段视频后回答三个问题:
- 什么时候撞的? —— 事故发生在第几秒?
- 撞在哪儿? —— 在画面中的哪个位置?
- 怎么撞的? —— 是追尾、正面相撞、侧面刮擦,还是其他类型?
这篇论文提出的方法就是一套自动回答这三个问题的"流水线"。而且关键是零样本(Zero-Shot)——也就是说,这个系统从来没有用真实的事故视频训练过,它靠的是一些通用的现成技术"临时发挥"。
二、模块一:找"什么时候撞的"(时间定位)
核心思路:撞车瞬间,画面会突然"抖"一下
正常情况下,监控画面里的车是平稳行驶的,相邻两帧的画面变化比较缓慢。但撞车那一瞬间,车身变形、碎片飞溅、车辆骤停,画面会发生剧烈的突变。
具体怎么做?
第一步:逐帧"找不同"
把视频变成一帧一帧的图片,对比第1帧和第2帧、第2帧和第3帧……看看每两帧之间差别有多大。差别用"平均绝对差"来衡量——简单来说,就是两张图对应位置的像素亮度相减,差异越大说明画面变化越剧烈。
第二步:平滑掉"毛刺"
但问题是,监控画面本身就有噪声:摄像头轻微抖动、树叶摇晃、光线变化,这些也会让相邻帧有差异。为了去掉这些"毛刺",作者用一个滑动窗口平均的方法:把当前帧前后几帧的差异取个平均,让曲线更平滑。这样,短暂的随机噪声就被抹平了,只剩下真正持续的变化。
第三步:判断什么叫"异常"
平滑之后,怎么知道哪个峰值代表撞车,哪个只是普通变道呢?作者用了z-score标准化:
- 先算出整条视频的平均差异值( μ \mu μ)和波动程度(标准差 σ \sigma σ)。
- 然后看每一帧的差异比平均值高出了多少个"标准差"。
- 如果某个时刻的z-score突然飙高(比如超过阈值1.5),就说明"这一刻的画面变化和平时完全不一样",大概率就是撞车了。
第四步:锁定最可疑的那一帧
在所有"异常"的帧里,挑差异最大的那个作为事故时间。如果整段视频都没有明显异常(比如阈值设太高了),那就退而求其次,选差异最大的那一帧。
通俗总结:就像你翻看一本相册,大部分页码都差不多,但突然有一页画面全变了——那一页就是事故发生的时候。
三、模块二:找"撞在哪儿"(空间定位)
核心思路:撞车的地方,物体运动最剧烈
确定了"第几秒撞的"之后,接下来要知道"在画面里的哪个位置撞的"。作者用了一个叫**光流(Optical Flow)**的技术。
什么是光流?
你可以把视频想象成翻动的连环画。光流就是在追踪:每一个像素点从这一帧到下一帧往哪个方向移动、移动了多少。比如一辆车从左往右开,光流就能画出每个像素点的"运动箭头"。
具体怎么做?
第一步:在事故时间前后开窗
既然已经知道大概什么时候撞的,就取撞车时刻前后共30帧(比如撞车前后各15帧),专门分析这段时间。
第二步:算每个像素的"运动量"
对窗口里的每一对相邻帧,用Farneback算法计算每个像素的光流向量。然后把这些向量的长度(也就是运动速度的大小)加起来,得到一张运动幅度图
M
(
u
,
v
)
M(u,v)
M(u,v)。在这张图上:
- 颜色越亮的地方 = 运动越剧烈
- 颜色越暗的地方 = 几乎没动
第三步:去掉背景干扰
但整张图可能到处都有运动——旁边车道在行驶的车、远处晃动的树。为了聚焦真正的碰撞点,作者做了一个90%分位数阈值:把运动量排在后90%的弱运动全部抹成零,只保留前10%的最强运动区域。
打个比方:就像一群人里,大多数人只是正常走路(背景运动),只有两个人在打架(碰撞)。把"走路"的人过滤掉,剩下打架的地方就很明显了。
第四步:找"重心"
在保留下来的高强度运动区域上,计算一个加权质心(类似物理里的重心)。运动量大的像素对中心点的"拉力"更大,所以质心会自然偏向运动最集中的位置。这个质心就是预测的碰撞点
(
c
x
∗
,
c
y
∗
)
(c_x^*, c_y^*)
(cx∗,cy∗)。
通俗总结:就像看一段慢动作回放,撞车的地方车辆变形、位移最大,把最"闹腾"的那个区域的中心点标记出来,就是撞车位置。
四、模块三:判断"怎么撞的"(类型分类)
核心思路:让AI"看图说话"
前面两个模块都是传统图像处理(算差异、算光流),但分类任务(判断是追尾还是正面相撞)需要理解"语义"——也就是画面内容的含义。这里作者搬出了CLIP这个强大的预训练模型。
CLIP是什么?
CLIP是OpenAI训练的一个"图像-文本匹配器"。它在4亿张互联网图片和对应的文字描述上学习过,因此它懂两件事:
- 看到一张图,能生成一个"图像向量"
- 看到一段文字,能生成一个"文本向量"
而且这两个向量在同一个空间里,意思相近的图像和文本,它们的向量就挨得近。
具体怎么做?
第一步:给每种碰撞类型写"人话描述"
论文把碰撞分成5类:正面撞(head-on)、追尾(rear-end)、侧面刮擦(sideswipe)、单车事故(single)、T型撞(t-bone)。
对每一类,作者写了5句不同的自然语言描述,比如:
- 正面撞:“两辆车迎面相撞”、“车头对车头的碰撞”……
- 追尾:“一辆车从后面撞上另一辆车”、“后方车辆撞击前车尾部”……
把这些描述送进CLIP的文本编码器,得到5个文本向量,取平均,就得到这个类别的"标准向量" t k \mathbf{t}_k tk。
为什么写5句而不是1句?因为不同措辞可能略有偏差,多写几句取平均,就像"众人投票",结果更稳。
第二步:提取事故帧的图像特征
取事故时间点附近的8帧画面,送进CLIP的图像编码器(用的是ViT-B/32版本),得到8个图像向量,也取平均,得到这段事故的"视觉向量"
v
\mathbf{v}
v。
第三步:比一比,谁最像?
把视觉向量
v
\mathbf{v}
v 和5个类别的文本向量
t
k
\mathbf{t}_k
tk 逐一计算余弦相似度(也就是看它们的方向有多接近)。相似度最高的那个类别,就是预测的碰撞类型。
通俗总结:就像你拿一张事故现场照片,让CLIP去"读"5种不同的文字描述(“这是追尾”、“这是正面撞”……),然后问它:“哪个描述最符合这张照片?” CLIP选最像的那个。
五、三个模块的关系
| 模块 | 解决的问题 | 用的技术 | 类比 |
|---|---|---|---|
| 时间定位 | 什么时候撞的? | 帧间差异 + z-score异常检测 | 看录像时突然画面一抖 |
| 空间定位 | 撞在哪儿? | 光流累积 + 加权质心 | 看慢动作,找动静最大的地方 |
| 类型分类 | 怎么撞的? | CLIP图文匹配 | 看图说话,选最像的描述 |
这三个模块是相互独立的:你可以换掉时间检测的方法,不影响定位;也可以换CLIP为其他模型,不影响前两个模块。这种"模块化"设计让系统很灵活。
六、整个流程一句话总结
先看哪一帧画面突变(时间),再在突变前后找哪里动得最厉害(空间),最后用CLIP对比文字描述判断撞法(类型)——全程不需要用真实事故视频训练。
3 实验
3.1 数据集
ACCIDENT @ CVPR 2026 数据集 [Picek et al., 2026] 包含两个划分。开发集(development split)包含 2,211 个由 CARLA 模拟器 [Dosovitskiy et al., 2017] 渲染的合成 CCTV 风格视频,涵盖五种碰撞类别,每个视频均标注了事故时间、碰撞坐标和碰撞类型。图5展示了各类别的分布情况:
表1:碰撞类型分类的提示词模板。每个类别的五条提示词被平均为一个文本嵌入。
| 类型 | 示例提示词 |
|---|---|
| 正面碰撞 | “两辆车从相反方向迎面相撞” |
| 追尾 | “一辆车撞上另一辆车的尾部” |
| 侧面刮擦 | “两辆车并排相互刮擦” |
| 单车事故 | “一辆车撞上墙壁或障碍物” |
| T型碰撞 | “一辆车在一个十字路口撞上另一辆车的侧面” |

图4:2,211 个合成视频中真实事故时间(秒)的分布。大多数事故发生在视频的前 10 秒内。
类别分布如下:追尾碰撞是最频繁的类别(794 个视频),其次是正面碰撞(588)、侧面刮擦(405)、T型碰撞(358)和单车事故(66)。测试集包含 2,027 个从公共交通摄像头采集的真实监控录像。测试视频的分辨率、帧率和光照条件各不相同。压缩伪影、镜头畸变和部分遮挡很常见。参赛者不得手动标注测试集,因此任何在该测试集上运行的方法必须仅依靠从合成域或通用预训练中进行泛化。
所有合成视频均以 1920 × 1080 1920 \times 1080 1920×1080 分辨率渲染,固定帧率为 20 FPS。视频片段时长范围为 5.8 至 32.2 秒(均值 17.7 秒,标准差 3.9 秒)。真实事故时间发生在片段中位数约 6.9 秒处(四分位距 5.2 至 9.8 秒),这使得大多数碰撞发生在每段录像的前半部分(图4)。碰撞坐标归一化到 [ 0 , 1 ] 2 [0, 1]^2 [0,1]2,并聚集在画面中心附近: c x c_x cx 和 c y c_y cy 的均值均在 0.50 附近,标准差分别为 0.13 和 0.18(图6)。
3.2 实现细节
我们在 Kaggle 平台提供的单张 NVIDIA T4 GPU 上运行推理。碰撞分类使用 CLIP [Radford et al., 2021] 的 ViT-B/32 变体。所有视频帧在计算帧间差分和光流时均被缩放至 320 × 180 320 \times 180 320×180。
| 碰撞类型 | 数量 |
|---|---|
| 追尾 | 794 |
| 正面碰撞 | 580 |
| 侧面刮擦 | 400 |
| T型碰撞 | 350 |
| 单车事故 | 60 |

图5:合成开发集中的碰撞类型频率。追尾类别的样本数是单车事故类别的 12 倍。
表2:流水线超参数,对所有测试视频保持不变。
| 组件 | 参数 | 值 |
|---|---|---|
| 时序 | 平滑窗口 w w w | 5 |
| Z-score 阈值 τ \tau τ | 1.5 | |
| 空间 | 起始帧 | 以 t ∗ t^* t∗ 为中心 |
| 上下文窗口 T T T | 30 帧 | |
| 金字塔尺度 | 0.5 | |
| 金字塔层数 | 3 | |
| 窗口大小 | 15 | |
| 光流分位数阈值 | 90% | |
| 分类 | CLIP 主干网络 | ViT-B/32 |
| 峰值区域帧数 | 8 |
光流计算。我们没有在数据集的任何一个划分上训练或微调任何模型权重。处理全部 2,027 个测试视频大约需要 2 小时。
表2列出了整个流水线使用的超参数。我们通过在少量合成视频上进行目视检查来选取这些值,并在所有测试预测中保持固定。
3.3 评分方式
提交结果通过三个量的调和平均数进行评分。时序分量 T \mathcal{T} T 通过高斯核衡量预测事故时间与真实值的接近程度,其中 σ t = 2.0 \sigma_t = 2.0 σt=2.0 秒: T = exp ( − 1 2 ( t p r e d − t g t σ t ) 2 ) \mathcal{T} = \exp(-\frac{1}{2}(\frac{t_{pred} - t_{gt}}{\sigma_t})^2) T=exp(−21(σttpred−tgt)2)。空间分量 S \mathcal{S} S 对归一化 [ 0 , 1 ] [0, 1] [0,1] 空间中预测与真实碰撞坐标之间的欧氏距离应用相同形式的高斯核,其中 σ s = 0.1 \sigma_s = 0.1 σs=0.1。分类分量 C \mathcal{C} C 为 Top-1 准确率:若预测类型与真实值匹配则为 1,否则为 0。最终得分为 H = 3 / ( 1 / T + 1 / S + 1 / C ) \mathcal{H} = 3/(1/\mathcal{T} + 1/\mathcal{S} + 1/\mathcal{C}) H=3/(1/T+1/S+1/C),因此任何一个分量为零都会迫使综合得分归零。
3.4 结果
我们的流水线在真实 CCTV 测试集上取得了 0.2523 的公开榜分数。该分数基于约 25% 的测试数据计算;最终排名使用剩余 75% 的数据,因此排名可能会发生变化。
散点图标题:“碰撞点分布(归一化帧坐标)”。x轴为 “center_x(0=左,1=右)”,y轴为 “center_y(0=上,1=下)”。两轴范围均为 0.0 到 1.0。图中显示密集的点云聚集在 (0.5, 0.5) 附近。左上角图例标识了五种碰撞类型:正面碰撞(蓝色)、追尾(橙色)、侧面刮擦(绿色)、单车事故(红色)和 T型碰撞(紫色)。点在中心附近最密集,并向画面边缘扩散。

图6:2,211 个合成视频的真实碰撞点分布,按碰撞类型着色。点聚集在画面中心附近,其中正面碰撞和侧面刮擦事件的空间分布最广。
在从合成划分中抽取的 10 个视频校准子集上,各分量的平均得分分别为 T ‾ = 0.438 \overline{\mathcal{T}} = 0.438 T=0.438、 S ‾ = 0.168 \overline{\mathcal{S}} = 0.168 S=0.168 和 C ‾ = 0.0 \overline{\mathcal{C}} = 0.0 C=0.0。该校准子集上分类得分为零是预料之中的:全部 10 个校准视频都属于正面碰撞类别,但 CLIP 对每个视频都预测为 T型碰撞。最佳单个时序得分(0.94)和最佳单个空间得分(0.96)表明,当流水线锁定到正确事件时,时间和位置估计都可以相当准确。综合得分降至零是因为调和平均数会惩罚任何一个分量的失败。
图7展示了完整测试集上预测碰撞类型的分布。侧面刮擦是最频繁被预测的类别(2,027 个视频中有 770 个),其次是单车事故(687)、T型碰撞(425)、正面碰撞(122)和追尾(23)。这一分布与合成训练划分(图5)差异显著,在后者中追尾占主导地位。这种差异表明,CLIP 的视觉相似度得分对 CARLA 渲染与真实 CCTV footage 之间的视角和场景几何差异很敏感,而非反映底层的碰撞动力学。
| 预测碰撞类型 | 数量 |
|---|---|
| 侧面刮擦 | 770 |
| 单车事故 | ~680 |
| T型碰撞 | ~420 |
| 正面碰撞 | ~120 |
| 追尾 | ~30 |

图7:在 2,027 个真实测试视频上的预测碰撞类型分布。侧面刮擦和单车事故主导了预测,而追尾很少被选中,这与合成训练分布恰好相反。
误差分析。 三种错误模式主导了该流水线。(1)时序定位失效:当摄像头捕捉到大规模背景运动时,例如摇曳的植被或云影,这些运动产生的帧间差分峰值幅度与实际碰撞相当,导致时序定位出错。(2)空间质心漂移:当多辆车同时在画面中运动时,加权平均值会扩散到所有活跃区域,而非集中在一个聚类上,导致空间定位偏移。真实碰撞分布(图6)聚集在画面中心附近,这在一定程度上解释了为什么即使存在噪声的空间预测也能保持在合理距离内。(3)CLIP 误分类:当 CCTV 视角为俯视或倾斜时,CLIP 容易误判,因为它的训练数据由大致处于眼平高度的互联网照片组成。预测类型分布(图7)表明,CLIP 响应的是一般场景几何线索,而非碰撞特定的视觉特征,这解释了为什么预测结果系统性地从追尾转向了侧面刮擦和单车事故类别。
4 结论
我们描述了一个用于在 CCTV 录像中检测、定位和分类交通事故的模块化零样本流水线,该流水线为 ACCIDENT @ CVPR 2026 竞赛而构建。时序模块通过对帧间差分进行 z-score 峰值检测来隔离碰撞帧。空间模块累积 Farneback 光流,应用 90% 分位数阈值,并将加权质心作为预测的碰撞点返回。分类模块将峰值区域帧的 CLIP 图像嵌入与多提示文本嵌入进行匹配,以选择碰撞类型。该流水线在没有任何领域特定微调的情况下,取得了 0.2523 的公开榜分数。
由于三个模块之间不共享参数,每个模块都可以独立升级。有两个方向似乎最有前景。第一,将 Farneback 光流替换为像 RAFT [Teed and Deng, 2020] 这样的学习式估计器,可以提高低分辨率输入上的位移精度。第二,在合成划分上微调 CLIP 视觉编码器,可能会缩小互联网图像与监控画面之间的域差距,这是目前限制分类性能的主要瓶颈,也是我们在校准分析中识别出的关键问题。

813

被折叠的 条评论
为什么被折叠?



