- 论文 - 《Follow the Rules: Reasoning for Video Anomaly Detection with Large Language Models》
- 代码 - Github
- 关键词 - 无需训练、Prompt 工程、视频异常检测VAD、视觉-语言模型VLM、基于规则推理
1 引言
- 动机
- 现有的 VAD 方法对检测结果缺乏解释性,阻碍了其在现实世界部署中的公众信任。
- 而简单引入 LLM 来执行 VAD 并不理想,因为 LLM 的知识主要面向通用语境,可能与特定现实世界的 VAD 应用场景不符,从而导致其对“异常”的理解与实际所需定义存在偏差。然而,针对每个应用场景微调 LLM 成本高昂。
- 启发:通过提示工程结合“归纳和演绎”两种基本推理形式引导 LLM 适应不同 VAD 场景的需求。
- 本文工作 - AnomalyRuler
- 一种新颖的基于规则推理的 VAD 框架。
- AnomalyRuler 包含两个主要阶段:
- 在归纳阶段,LLM 被输入少量正常样本作为参考,并据此总结出正常模式,从而归纳出一套用于检测异常的规则。
- 在演绎阶段,系统依据所归纳的规则来识别测试视频中的异常帧。
- 此外,作者还设计了一系列增强策略
- 规则聚合:通过随机平滑(randomized smoothing)减少规则归纳中的误差;
- 感知平滑:提出指数多数平滑(Exponential Majority Smoothing)降低感知误差并增强时序一致性;
- 鲁棒推理:通过“复核机制”确保推理输出的可靠性。
- 优点:AnomalyRuler 是首个面向无监督 VAD 任务的推理方法,仅需少量正常样本提示,无需完整训练过程,从而能够快速适应各种 VAD 场景。

2 归纳阶段
归纳阶段的目标:从少量正常参考帧中推导出用于 VAD 的规则集。
归纳阶段的组成如图2上半部分,由三个模块组成:
- 视觉感知模块:利用 VLM ,将少量正常参考帧作为输入,并输出帧的描述。
- 规则生成模块:使用 LLM 基于这些描述生成规则。
- 规则聚合模块:采用投票机制来缓解规则生成过程中的错误。

2.1 视觉感知模块
基本思路:利用 VLM 将视频帧转换为文本描述。
具体流程:
从训练集中随机选取少量正常参考帧 F_{\text{normal}} = \{ f_{\text{normal}_0}, \dots, f_{\text{normal}_n} \} ,该模块输出每个正常参考帧的文本描述:
其中 p_v 是 prompt:“What are people doing? What are in the images other than people?” 。注意这里设计 p_v 将人类和环境分开,以引导模型关注场景中的特定方面,并将任务分解为两个子问题,即人类活动规则和环境对象规则。
2.2 规则生成
基本思路:借助上述 D_{\text{normal}} ,该模块使用冻结的 LLM 生成规则(记为 R )。
具体流程:
形式上, R = \{ \text{LLM}(d_{\text{normal}_i}, p_g) \mid d_{\text{normal}_i} \in D_{\text{normal}} \} ,其中 p_g 是 prompt(详情见附录 A.2)。作者设计了三种策略,指导 LLM 推导规则:
- Normal and Anomaly(正常与异常): p_g 引导 LLM 执行对比推理,首先推导出正常规则,然后,通过将异常与正常规则进行对比,生成异常规则。例如:如果“walking”是正常 rule,则将“non-walking movement”纳入异常 rule。
- Abstract and Concrete(抽象与具体): p_g 帮助 LLM 执行类比推理,从一个抽象概念推广到更具体的例子。例如:如果“walking”是正常 rule,其定义被扩展为“walking,无论是单独还是与他人一起”。而异常规则演变为包括具体的非行走运动,例如“non-walking movement, such as 骑自行车、滑板或滑板车”。
- Human and Environment(人类与环境): p_g 引导 LLM 分别关注环境元素和人类活动。这丰富了 VAD 任务中的规则集,因为在 VAD 中,异常通常源于人类与其环境之间的交互。
2.3 规则聚合
基本思路:使用 LLM 作为聚合器,并采用投票机制,将从 n 个随机选择的正常参考帧独立生成的 n 组规则(即 R )合并为一组鲁棒规则,表示为:
设计目的:缓解先前阶段可能出现的不正确的规则,生成对个体错误更具鲁棒性的规则。
设计灵感:这一策略基于随机平滑(randomized smoothing) 的假设,即错误可能在单个输入上发生,但不太可能在多个随机采样的输入中持续出现。
3 演绎阶段
演绎阶段的目标:精确感知视频中的每一帧,并基于规则使用 LLM 推理该帧是否正常或异常。
演绎阶段的组成如图2下半部分,由三个模块组成:
- 视觉感知模块:与归纳阶段类似,但是它的处理对象变成了测试视频的连续提取帧,并输出一系列帧描述 D = \{d_0, d_1, \dots, d_t\} 。
- 感知平滑模块:通过提出的 指数多数平滑(Exponential Majority Smoothing) 减少错误,此时提供了初步的检测结果。
- 鲁棒推理模块:利用 LLM 对初步检测结果进行复查,并根据规则进行推理。

3.1 感知平滑
动机:视觉感知错误同样可能发生在归纳阶段。
基本思路:提出了一种名为 指数多数平滑 的新机制。该机制通过考虑视频中的时间一致性(即运动是连续的,应随着时间表现出一致的模式),缓解感知错误。将这种平滑的结果用于指导帧描述的修正,从而增强 AnomalyRuler 对错误的鲁棒性。
以下是四个关键步骤:
step 1:初始异常匹配
思路:测试视频描述和异常规则之间的关键词匹配。
对于连续帧描述 D = \{d_0, d_1, \dots, d_t\} ,AnomalyRuler 首先匹配异常规则中找到的异常关键词 K (详见论文附录),并为每一帧分类标签 y_i ,表示预测标签(只要存在异常关键词就认为是异常帧 y_i=1)。得到初始匹配预测 Y = \{y_0, y_1, \dots, y_t\} 。
step 2:指数多数平滑
目的:通过调整预测结果来反映指定窗口内的最常见状态,从而增强人类或物体运动的连续性。
基本思路:提出了一种结合指数移动平均(EMA)和Majority Vote的方法。
具体步骤如下:
-
EMA。对于原始预测 y_t ,计算指数移动平均值 s_t ,公式为: s_t = \frac{\sum_{i=0}^t (1-\alpha)^{t-i} y_i}{\sum_{i=0}^t (1-\alpha)^i}. 其中, \alpha 是影响 EMA 计算中数据点权重的参数。
-
Majority Vote。在每个 EMA 值 s_i 中心的窗口内应用多数投票,窗口大小为 p 。这意味着对于每个 s_i ,考虑其窗口内的邻近 EMA 值,并根据这些值超过或低于阈值 \tau 的多数情况确定平滑后的预测 \hat{y}_i 。定义该阈值为所有 EMA 值的均值:\tau = \frac{1}{t} \sum_{i=1}^t s_i 。形式上,平滑后的预测 \hat{y}_i 由以下公式决定:
\hat{y}_i = \begin{cases} 1 & \text{if } \sum_{j=\max(1,i-p)}^{\min(i+p,t)} \mathbb{1}(s_j > \tau) > \frac{\min(i+p,t)-\max(1,i-p)+1}{2} \\ 0 & \text{otherwise} \end{cases} \tag{1}其中, \mathbb{1}(\cdot) 表示指示函数。
最终平滑后的预测结果表示为 \hat{Y} = \{\hat{y}_0, \hat{y}_1, \dots, \hat{y}_t\} ,其中每个 \hat{y}_i 为 1 或 0。
step 3:异常分数
基本思路:通过二次指数移动平均进一步计算异常分数。
具体而言,异常分数表示为 A = \{a_0, a_1, \dots, a_t\} ,其中 a_t 的计算公式如下:
作者将上述过程称为 AnomalyRuler-base,作为一个基线方法,该基线的异常分数与当前 SOTA 方法相当。它提供了一个“哑元答案”(dummy answer),即如果 \hat{y}_i=1 则标记为“异常”,否则标记为“正常”。
step 4:描述修改
在这一步骤中,AnomalyRuler 比较 Y 和 \hat{Y} ,并输出修改后的描述 \hat{D} 。
- 如果 y_i = 0 而 \hat{y}_i = 1 ,表明感知模块存在假阴性错误,则 AnomalyRuler 通过在 d_i 中添加“There is a person {k}”来修正描述,其中 k \in K 是窗口大小 w 内最频繁出现的异常关键词。
- 如果 y_i = 1 而 \hat{y}_i = 0 ,表明感知模块存在假阳性错误,则 AnomalyRuler 通过移除描述中包含异常关键词 k 的部分来修正 d_i 。
3.2 鲁棒推理
基本思路:AnomalyRuler 利用 LLM 完成 VAD 的推理任务。
输入:归纳阶段推导出的鲁棒规则 R_{\text{robust}} 作为上下文。LLM 接收每帧的修改后描述 \hat{d}_i ,以及由 AnomalyRuler-base 生成的“哑元答案”\hat{y}_i。
输出: Y^* = \{\text{LLM}(\hat{d}_i, \hat{y}_i, R_{\text{robust}}, p_r) \mid \hat{d}_i \in \hat{D}, \hat{y}_i \in \hat{Y}\} 。
这一验证步骤并非直接要求 LLM 分析 \hat{d}_i ,而是通过使用“哑元答案”作为提示来改进决策过程。这种方法帮助 AnomalyRuler 减少漏检(假阴性)现象,并确保其推理更加符合规则。
此外,为了将 AnomalyRuler 与基于阈值化异常分数的最新方法进行比较,作者应用公式 (2),将 \hat{y}_i 替换为 y_i^* \in Y^* ,从而输出异常分数。
4 实现
实验部分略,只介绍一下实现细节。
- 视觉感知模块(VLM):CogVLM-17B
- 归纳阶段(LLM):GPT-4-1106-Preview
- 演绎阶段(LLM):开源模型 Mistral-7B-Instruct-v0.2
实验部分的数据集:UCSD Ped2、CUHK Avenue、ShanghaiTech、UBnormal