AnyAnomaly: 基于大型视觉语言模型的零样本可定制视频异常检测

文章目录

  • 速览
  • 摘要
  • 1. 引言
  • 2. 相关工作
    • 视频异常检测
    • 大型视觉语言模型(LVLMs)
  • 3. 方法
    • 3.1. 总览
    • 3.2. 关键帧选择模块
    • 3.3. 上下文生成
      • 基于 WinCLIP 的注意力机制
      • 网格图像生成
    • 3.4. 异常检测
      • 提示词设计
      • 异常评分
  • 4. 实验
    • 4.1. 数据集
    • 4.2. 评估标准
    • 4.3. 结果
    • 4.4. 定性分析
    • 4.5. 消融研究
      • 片段长度与 FPS
      • 关键帧选择
      • 窗口大小
    • 4.6. 与 SOTA 方法的对比
    • 4.7. 泛化性能对比
  • 5. 结论
  • 附录
    • A.实验细节
      • A.1. 数据集详情
        • VAD 数据集
        • C-VAD 数据集
      • A.2. 实现细节
      • A.3. 提示词详情
    • B. 附加定量评估
      • B.1. 超参数调优
      • B.2. 不同 LVLM 的比较
    • C. 附加定性评估
      • C.1. 上下文互补性
      • C.2. 多场景下的异常检测
      • C.3. 复杂场景下的异常检测
    • D. 局限性

AnyAnomaly: Zero-Shot Customizable Video Anomaly Detection with LVLM
延世大学,首尔,韩国
arxiv’25

速览

动机
现有的 VAD 模型依赖于学习到的正常模式,这使得它们难以适用于多样化的环境

方法
提出了一种可定制视频异常检测(Customizable Video Anomaly Detection, C-VAD)技术以及 AnyAnomaly 模型。C-VAD 将用户定义的文本视为异常事件,并检测视频中包含指定事件的帧。同时构建了C-VAD数据集,这个数据集是ShanghaiTech和Avenue的变种。
关键帧选择模块:使用图像和文本的相似度选出关键帧,然后将整个片段划分为4组,从每组内选择与关键帧序号相同的帧
上下文生成:①基于WinCLIP的注意力机制,将图像切分为多个窗口,然后每个窗口与文本计算相似度,根据相似度来mask无关的;②网格图像生成,将每帧切成网格,然后将每帧对应的网格的同一位置进行拼接。注意:两种上下文的切分都有小中大三种尺度。
异常检测:设计了一个提示词,包括任务考虑因素和输出。时间上下文我是以行 1 列 1 → 行 1 列 2 → 行 2 列 1 → 行 2 列 2形式给出的。

实验
在ShanghaiTech、Avenue和UBnormal数据集上进行实验,并且还对自己的C-VAD数据集也跑了一下。评估指标使用的是微平均受试者工作特征曲线(micro-averaged area under the receiver operating characteristic curve, micro AUROC).

摘要

视频异常检测(Video Anomaly Detection, VAD)在计算机视觉中的视频分析和监控领域至关重要。然而,现有的 VAD 模型依赖于学习到的正常模式,这使得它们难以适用于多样化的环境。因此,用户需要针对新的环境重新训练模型或开发独立的 AI 模型,而这需要机器学习专业知识、高性能硬件以及大量数据收集,限制了 VAD 在实际应用中的可用性。

为了解决这些挑战,本研究提出了一种可定制视频异常检测(Customizable Video Anomaly Detection, C-VAD)技术以及 AnyAnomaly 模型。C-VAD 将用户定义的文本视为异常事件,并检测视频中包含指定事件的帧。我们采用了一种基于上下文感知的视觉问答(Visual Question Answering, VQA)方法来实现 AnyAnomaly,而无需对大型视觉语言模型进行微调

为了验证所提出模型的有效性,我们构建了 C-VAD 数据集,并证明了 AnyAnomaly 的优越性。此外,我们的方法在 VAD 基准数据集上表现出竞争力,在 UBnormal 数据集上取得了最先进(state-of-the-art, SOTA)的检测效果,并在所有数据集上展现了优越的泛化能力,优于其他方法。

我们的代码可在 GitHub 获取。

1. 引言

视频异常检测(Video Anomaly Detection, VAD)的目标是在视频流中检测异常事件。异常事件包括对象执行与环境不符的动作(例如翻越围栏)或具有异常外观的对象(例如在人行道上的自行车)。然而,异常事件通常罕见且多样化,使得构建大规模的 VAD 数据集变得困难。因此,VAD 被认为是一个极具挑战性的问题。

为了解决这些限制,先前的研究主要采用单类分类(One-Class Classification, OCC)方法,该方法仅从正常数据中学习。在 OCC 方法中,模型学习正常模式,并将偏离这些模式的情况分类为异常。典型的基于 OCC 的 VAD 方法包括分类方法 [14, 27, 35],距离度量方法 [2, 24, 26],以及预测方法 [10, 15, 33],所有这些方法都在 VAD 任务中表现出色。

在这里插入图片描述

然而,由于正常和异常类别的定义可能因环境而异,OCC 方法无法始终保证泛化性能。例如,如图 1 左侧所示,在校园环境中训练的模型会学习“人”的特征作为正常模式,并将“汽车”归类为异常。然而,当该模型应用于道路环境时,仍然会将“汽车”检测为异常,从而增加误报数量。因此,OCC 方法需要为每个新环境重新训练正常模式,这需要额外的成本,例如数据收集、专家干预和高性能设备。由于这些限制,将 VAD 模型应用于现实世界场景仍然面临挑战。

为了解决这一问题,我们提出了一种新的技术,称为可定制视频异常检测(Customizable Video Anomaly Detection, C-VAD)。C-VAD 将用户定义的文本视为异常事件,并检测视频中包含这些事件的帧。例如,在校园视频中,“汽车”可以被设定为异常事件,而在道路视频中,“行人”可以被设定为异常事件。

与现有的 VAD 模型不同,后者基于学习到的正常模式来判断异常,C-VAD 根据提供的文本动态检测异常模式。这意味着,随着视觉文本分析的泛化能力提升,异常检测在各种环境中的有效性也会提高。因此,我们引入了一种具备零样本检测能力的 C-VAD 方法(如图 1 右侧所示),并提出了 AnyAnomaly 模型,该模型可以在各种环境中进行 VAD,而无需额外训练。

实现零样本 C-VAD 的有效方法是利用大型视觉语言模型(Large Vision Language Models, LVLMs)。近年来,LVLMs 在视觉文本分析方面表现出卓越的泛化能力。通过利用这一能力,C-VAD 可以在各种环境下高效运行。最直观的方法是在每一帧上执行视觉问答(Visual Question Answering, VQA)以估算异常分数。例如,可以向模型提供以下提示词(prompt):

“返回一个介于 0(否)到 1(是)之间的数值,指示输入图像与用户提供的文本的匹配程度。”

这一方法被用作基线模型。然而,通过实验,我们观察到基线模型存在以下局限性

  1. 由于 LVLMs 的计算开销较大,推理延迟较高。
  2. 由于监控视频的特性(如前景-背景不平衡和目标拥挤),难以分析特定目标。
  3. 由于无法利用时间信息,难以检测涉及动作的异常事件。

为了解决这些局限性,我们设计了 AnyAnomaly 模型,其结构如图 2 所示。

首先,为了降低延迟,我们采用了基于片段(segment-level)的处理方法,将连续的帧分组为一个片段进行处理。为此,我们引入了关键帧选择模块(Key Frames Selection Module, KSM),用于选择代表该片段的关键帧,并在片段级别执行 VQA。

其次,我们不仅仅进行简单的图像-文本匹配,而是引入了基于上下文感知的 VQA 方法,以实现对场景的更深入理解。为此,我们额外利用了两种信息:位置上下文(Position Context, P C PC PC)和时间上下文(Temporal Context, T C TC TC)。其中, P C PC PC 通过强调帧中的重要位置,提高 LVLM 对目标的分析能力; T C TC TC 通过将场景的时间变化结构化为网格格式,从而增强 LVLM 的动作分析能力。

值得注意的是,所提出的 KSM 和上下文生成模块均无需训练,即可运行,使得 C-VAD 的应用更加便捷,无需额外的数据训练。

为了评估 C-VAD 的性能,我们基于异常类型对现有的 VAD 基准数据集进行了分类,以构建 C-VAD 数据集。通过这一过程,我们证明了 AnyAnomaly 的优越性。

尽管 AnyAnomaly 是一种零样本方法,但在 VAD 数据集上表现出与传统基于 OCC 的 VAD 模型相比更具竞争力的性能。它在 UBnormal 数据集上达到了最先进(state-of-the-art, SOTA)的检测效果,并在所有数据集上展现了卓越的泛化能力。所提出的方法有望成为在现实世界中部署 VAD 技术的有效解决方案。

本研究的贡献如下:

  • 我们提出了 C-VAD 技术,以实现多种环境下的异常检测。据我们所知,这是首个基于用户定义异常进行 VAD 的方法。
  • 我们开发了 AnyAnomaly 模型,该模型通过上下文感知 VQA 来有效执行 C-VAD。
  • 为了评估 C-VAD 的性能,我们构建了新的 C-VAD 数据集,并通过实验验证了 AnyAnomaly 的优越性。
  • AnyAnomaly 在 UBnormal 数据集上达到了 SOTA 性能,并在所有数据集上展现出优越的泛化能力,优于其他方法。

250309:可以学习一个写作思路:先说挑战 —》然后引出目前什么方法可以解决这些挑战(也就是你想要diss的范式) ——》再说这些方法的不足 ——》然后引出自己的方法。

引入自己方法这里可以:先说最直观的做法是。。。——》这一方法用作我们的baseline ——》但是我们观察到这个做法有局限性 ——》为了解决这些局限性,我们提出。。。

2. 相关工作

视频异常检测

大多数 VAD 模型采用单类分类(One-Class Classification, OCC)方法,通过学习正常模式来检测异常。其中,基于预测的方法通过训练模型来预测未来或过去的帧,假设异常帧的预测误差更大。例如,Liu [15] 提出了一种方法,利用 FlowNet [11] 和 GANs [20] 来预测第 t + 1 t+1 t+1 帧,给定 t t t 帧的输入。Yang [33] 提出了一种方法,从 t t t 帧输入中选择关键帧,以预测整个序列。

然而,由于正常模式和异常模式的定义可能因环境而异,依赖于学习正常模式的 OCC 方法在泛化性能上存在局限性。为了解决这一问题,近期研究探索了跨域视频异常检测(Cross-Domain VAD, xVAD)。其中,zxVAD [3] 通过在辅助数据集中使用 CutMix 技术合成异常模式,提高了模型对新环境的适应性。

然而,这些方法依赖于固定的数据变换,使其难以全面捕捉现实场景中可能出现的多样化异常模式。因此,我们提出了一种新的 VAD 方法,利用文本信息来动态检测不同环境下变化的异常模式。

250309:相关工作这里只提了单类和跨域,并没有提及弱监督的方法,难道说自己想要diss哪类方法,就只需要说哪一类吗?

大型视觉语言模型(LVLMs)

大型语言模型(Large Language Models, LLMs)最初主要用于自然语言处理(NLP);然而,近年来,它们已被应用于多模态任务,例如图像字幕生成和视觉问答(VQA)。例如,MiniGPT-4 [38] 通过将预训练的视觉编码器连接到 Vicuna [7] 模型,并通过线性层进行融合,以处理多模态输入。

最近的 LVLMs 采用了新颖的视觉编码技术,以更好地理解图像。Chat-UniVi [13] 通过为图像生成动态标记(tokens),减少冗余信息,并有效提取关键视觉特征。该模型能够在不同分辨率下应用动态标记,从而实现灵活的分析。MiniCPM-V [34] 根据图像分辨率应用最佳分区技术,并为每个图像片段生成优化的标记,从而提高内存效率。

然而,尽管 LVLMs 取得了重大进展,但它们通常是为通用任务而训练的,因此直接应用于 VAD 仍然具有挑战性。为了有效处理 VAD 任务,必须考虑监控视频的特性,并利用时间信息。因此,我们提出了一种无需训练的方法,以最小化 LVLMs 与 VAD 任务之间的领域差距。

3. 方法

在这里插入图片描述

3.1. 总览

图 2 展示了 AnyAnomaly 模型的结构,该模型执行基于上下文感知的视觉问答(VQA)。输入为一个视频片段 S = { s 0 , … , s N − 1 } S = \{s_0, \dots, s_{N-1}\} S={s0,,sN1},其中包含 N N N 帧,且 N N N 是 4 的倍数。关键帧选择模块(Key Frame Selection Module, KSM)从 S S S 中选取关键帧 K = { k 0 , … , k 3 } K = \{k_0, \dots, k_3\} K={k0,,k3}。在选定的关键帧中,代表性帧 k ^ \hat{k} k^ 用于生成位置上下文(Position Context, P C PC PC),而 K K K 用于创建时间上下文(Temporal Context, T C TC TC)。

随后, k ^ \hat{k} k^ P C PC PC T C TC TC 作为 LVLM 的图像输入,而用户提供的文本 X X X 与提示词(prompt)结合后作为文本输入。最后,LVLM 的响应结果被整合,以计算异常分数。

250311:这个画图可以学习一下,他其实用了3次LVLM,但是乍一看好像就用了1次,完美的避开了“调用次数多”这个缺陷。

3.2. 关键帧选择模块

在这里插入图片描述

图 3a 展示了关键帧选择模块(Key Frames Selection Module, KSM),这是片段级方法的关键组成部分。为此,我们从片段中选择四个代表性的帧作为 K K K,并利用 CLIP [22] 模型,该模型经过训练以匹配图像和文本。

具体而言, S S S X X X 分别作为输入提供给图像编码器 E I E_I EI 和文本编码器 E T E_T ET,相似性通过 N N N 个图像和文本嵌入的点积计算。具有最高相似性的帧被选为代表性帧 k ^ \hat{k} k^

k ^ = arg ⁡ max ⁡ s i ∈ S ( E I ( s i ) ⋅ E T ( X ) ) (1) \hat{k} = \arg\max_{s_i \in S} (E_I(s_i) \cdot E_T(X)) \tag{1} k^=argsiSmax(EI(si)ET(X))(1)

代表性帧 k ^ \hat{k} k^ 的索引 i ^ \hat{i} i^ 被用于选择其他关键帧。我们将片段划分为四个大小相等的组,并从每个组中选择 i ^ m o d N 4 \hat{i} \mod \frac{N}{4} i^mod4N 位置的帧。例如,当 N = 8 N = 8 N=8 i ^ = 4 \hat{i} = 4 i^=4 时,每个组中选择第 0 帧,最终集合为 K = { s 0 , s 2 , s 4 , s 6 } K = \{s_0, s_2, s_4, s_6\} K={s0,s2,s4,s6}。这一过程定义如下:

k i = s x , x = ( i × N 4 ) + ( i ^ m o d N 4 ) (2) k_i = s_x, \quad x = \left(i \times \frac{N}{4} \right) + \left(\hat{i} \mod \frac{N}{4} \right) \tag{2} ki=sx,x=(i×4N)+(i^mod4N)(2)

利用 KSM, K K K 在生成时同时考虑了文本对齐和时间均匀性,从而实现了有效的上下文生成。关键帧选择方法的对比分析将在 4.5 节中详细讨论。

250309:不是吧,就算个相似性就是选择关键帧了?是不是有点太简单了。。。

3.3. 上下文生成

P C PC PC T C TC TC 是基于上下文感知的 VQA 的关键要素,它们作为补充输入图像的附加信息。其中, P C PC PC 通过 WinCLIP 注意力(WinCLIP-based Attention, WA)提升 LVLM 对目标的分析能力,而 T C TC TC 通过网格图像生成(Grid Image Generation, GIG)增强 LVLM 对动作的分析能力。

基于 WinCLIP 的注意力机制

图 3b 展示了 WA 方法。我们基于 WinCLIP(由 Jeong [12] 提出)强调 k ^ \hat{k} k^ 处与 X X X 相关的区域。首先, k ^ \hat{k} k^ 被划分为多个窗口,并使用 E I E_I EI 计算每个窗口的独立嵌入。例如,当图像尺寸为 240 × 240 240 \times 240 240×240 时,它被划分为 25 25 25 48 × 48 48 \times 48 48×48 的窗口,每个窗口的嵌入被收集,以形成小尺度窗口嵌入图 W s ∈ R 25 × D W^s \in \mathbb{R}^{25 \times D} WsR25×D

通过调整窗口大小,还会生成中尺度窗口嵌入图 W m W^m Wm 和大尺度窗口嵌入图 W l W^l Wl,并计算这些嵌入图与文本嵌入 z ∈ R D z \in \mathbb{R}^{D} zRD 之间的相似性

最终的相似度图 M M M 由三个尺度上的相似度平均计算得到:

M = 1 3 ( z ( W s ) T + z ( W m ) T + z ( W l ) T ) (3) M = \frac{1}{3} \left( z (W^s)^T + z (W^m)^T + z (W^l)^T \right) \tag{3} M=31(z(Ws)T+z(Wm)T+z(Wl)T)(3)

我们将 Jeong [12] 提出的模板与 X X X 结合,并通过 E T E_T ET 生成 z z z。最终,我们将 M M M k ^ \hat{k} k^ 相乘,以生成 P C PC PC

P C = f norm ( M ) ⊙ k ^ (4) PC = f_{\text{norm}}(M) \odot \hat{k} \tag{4} PC=fnorm(M)k^(4)

其中, f norm f_{\text{norm}} fnorm 表示最小-最大归一化(min-max normalization), ⊙ \odot 表示逐元素(element-wise)乘法。在计算 M M M 之后,对其进行插值和重塑,以匹配 k ^ \hat{k} k^ 的分辨率。

由于 P C PC PC 通过整合多个尺度上的相似度生成,因此对目标的大小和位置具有较强的鲁棒性,并且在包含多个目标的情况下仍能有效运行

250309:这种注意力没见过,好像有点东西。

网格图像生成

图 3c 展示了网格图像生成(Grid Image Generation, GIG)方法,该方法包含两个阶段。在多尺度网格生成阶段, K K K 被用于在不同尺度上创建网格图像。类似于 WA 方法的过程, K K K 的每一帧被划分为多个窗口,并且位于相同位置的窗口以 2 × 2 2 \times 2 2×2 的网格格式连接,以生成单个网格图像。该过程定义如下:

g i = [ u 0 i u 1 i u 2 i u 3 i ] (5) g^i = \begin{bmatrix} u_0^i & u_1^i \\ u_2^i & u_3^i \end{bmatrix} \tag{5} gi=[u0iu2iu1iu3i](5)

其中, u j i u_j^i uji 表示从 k j k_j kj 生成的第 i i i 个窗口, g i g^i gi 表示第 i i i 个网格图像。我们定义了使用小、中、大尺度窗口生成的网格图像集合分别为 G s G^s Gs G m G^m Gm G l G^l Gl

在网格图像选择阶段,先前创建的集合被合并以生成 G a l l G^{all} Gall。然后,使用与 KSM 选择 k ^ \hat{k} k^ 相同的方法,从 G a l l G^{all} Gall 中选取与文本相似度最高的网格图像,以生成 T C TC TC

G a l l = G s ∪ G m ∪ G l (6) G^{all} = G^s \cup G^m \cup G^l \tag{6} Gall=GsGmGl(6)

T C = arg ⁡ max ⁡ g i ∈ G a l l ( E I ( g i ) ⋅ E T ( X ) ) (7) TC = \arg\max_{g^i \in G^{all}} \left( E_I(g^i) \cdot E_T(X) \right) \tag{7} TC=arggiGallmax(EI(gi)ET(X))(7)

通过此过程生成的 T C TC TC 反映了在相同背景下的目标运动情况,使其在动作分析方面具有优势,并且对不同目标尺寸具有较强的鲁棒性。有关 WA 和 GIG 中使用的窗口大小的分析将在 4.5 节中讨论。

250309:这里就是把4个关键帧先划分为网格,假如说是中尺度2x2:4帧的 左上拼成一个网格、右上拼成一个网格、左下拼成一个网格、右下拼成一个网格,其他尺度的也类似,然后用每个网格和文本计算相似度,最相似的那个就是TC。

3.4. 异常检测

我们没有对 LVLM 进行微调,而是提出了一种新的提示词(prompt)和上下文机制,以执行基于上下文感知的 VQA。VQA 结果被用作异常分数,从而实现无需训练的零样本异常检测。

提示词设计

在这里插入图片描述

详细提示词(Detailed prompt)
任务(Task): 评估给定图像中是否包含 {text},评分范围从 0 到 1。得分 1 表示 {text} 在图像中清晰可见,而得分 0 表示 {text} 完全不存在。对于中间情况,根据 {text} 的可见程度赋值介于 0 到 1 之间的分数。
考虑因素(Consideration): 关键在于 {text} 是否出现在图像中,而不是其是否是主要焦点。因此,如果 {text} 存在,即使它不是图像的主要关注点,也应赋予较高的得分,例如 1.0。
输出(Output): 以浮点数的形式提供得分,保留一位小数,并在一条简短的句子中说明得分的原因。

时间上下文提示词(Prompt for temporal context)
上下文(Context): 给定的图像表示一个序列(行 1 列 1 → 行 1 列 2 → 行 2 列 1 → 行 2 列 2),以此展示时间上的变化过程。

图 4 展示了所提出的提示词 P P P。提示词由三个主要部分组成:“任务(task)”、“考量因素(consideration)”和“输出(output)”。首先,“任务”定义了 LVLM 需要执行的操作,具体来说是评估 X X X 是否存在于图像中。其次,“考量因素”指定了评估过程中需要考虑的因素,而“输出”定义了评估结果的呈现格式。

为了利用链式思维(chain-of-thought, CoT)效应 [30],我们引导模型在返回异常分数时提供简要推理,并将分数四舍五入至小数点后一位。当使用 T C TC TC 进行 VQA 时,提示词中会在“任务”和“考量因素”之间插入额外的“上下文(context)”元素,以向 LVLM 传达 T C TC TC 的行列含义。

我们将修改后的提示词定义为 P ∗ P^* P。有关不同提示词的对比分析将在补充材料中提供。

异常评分

上下文信息作为图像的补充信息。然而,由于 LVLM 仅接受单张图像作为输入,同时利用原始信息和附加信息存在挑战。为了解决这一问题,我们采用了后期融合(late fusion)方法。具体而言, k ^ \hat{k} k^ P C PC PC T C TC TC 被用作 LVLM 的图像输入。LVLM 为每个输入返回一个异常分数,这三个分数被组合以计算最终的异常评分 a s c o r e ascore ascore

a s c o r e = γ 1 ⋅ Φ LVLM ( k ^ , P ) + γ 2 ⋅ Φ LVLM ( P C , P ) + γ 3 ⋅ Φ LVLM ( T C , P ∗ ) (8) ascore = \gamma_1 \cdot \Phi_{\text{LVLM}}(\hat{k}, P) + \gamma_2 \cdot \Phi_{\text{LVLM}}(PC, P) + \gamma_3 \cdot \Phi_{\text{LVLM}}(TC, P^*) \tag{8} ascore=γ1ΦLVLM(k^,P)+γ2ΦLVLM(PC,P)+γ3ΦLVLM(TC,P)(8)

其中, γ \gamma γ 是超参数,用于调整上下文信息在 a s c o r e ascore ascore 中的占比。基于超参数调整的性能对比实验将在补充材料中提供。

因此,即使异常帧 k ^ \hat{k} k^ 的评分较低,如果附加信息 P C PC PC T C TC TC 具有较高的评分,最终的异常评分仍然会较高。这使得异常检测更加准确。

250309:不对劲吧,LVLM是可以多帧的。

4. 实验

4.1. 数据集

在这里插入图片描述

图 5 展示了 VAD 和所提出的 C-VAD 数据集的组成。在传统的 VAD 数据集中,视频并未按照异常类别进行分类。相比之下,C-VAD 数据集根据异常事件类型进行组织,视频根据是否包含特定异常被分类为正样本或负样本。这种分类方式能够精确评估针对特定类型异常(例如自行车)的检测性能。

在本研究中,我们在三个 VAD 数据集上验证了所提出方法的有效性,包括 CUHK Avenue (Ave) [16]、ShanghaiTech Campus (ShT) [18] 和 UBnormal (UB) [1],以及两个 C-VAD 数据集:Customizable-ShT (C-ShT) 和 Customizable-Ave (C-Ave)。数据集的更多细节可在补充材料中找到。

4.2. 评估标准

为了与先前的 VAD 研究保持一致,我们使用微平均受试者工作特征曲线(micro-averaged area under the receiver operating characteristic curve, micro AUROC)指标来评估所提出模型的性能。具体而言,数据集中所有帧的异常评分被汇总,并通过逐步调整异常评分的阈值来计算最终的评估结果

4.3. 结果

表 1 和表 2 展示了 C-VAD 数据集上的评估结果。如第 1 节所述,基线方法在帧级别执行 VQA 以计算异常分数。相比基线方法,所提出的模型在 C-ShT 和 C-Ave 数据集上的性能分别提升了 9.88% 和 13.65%。具体而言,在动作类别上分别提升了 14.34% 和 8.2%,在外观类别上分别提升了 3.25% 和 21.98%。

当仅将 KSM 应用于基线方法时,执行时间随着片段长度的增加而减少,而整体性能与基线方法相似。这是因为 CLIP 能够有效地为每个片段选择代表性帧,从而弥补时间信息的损失。然而,由于 CLIP 无法充分捕获精细的时空细节,因此在某些类别上的性能明显下降

因此,我们通过所提出的上下文信息来解决这些问题。首先,使用 P C PC PC 使得相比 KSM,性能分别提升了 5.64% 和 3.62%,这是因为 LVLM 更关注与 X X X 相关的目标分析。此外,应用 T C TC TC 后,性能相比 KSM 分别提升了 8.38% 和 14.43%,尤其是在动作类别中表现出显著的提升。这表明,利用网格图像提供的时间信息对于动作分析至关重要。

在这里插入图片描述

4.4. 定性分析

为了分析基于上下文感知的 VQA 的影响,我们在图 6 中展示了异常评分和输入帧的可视化结果。

当未应用 P C PC PC 时,自行车目标在画面中比其他目标更小,导致检测性能下降。一旦应用 P C PC PC,自行车区域得到增强,从而提升了 LVLM 的目标识别能力。同样地,若未使用 T C TC TC,模型会将“打斗”误判为“站立”,导致较低的检测性能。而通过 T C TC TC 提供时间信息,能够提升 LVLM 的动作识别能力。

这些结果表明,基于上下文感知的 VQA 比传统 VQA 更加有效。
在这里插入图片描述

4.5. 消融研究

片段长度与 FPS

表 3 展示了不同片段长度下的性能对比及帧率(FPS)。基线方法的片段长度设定为 1。实验结果表明,在片段级别计算异常分数相比基于单帧的方法表现更优。

当片段长度设定为 24 时,AUC 最高,在 C-ShT 和 C-Ave 数据集上分别达到 85.72% 和 90.27%。然而,过长的片段长度会将无关信息引入时间上下文,从而导致准确率下降。此外,在片段级别执行 VAD,相比基线方法,FPS 提高了 594%。
在这里插入图片描述

关键帧选择

我们从时间均匀性(temporal uniformity)和文本对齐(text alignment)两个角度对关键帧选择方法进行了消融研究。随机方法不考虑这两个因素,而基于 CLIP 的方法仅考虑文本对齐。使用 CLIP 选择关键帧后进行分组可以保证文本对齐,但无法确保时间均匀性。而在 CLIP 之后进行分组,可以使关键帧均匀分布,从而同时考虑时间均匀性和文本对齐。

如表 4 所示,同时结合这两个因素可在 C-VAD 任务中取得最佳性能,突出了时间均匀性在动作识别中的关键作用。此外,未利用上下文信息的 RD* 和 CP* 方法,其性能比随机方法更差,而随机方法本身并不考虑时间均匀性和文本对齐。这进一步说明了利用上下文信息的重要性。
在这里插入图片描述

250311:Gr.—>CP这里没看懂什么意思,是先分组再使用CLIP选择每个组内的关键帧吗?

窗口大小

表 5 展示了在 P C PC PC T C TC TC 任务中使用不同窗口大小的实验结果。在动作类别中,C-ShT 数据集上的最佳性能出现在大窗口尺寸,而 C-Ave 数据集上的最佳性能出现在中等窗口尺寸。这表明,中等或大窗口尺寸更适合捕捉时间运动信息以及多个目标之间的交互。

在外观类别中,C-ShT 数据集的最佳性能出现在小窗口尺寸,而 C-Ave 数据集的最佳性能出现在中等窗口尺寸。这表明,合适的窗口尺寸取决于数据集中的目标大小差异。

为了提升模型的泛化性能,我们采用了一种结合所有三种窗口大小的方法,实验结果表明,这种方法能获得最佳的整体性能。
在这里插入图片描述

4.6. 与 SOTA 方法的对比

为了评估 AnyAnomaly 在处理多个文本输入方面的有效性,我们在 VAD 基准数据集上进行了实验。对于性能评估,数据集中的每个异常类别都被视为 X X X,并将所有计算出的分数中最大的异常分数分配给相应的片段。表 6 展示了与基于帧的 VAD 方法的性能对比。

尽管 AnyAnomaly 并未在 VAD 数据集上进行训练,但其性能与 SOTA 方法相当。值得注意的是,它在 UB 数据集上达到了新的 SOTA 性能,AUROC 为 74.5%,并在 ShT 数据集上取得了第二好的性能,AUROC 为 79.7%。这些结果强调了所提出模型的有效性,该模型利用了 LVLM 和基于上下文感知的 VQA,在无需完全监督的情况下达到了与全监督方法相当的性能。
在这里插入图片描述

4.7. 泛化性能对比

表 7 对 AnyAnomaly 的泛化性能进行了比较。尽管 STEAL-Net [5] 和 Jigsaw [29] 在同域测试中表现出较高的准确率,但在跨域环境下,其性能显著下降。具体而言,在 Ave 数据集上,STEAL-Net 和 Jigsaw 的性能分别从 87.1% 下降至 54.3%,以及从 92.2% 下降至 62.9%。类似地,在 ShT 数据集上,它们的性能分别从 73.7% 下降至 51.7%,以及从 84.3% 下降至 59.3%。这表明,现有的基于 OCC 的 VAD 模型容易过拟合训练数据,因此在新环境中的检测效果较差

例如,在 Ave 数据集中,被摄目标靠近相机(“Too close”)被视为异常,而在 ShT 数据集中则被认为是正常情况。因此,在 ShT 数据集上训练的 OCC 方法难以检测此类异常。

相比之下,专为 xVAD 设计的零样本(zero-shot)和少样本(few-shot)VAD 模型比 OCC 模型表现出更好的泛化能力。然而,少样本模型高度依赖 K-shot 样本的数量,而零样本模型通常需要辅助数据集。无需训练的方法(如 ZS-CLIP 和 ZS-ImageBind)利用强大的图像理解能力,在某些 VAD 任务上优于传统模型。然而,它们的性能仍然受到领域差异的限制。

相比之下,AnyAnomaly 通过引入上下文信息有效克服了领域差距,实现了更优的性能。
在这里插入图片描述

5. 结论

我们提出了 AnyAnomaly,一种利用 LVLM 进行通用 VAD 的新方法。AnyAnomaly 通过结合片段级方法和基于上下文感知的 VQA,有效执行 C-VAD 任务。该设计在处理大规模视频时降低了延迟,并最小化了 LVLM 与 VAD 任务之间的领域差距。

尽管 AnyAnomaly 是一种零样本(zero-shot)方法,但在基准数据集上表现出竞争力,并在实际 VAD 任务中展现出良好的应用前景。此外,由于该方法无需训练,即可对任何视频执行异常检测,因此显著提高了 VAD 领域的可用性。我们预计 AnyAnomaly 将在 VAD 研究和实际部署中发挥重要作用。

附录

A.实验细节

A.1. 数据集详情

VAD 数据集

我们使用了 CUHK Avenue (Ave) [16]、ShanghaiTech Campus (ShT) [18] 和 UBnormal (UB) [1] 数据集。Ave 数据集包含由单个摄像机在大学校园内拍摄的视频,涵盖五种异常事件:丢纸、奔跑、跳舞、接近摄像机(Too close)和骑自行车。

ShT 是一个校园监控视频数据集,包含 13 种不同的背景场景和 11 种异常事件,例如自行车、汽车、打斗和跳跃。

UB 是一个使用 Cinema4D 软件生成的合成数据集,涵盖 29 种不同的背景场景,包括室内环境、人行道等。该数据集提供了 22 种异常事件,其中不仅包括诸如吸烟、盗窃等难以检测的事件,还包括诸如偏离车道驾驶、行人与车辆碰撞等复杂场景。

C-VAD 数据集

我们构建了 Customizable-ShT (C-ShT) 和 Customizable-Ave (C-Ave) 数据集。C-ShT 通过重新组织 ShT 的测试数据,将其划分为 11 种异常事件类别,并为每个类别分配新的标签。例如,在自行车类别中,包含自行车的视频被标记为正样本,而所有其他视频被标记为负样本。帧级标签设定为 1,仅用于正样本视频中包含自行车的帧。

C-Ave 通过重新组织 Ave 的测试数据构建,划分为 5 种异常事件类别,并采用与 C-ShT 相同的标注方法。

A.2. 实现细节

在 C-VAD 数据集的关键实验中,我们采用了高效的 Chat-UniVi [13] 7B 模型,以在性能和速度之间取得平衡。对于 VAD 数据集实验,我们使用了高效的 MiniCPM-V [34] 8B 模型,以实现最佳性能,并与当前最先进(SOTA)模型进行了对比。

用于关键帧选择和上下文生成的 CLIP 模型为 ViT-B/32。对于上下文生成,我们采用了大、中、小三种窗口尺寸,分别为 (120,120)、(80,80) 和 (48,48)。对于 C-Ave 和 Ave 数据集,大窗口尺寸设定为 (240,240)。

所有实验均在单个 NVIDIA GeForce RTX 3090 GPU 上进行。

A.3. 提示词详情

在这里插入图片描述

  • 任务:根据0到1的评分标准,评估给定的图像是否包含{text}。1分意味着{text}在图像中明显存在,而0分意味着{text}根本不存在。在中间的情况下,根据{text}的可见程度赋予0到1之间的值。
  • 输出:提供一个浮动的分数,保留一位小数,不包含任何额外的文字或解释。
  • 输出:提供一个浮动的分数,保留一位小数,并简短地说明分数的理由。
  • 考虑:关键在于{text}是否出现在图像中,而不是它是否是焦点。因此,如果{text}出现在图像中,即使它不是主要焦点,也可以赋予像1.0这样的较高分数。
  • 上下文:给定的图像表示一个序列(从第一行第一列到第二行第一列,再到第二行第二列),展示了时间进展。

图 S1 展示了实验中使用的详细提示词。首先,我们设计了一种推理提示词(reasoning prompt),以利用链式思维(chain-of-thought, CoT)[30] 机制获取异常评分的简单推理结果。这有助于将问题拆解为多个步骤,引导模型更系统地解决复杂问题。例如,问题 “图像中是否包含跳跃动作?” 可以拆解为以下两个步骤:

  1. “是否有与跳跃相关的对象(例如人)?”
  2. “该对象是否执行了跳跃动作?”

这种方式使模型能够进行对象级的图像分析,从而提高预测的精确度。

考虑提示词(consideration prompt) 促使模型在 X X X 并非图像中心元素的情况下仍然能给予较高的异常评分。该提示词的引入旨在解决一个问题,即模型可能会仅因为 X X X 存在于图像中,就错误地分配较低的评分,而忽略其实际重要性。该提示词调优的有效性已在表 S1 中进行比较和分析。

提示词影响实验 表明,仅使用简单提示词时,LVLM 仅输出异常评分;而在评分计算过程中添加推理提示词后,模型能够进行推理分析。此外,考虑提示词促使模型更加关注所给文本内容。实验结果表明,同时使用推理提示词和考虑提示词可实现最佳性能。这表明,在 LVLM 过程中引入推理,有助于模型生成更准确的结果,并能够通过考虑提示词更精准地响应用户指令。

在这里插入图片描述

250311:这个考虑提示词好像挺有用的,对于这个任务来讲。

B. 附加定量评估

B.1. 超参数调优

我们调整了用于计算每个 VAD 数据集最终异常评分的三个超参数 γ 1 , γ 2 , and  γ 3 \gamma_1, \gamma_2, \text{and} \ \gamma_3 γ1,γ2,and γ3。每个超参数分别控制来自帧、位置和时间上下文的异常评分的影响。

如表 S2 所示,由于对象大小和异常事件的差异,不同数据集的最优超参数值有所不同。此外,在无上下文(w/o context,即不利用上下文信息)和无调优(w/o tuning,即所有超参数设为相同值)情况下,我们观察到即使不进行超参数调优,性能仍然提高了 3.0%、2.2% 和 0.7%。

相比之下,由于超参数调优,性能差异分别为 2.9%、0.3% 和 0.7%。这表明我们提出的方法在 VAD 任务中利用上下文信息的有效性,并证明即使不进行超参数调优,该方法仍能实现较强的泛化性能。
在这里插入图片描述

250311:这个超参数调优感觉很水,就是根据预测值加权求和一下啊,然后就选了自己最好的。。。

B.2. 不同 LVLM 的比较

表 S3 展示了在 C-ShT 和 C-Ave 数据集上使用不同 LVLMs(大规模视觉语言模型)的实验结果。我们评估了四种 SOTA(state-of-the-art,最先进)LVLMs 的性能,包括 Chat-UniVi [13]、MiniGPT-4 [38]、MiniCPM-V [34] 和 LLAVA++ [23]。所有实验均在默认设置下进行,“Pre-trained” 指的是预训练模型权重的名称。

实验结果表明,采用 上下文感知 VQA(视觉问答) 可以提升所有 LVLMs 的性能。具体而言,使用 上下文感知 VQA 后,性能提升范围从 2.6% 到 24.8% 不等。值得注意的是,即使是 MiniCPM(在不使用上下文感知 VQA 时表现最好的模型),在引入上下文感知 VQA 后,其 C-ShT 和 C-Ave 数据集上的性能分别提高了 2.7% 和 5.4%。这一结果验证了 上下文感知 VQA 在 C-VAD(可定制视频异常检测)任务中的有效性。

此外,我们观察到 Chat-UniVi 以 6.67 FPS(帧每秒) 的速度成为最 高效 的模型,而 MiniCPM-V 在两个数据集上取得了最高性能,分别达到了 90.1% 和 91.0%。因此,正如 附录 A.1 中提到的,Chat-UniVi 被用于 C-VAD 相关实验,而 MiniCPM-V 被用于 VAD 数据集的实验。
在这里插入图片描述

C. 附加定性评估

C.1. 上下文互补性

在这里插入图片描述

在本节中,我们解释了 PC 和 TC 在上下文感知 VQA 中的互补性。图 S2 可视化了特定片段的关键帧,以及使用 WA 和 GIG 生成的 PC 和 TC 图像。我们还展示了利用这些上下文的上下文感知 VQA 结果。

在第一行,当文本输入为“bicycle”(自行车)时,PC 通过 WA 成功识别了自行车,得分为 1.0。然而,由于运动导致的时间裁剪效应,时间上下文的得分较低,仅为 0.5。在第二行,当文本输入为“jumping”(跳跃)时,WA 的注意力结果未能准确定位“跳跃”的人物。此外,由于缺乏时间信息,PC 无法识别跳跃动作,得分为 0.0。相比之下,TC 捕捉到了整个跳跃动作的时间信息,最终得分为 0.9。

这些结果表明,PC 关注对象的外观,而 TC 利用时间信息,两者是互补的。通过整合这两种方法,我们实现了对 VAD 的有效泛化。

C.2. 多场景下的异常检测

图 S3 展示了在包含多个异常类别的视频上执行 VAD(视频异常检测)的结果。每个图像的标题表示相应视频中使用的异常类别。我们将用户定义的异常关键词作为文本单独输入,以获取分数,并将最高分数作为相应视频段的异常分数。如可视化结果所示,所提出的 AnyAnomaly 方法能够在各种类型的异常事件上执行 VAD。这表明,即使用户希望同时检测多种异常类型,AnyAnomaly 也可以被有效地利用。
在这里插入图片描述

C.3. 复杂场景下的异常检测

图 S4 展示了 AnyAnomaly 在复杂场景下的可视化检测结果。“关键帧(Key Frame)”、“位置上下文(Position Context)” 和 “时间上下文(Temporal Context)” 分别可视化了 k ^ \hat{k} k^ P C PC PC T C TC TC。每张图下方的文本代表 LVLM(大规模视觉语言模型)的输出。这些可视化结果表明,所提出的基于上下文的 VQA(视觉问答)方法,即利用 PC 和 TC,是有效的,并有助于提升 VAD 性能。

此外,在图 S4d 中,我们观察到即使不利用上下文信息,模型仍然能够检测出某些“醉酒行走(walking drunk)”的帧。这表明 LVLM 具备强大的视觉推理能力,使其能够在复杂场景下执行 VAD。然而,正如图 S4a–S4c 所示,仅依赖单个帧不足以充分利用这些推理能力。因此,所提出的 基于上下文的 VQA 方法 对于实现有效的 VAD 至关重要。
在这里插入图片描述

D. 局限性

效率在 VAD(视频异常检测)中至关重要。因此,我们在最先进的 LVLMs(大规模视觉语言模型)中选择了最轻量级的模型,并采用了段级方法,以显著减少延迟。然而,我们的方法仍然需要每个段提供三个输入(关键帧、位置上下文和时间上下文),并涉及推理过程,这使得实时分析更加具有挑战性。

此外,当多个异常事件同时发生时,每个事件都必须独立处理,这会导致延迟大幅增加。因此,我们未来的研究将致力于提高 C-VAD 在同时处理多个异常事件方面的效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/33886.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【AWS入门】2025 AWS亚马逊云科技账户注册指南

【AWS入门】2025 AWS亚马逊云科技账户注册指南 A Guide To Register a New account on AWS By JacksonML 0. AWS亚马逊云科技简介 Amazon Web Service(AWS) 即亚马逊云科技,其在全球Cloud Computing(云计算)市场占有最为重要的地位。 AWS连续13年被Gartner评为…

Spring 中 SmartInitializingSingleton 的作用和示例

一、 接口定义 SmartInitializingSingleton 是 Spring 框架提供的一个 单例 Bean 全局初始化回调接口,用于在 所有非延迟单例 Bean 初始化完成后 执行自定义逻辑。 核心方法: public interface SmartInitializingSingleton {void afterSingletonsInsta…

element tree树形结构默认展开全部

背景: el-tree树形结构,默认展开全部,使用属性default-expand-all【是否默认展开所有节点】;默认展开一级,设置default-expanded-keys【默认展开的节点的 key 的数组】属性值为数组。 因为我这里的数据第一级是四川【省…

大数据-spark3.5安装部署之local模式

spark,一个数据处理框架和计算引擎。 下载 local模式即本地模式,就是不需要任何其他节点资源就可以在本地执行spark代码的环境。用于练习演示。 上传解压 使用PortX将文件上传至/opt 进入/opt目录,创建目录module,解压文件至/o…

Discuz建站教程之论坛头部logo跳转链接怎么修改?

在修改头部logo跳转链接前&#xff0c;我们需要知道对应代码在哪个文件目录&#xff0c;进入宝塔或是服务器&#xff0c;找到文件&#xff1a;\template\default\common\header.htm&#xff0c;编辑器打开&#xff0c;搜索以下代码&#xff0c;大概在135行 <a href"{i…

【FreeRTOS】FreeRTOS操作系统在嵌入式单片机上裸机移植

目录 一 RTOS概述 二 FreeRTOS移植 三 FreeRTOS使用 四 附录 一 RTOS概述 先了解一些基础概念,以下内容摘自FreeRTOS官网(FreeRTOS™ - FreeRTOS™): 【1】RTOS基础知识 实时操作系统 (RTOS) 是一种体积小巧、确定性强的计算机操作系统。 RTOS 通常用于需要在严格时间限…

编译支持 RKmpp 和 RGA 的 ffmpeg 源码

一、前言 RK3588 支持VPU硬件解码&#xff0c;需要rkmpp进行调用&#xff1b;支持2D图像加速&#xff0c;需要 RGA 进行调用。 这两个库均能通过 ffmpeg-rockchip 进行间接调用&#xff0c;编译时需要开启对应的功能。 二、依赖安装 编译ffmpeg前需要编译 rkmpp 和 RGA&#xf…

深度学习基础:线性代数本质2——线性组合、张成的空间与基

目录 一、线性组合 1. 用一个有趣的角度看向量坐标 2. 如果我们选择不同的基向量会怎样&#xff1f; 3. 线性组合 4. 张成的空间 ① 二维向量的张成的空间 ② 三维向量的张成的空间​编辑 5.线性相关 6.线性无关 7. 基的定义 一、线性组合 1. 用一个有趣的角度看向量坐…

openharmony5.0中HDF驱动框架源码梳理-服务管理接口

要想大概了解一个公司&#xff0c;我们可能只需要知道它的运行逻辑即可&#xff0c;例如我们只需要知道它有财务有研发有运营等&#xff0c;财务报销、研发负责产品等即可&#xff0c;但是如果想深入具体的了解的话我们就要了解都有什么部门(对象)、各部门都包含哪些职责(对象方…

Go语言环境搭建并执行第一个Go程序

目录 一、Windows环境搭建 二、vscode安装插件 三、运行第一个go程序 一、Windows环境搭建 下载Go&#xff1a;All releases - The Go Programming Language 这里是Windows搭建&#xff0c;选择的是windows-amd64.msi&#xff0c;也可以选择zip直接解压缩到指定目录 选择msi…

Netty基础—4.NIO的使用简介一

大纲 1.Buffer缓冲区 2.Channel通道 3.BIO编程 4.伪异步IO编程 5.改造程序以支持长连接 6.NIO三大核心组件 7.NIO服务端的创建流程 8.NIO客户端的创建流程 9.NIO优点总结 10.NIO问题总结 1.Buffer缓冲区 (1)Buffer缓冲区的作用 (2)Buffer缓冲区的4个核心概念 (3)使…

linux 命令 tail

tail 是 Linux 中用于查看文件末尾内容的命令&#xff0c;常用于日志监控和大文件快速浏览。以下是其核心用法及常见选项&#xff1a; 基本语法 tail [选项] 文件名 常用选项 显示末尾行数 -n <行数> 或 --lines<行数> 指定显示文件的最后若干行&#xff08;…

网络华为HCIA+HCIP数据链路层协议-以太网协议

以太网协议 以太网是当今现有局域网(Local Area Network,LAN)采用的最通用的通信协议标准&#xff0c;该标准定义了在局域网中采用的电缆类型和信号处理方法。以太网是建立在CSMA/CD(Carrier Sense Multiple Access/Collision Detection,载波监听多路访问/冲突检测)机制上的广…

缓存id路由页面返回,历史路由栈

功能需求 网页端需要做页面数据缓存&#xff08;vue动态路由数据缓存&#xff09;&#xff0c;可根据id值打开多个编辑详情页&#xff0c;需要在页面操作返回时关闭面包屑页签 隐藏问题 1.页面缓存会有初始化和组件激活访问生命周期调用数据接口过多&#xff0c;有性能损耗 2.使…

mingw工具源码编译

ming-w64 mingw编译生成的库&#xff0c;需要mingw的lib文件支持。 https://github.com/mingw-w64/mingw-w64 使用msys2的bash git checkout v8.0.3 ./configure --disable-dependency-tracking --targetx86_64-w64-mingw32 mingw32-make.exe -j4 修改makefile中的make 改成mi…

使用OpenCV和MediaPipe库——抽烟检测(姿态监控)

目录 抽烟检测的运用 1. 安全监控 (1) 公共场所禁烟监管 (2) 工业安全 2. 智能城市与执法 (1) 城市违章吸烟检测 (2) 无人值守管理 3. 健康管理与医疗 (1) 吸烟习惯分析 (2) 远程监护 4. AI 监控与商业分析 (1) 保险行业 (2) 商场营销 5. 技术实现 (1) 计算机视…

大数据学习(66)- CDH管理平台

&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一…

Python字符串高效优化策略:特定编码 -> Unicode码点 -> UTF-8(可自定义)

Python利用唯一uni-pot中介打理&#xff0c;任意制式输出&#xff08;首选uyf-8&#xff09;。 笔记模板由python脚本于2025-03-14 23:37:04创建&#xff0c;本篇笔记适合喜欢探究字符串编码细节的coder翻阅。 【学习的细节是欢悦的历程】 博客的核心价值&#xff1a;在于输出思…

Linux自动化构建工具—make/makeflie

目录 1、为什么我们需要make和makefile 2、makefile文件的基本语法 makefile文件的语法和make指令的用法 定义变量 3、PHONY关键字 .PHONY 的语法 为什么需要.PHONY&#xff1f; 1、为什么我们需要make和makefile make 和 Makefile 是软件开发中用于自动化构建和管理代…

使用DeepSeek完成一个简单嵌入式开发

开启DeepSeek对话 请帮我使用Altium Designer设计原理图、PCB&#xff0c;使用keil完成代码编写&#xff1b;要求&#xff1a;使用stm32F103RCT6为主控芯片&#xff0c;控制3个流水灯的原理图 这里需要注意&#xff0c;每次DeepSeek的回答都不太一样。 DeepSeek回答 以下是使…