paint-brush
视频中的暴力检测:建议的方法经过@kinetograph
102 讀數

视频中的暴力检测:建议的方法

太長; 讀書

在本文中,研究人员提出了一种自动检测视频中暴力内容的系统,利用音频和视觉线索进行分类。
featured image - 视频中的暴力检测:建议的方法
Kinetograph: The Video Editing Technology Publication HackerNoon profile picture
0-item


作者:

(1)Praveen Tirupattur,中佛罗里达大学。

链接表

3. 提出的方法

本章详细描述了本研究所采用的方法。所提出的方法包括两个主要阶段:训练和测试。在训练阶段,系统通过使用从训练数据集中提取的视觉和音频特征来训练分类器,从而学习检测视频中存在的暴力类别。在测试阶段,通过计算系统检测给定视频暴力的准确性来评估系统。以下各节将详细解释每个阶段。请参阅图 3.1 了解所提出方法的概述。最后,介绍用于评估系统的指标的部分。

3.1. 训练

本节将讨论训练阶段所涉及的步骤的细节。所提出的训练方法有三个主要步骤:特征提取、特征分类和特征融合。以下各节将详细解释这三个步骤中的每一个。在此阶段的前两个步骤中,从包含暴力和非暴力的视频片段中提取音频和视觉特征,并用于训练二类 SVM 分类器。然后在特征融合步骤中,计算系统针对的每种暴力类型的特征权重。这些特征权重是通过对可能的权重组合进行网格搜索并找到优化系统在验证集上的性能的最佳组合来获得的。这里的优化标准是最小化系统的 EER(等错误率)。为了找到这些权重,使用与训练集不相交的数据集,其中包含所有目标类别的暴力视频。有关目标类别的详细信息,请参阅第 1 章。


图 3.1:该图显示了系统的概览。训练了四个不同的 SVM 分类器,分别用于音频、血液、运动和 SentiBank 特征。来自网络的图像用于开发血液模型以检测视频帧中的血液。为了训练所有特征的分类器,使用了来自 VSD2104 数据集的数据。每个分类器都单独给出视频片段包含暴力的概率。然后使用后期融合技术将这些单独的概率组合起来,最终输出概率(即各个概率的加权总和)由系统作为输出呈现。作为系统输入的视频被分成一秒钟的片段,每个片段包含暴力的概率作为输出。

3.1.1. 特征提取

许多研究人员尝试使用不同的音频和视觉特征来解决暴力检测问题。第 2 章详细介绍了暴力检测相关研究。在以前的研究中,用于检测暴力的最常见视觉特征是运动和血迹,最常用的音频特征是 MFCC。除了这三种常见的低级特征外,本方法还包括 SentiBank(Borth 等人 [4]),这是一种表示图像中情绪的视觉特征。以下各节将介绍每个特征的细节及其在暴力检测中的重要性以及所使用的提取方法。

3.1.1.1. MFCC 特征

音频特征在检测枪声、爆炸等在暴力场景中非常常见的事件时起着非常重要的作用。许多研究人员已经使用音频特征进行暴力检测并取得了良好的效果。尽管一些早期的研究研究了音频信号中的能量熵 [Nam et al. [41]],但大多数研究都使用 MFCC 特征来描述视频中的音频内容。这些 MFCC 特征通常用于语音和音频识别。


在本研究中,在开发系统时,使用 VSD2014 数据集中提供的 MFCC 特征来训练 SVM 分类器。在评估过程中,从输入视频的音频流中提取 MFCC 特征,窗口大小设置为音频流中每帧的音频样本数。这是通过将音频采样率除以视频的 fps(每秒帧数)值来计算的。例如,如果音频采样率为 44,100 Hz,视频以 25 fps 编码,则每个窗口有 1,764 个音频样本。窗口重叠区域设置为零,并为每个窗口计算 22 个 MFCC。使用此设置,可以为每个视频帧获得一个 22 维 MFCC 特征向量。

3.1.1.2. 血液特征

血液是极端暴力场景中最常见的可见元素。例如,包含殴打、刺伤、枪击和爆炸的场景。在许多早期的暴力检测作品中,检测代表血液的像素被用作暴力的重要指标。为了检测帧中的血液,大多数早期作品都使用预定义的颜色表,例如 Nam 等人 [41] 和 Lin 和 Wang [38]。一些早期作品还使用了其他检测血液的方法,例如使用 Kohonen 的自组织映射 (SOM)(Clarin 等人 [12])。


在这项工作中,颜色模型用于检测代表血液的像素。它使用三维直方图表示,每个维度代表像素的红色、绿色和蓝色值。在每个维度中,有 32 个箱,每个箱的宽度为 8(32 × 8 = 256)。该血液模型分两步生成。在第一步中,使用包含血液的像素的 RGB(红色、绿色、蓝色)值引导血液模型。三维分箱直方图填充了这些包含血液的像素的 RGB 值。每次将新的血液像素添加到模型中时,血液像素所属的箱中的值都会增加 1。一旦使用足够数量的血腥像素填充直方图,箱中的值就会通过所有值的总和进行归一化。每个箱中的值现在表示像素在其 RGB 值的情况下显示血液的概率。为了填充血液模型,从从 Google 下载的各种包含血液的图像中裁剪出包含血液的像素。仅包含血液像素的区域的裁剪是手动完成的。请参见图 3.2 中的裁剪区域样本,每个区域的大小为 20 像素 × 20 像素。


图 3.2:该图显示包含血液的尺寸为 20 × 20 的样本裁剪区域。


一旦模型完成引导,它就会用于检测从 Google 下载的图像中的血迹。只有那些很可能代表血液的像素才会用于进一步扩展引导模型。下载图像和扩展血液模型是自动完成的。要从 Google 下载包含血液的图像,请使用搜索词,例如“血腥图像”、“血腥场景”、“流血”、“真实血液飞溅”、“血滴”。图 3.3 中可以看到一些下载图像的样本。将具有高血液概率的像素值添加到血液模型中,直到它至少具有一百万个像素值。


仅靠这种血液模型不足以准确检测血液。除了这种血液模型之外,还需要一个非血液模型。为了生成这个模型,与之前的方法类似,从 Google 下载不包含血液的图像,并使用这些图像中的 RGB 像素值来构建非血液模型。图 3.3 显示了一些用于生成此非血液模型的样本图像。现在使用这些血液和非血液模型,像素代表血液的概率计算如下



图 3.3:该图显示了从 Google 下载的用于生成血液和非血液模型的示例图像。


使用此公式,对于给定图像,计算每个像素代表血液的概率,并生成血液概率图 (BPM)。此图的大小与输入图像的大小相同,包含每个像素的血液概率值。使用阈值对该 BPM 进行二值化,以生成最终的二值化 BPM。估计用于二值化 BPM 的阈值(Jones 和 Rehg [35])。从这个二值化的 BPM 中,生成一个长度为 14 的一维特征向量,其中包含诸如血液比率、血液概率比率、最大连通分量的大小、平均值、方差等值。为视频中的每一帧提取此特征向量,并用于训练 SVM 分类器。图 3.4 显示了示例图像及其 BPM 和二值化 BPM。从该图可以看出,这种方法在检测包含血液的像素方面表现非常出色。


图 3.4:该图显示了生成的血液模型在检测血液方面的表现。第一列是输入图像,第二列是血液概率图,最后一列是二值化血液概率图。

3.1.1.3. 运动特征

运动是另一种广泛用于暴力检测的视觉特征。Deniz 等人 [21]、Nievas 等人 [42] 和 Hassner 等人 [28] 的工作就是将运动用作暴力检测主要特征的一些例子。在这里,运动是指视频中两个连续帧之间的时空变化量。运动被认为是暴力的良好指标,因为在包含暴力的场景中预计会出现大量暴力。例如,在包含人与人打斗的场景中,人体部位(如腿和手)会快速移动,而在包含爆炸的场景中,由于爆炸而飞散的部位会大量移动。


使用运动信息进行活动检测的想法源于心理学。人类感知研究表明,运动的运动模式足以感知动作(Blake 和 Shiffrar [2])。计算机视觉研究(Saerbeck 和 Bartneck [50]、Clarke 等人 [13] 和 Hidaka [29])也表明,速度和加速度等相对简单的动态特征与人类感知到的情绪相关。


在本研究中,为了计算视频片段中的运动量,评估了两种不同的方法。第一种方法是使用嵌入在视频编解码器中的运动信息,第二种方法是使用光流来检测运动。接下来介绍这些方法。


3.1.1.3.1. 使用编解码器

在该方法中,运动信息是从视频编解码器中提取的。从编解码器中检索每帧每个像素的运动幅度,称为运动矢量。该运动矢量是一个二维矢量,其大小与视频序列中的帧相同。从该运动矢量生成表示帧中运动量的运动特征。要生成此运动特征,首先将运动矢量沿 x 轴和 y 轴分别切成三个和四个区域,将其分成十二个大小相等的子区域。汇总每个子区域沿 x 轴和 y 轴的每个像素的运动量,并使用这些总和生成每个帧的二维运动直方图。该直方图表示帧的运动矢量。参考图 3.5 左侧的图像,查看示例视频中帧的汇总运动矢量的可视化。在此可视化中,运动矢量是针对大小为 16 × 16 像素的子区域进行汇总的。这些区域中运动的大小和方向用叠加在图像上的绿色虚线的长度和方向表示。

3.1.1.3.2. 使用光流

下一种检测运动的方法是使用光流(维基百科 [57])。这里,使用密集光流计算帧中每个像素的运动。为此,使用 OpenCV(Bradski [5])提供的 Gunner Farneback 算法(Farneb¨ack [24])的实现。该实现作为 OpenCV 中的一个函数提供,有关该函数和参数的更多详细信息,请参阅 OpenCV 提供的文档(OpticalFlow [43])。值 0.5、3、15、3、5、1.2 和 0 分别传递给函数参数 pyr scale、levels、win-size、iterations、poly n、poly sigma 和 flags。一旦使用光流计算出每个像素的运动矢量,就会使用上面第 3.1.1.3.1 节中提到的相同过程从帧中提取运动特征。参考图 3.5 右侧的图像,了解从帧中提取的聚合运动矢量。与以前的方法一样,运动矢量被聚合到 16×16 像素大小的子区域,以便更好地比较使用编解码器信息和光流提取的特征。


在评估了这两种从视频中提取运动信息的方法之后,我们得出了以下观察结果。首先,从编解码器中提取运动比使用光流要快得多,因为运动矢量是预先计算并存储在视频编解码器中的。其次,当帧中存在模糊区域时,使用光流提取运动效率不高。这种模糊通常是由场景中的突然运动引起的,这在包含暴力的场景中非常常见。因此,使用光流提取运动信息来检测暴力并不是一个有前途的方法。因此,在这项工作中,存储在视频编解码器中的信息用于提取运动特征。从视频的每一帧中提取运动特征,并用于训练 SVM 分类器。


图 3.5:使用编解码器与使用光流提取的帧中的运动信息。

3.1.1.4. SentiBank-功能

除了上述低级特征外,还应用了 Borth 等人 [4] 引入的 SentiBank 特征。SentiBank 是基于大规模视觉情感本体 (VSO) [1] 的视觉内容的中级表示。SentiBank 包含 1,200 个语义概念和相应的自动分类器,每个分类器都被定义为形容词名词对 (ANP)。此类 ANP 将强烈的情感形容词与名词联系起来,名词对应于物体或场景(例如“美丽的天空”、“恶心的虫子”或“可爱的婴儿”)。此外,每个 ANP (1) 都反映了强烈的情感,(2) 与情感有联系,(3) 经常在 Flickr 或 YouTube 等平台上使用,(4) 具有合理的检测准确率。此外,VSO 旨在足够全面和多样化,以涵盖广泛的不同概念类别,例如人、动物、物体、自然或人造场所,因此可以提供有关正在分析的内容类型的额外见解。由于 SentiBank 在 Borth 等人 [4] 的情绪分析中展现出比低级视觉特征更优异的性能,因此它现在首次用于从视频帧中检测暴力等复杂情绪。


SentiBank 由 1,200 个 SVM 组成,每个 SVM 都经过训练以检测图像中的 1,200 个语义概念之一。每个 SVM 都是一个二元分类器,根据图像是否包含特定情绪给出二元输出 0/1。对于视频中的给定帧,包含所有 1,200 个 SVM 输出的向量被视为 SentiBank 特征。为了提取此特征,使用了基于 Python 的实现。为了训练 SVM 分类器,使用从训练视频中的每一帧中提取的 SentiBank 特征。SentiBank 特征提取需要几秒钟,因为它涉及收集 1,200 个预先训练的 SVM 的输出。为了减少特征提取所需的时间,使用多处理并行提取每个帧的 SentiBank 特征。

3.1.2. 特征分类

特征提取之后的下一步是特征分类,本节将详细介绍此步骤。分类器的选择和使用的训练技术对于获得良好的分类结果起着非常重要的作用。在这项工作中,SVM 用于分类。这种选择的主要原因是早期的暴力检测工作已经使用 SVM 对音频和视觉特征进行分类并产生了良好的结果。在第 2 章中提到的几乎所有工作中,SVM 都用于分类,即使它们使用的核函数可能有所不同。


从训练集中所有可用的视频中,使用第 3.1.1 节中描述的过程提取音频和视觉特征。然后将这些特征分成两组,一组用于训练分类器,另一组用于测试训练后的分类器的分类准确性。由于这里使用的分类器是 SVM,因此必须选择使用什么内核以及设置什么内核参数。为了找到最佳内核类型和内核参数,使用了网格搜索技术。在此网格搜索中,将测试线性、RBF(径向基函数)和卡方内核以及它们的参数值范围,以找到提供最佳分类结果的最佳组合。使用这种方法,训练了四个不同的分类器,每个特征类型一个。然后使用这些训练过的分类器在下一步中查找特征权重。在这项工作中,使用了 scikit-learn(Pedregosa 等人 [45])和 LibSVM(Chang 和 Lin [9])提供的 SVM 实现。

3.1.3. 特征融合

在特征融合步骤中,融合每个特征分类器的输出概率,以获得视频片段中暴力的最终得分以及其中存在的暴力类别。这种融合是通过计算每个特征分类器的概率的加权和来完成的。要检测视频所属的暴力类别,程序如下。首先,从属于每个目标暴力类别的视频中提取音频和视觉特征。然后将这些特征传递给训练有素的二元 SVM 分类器,以获得每个包含暴力的视频的概率。现在,通过为每个特征分类器分配每个暴力类别的权重并计算加权和,融合每个特征分类器的输出概率。分配给每个特征分类器的权重表示特征在检测特定暴力类别中的重要性。必须针对每个暴力类别适当调整这些特征权重,以便系统检测正确的暴力类别。


有两种方法可以找到权重。第一种方法是手动调整每种暴力类型的特征分类器的权重。这种方法需要对特征在检测暴力类别中的重要性有很强的直觉,而且很容易出错。另一种方法是使用网格搜索机制来查找权重,其中从可能的权重范围中抽取一组权重。在这种情况下,每个特征分类器的可能权重范围为 [0,1],但所有特征分类器的权重总和必须为 1。在本研究中,使用后一种方法,枚举所有等于 1 的权重组合。这些权重组合中的每一个都用于计算暴力类别的分类器概率的加权总和,并将产生最高总和的权重组合的权重分配给相应暴力类别的每个分类器。为了计算这些权重,使用不同于训练集的数据集,以避免权重过度拟合训练集。用于权重计算的数据集包含本研究针对的所有暴力类别的视频。值得注意的是,尽管每个经过训练的 SVM 分类器本质上都是二进制的,但可以使用加权和将这些分类器的输出值组合起来,以找出视频所属的具体暴力类别。

3.2. 测试

在此阶段,对于给定的输入视频,将检测包含暴力的每个片段以及其中存在的暴力类别。对于给定的视频,使用以下方法来检测包含暴力的片段及其中的暴力类别。首先,从视频的第一帧开始,每 1 秒从一帧中提取视觉和音频特征,而不是从每一帧中提取特征。从中提取特征的这些帧代表视频的 1 秒片段。然后将这些 1 秒视频片段中的特征传递给经过训练的二元 SVM 分类器,以获得每个视频片段是暴力还是非暴力的分数。然后,使用在融合步骤中找到的相应权重,为每个暴力类别计算各个分类器输出值的加权总和。因此,对于长度为“X”秒的给定视频,系统输出长度为“X”的向量。该向量中的每个元素都是一个字典,它将每个暴力类别与一个分数值映射起来。使用这种方法的原因有两个,首先是为了检测视频中存在暴力的时间间隔,并提高系统检测暴力的速度。特征提取,尤其是提取 Sentibank 特征,非常耗时,而且对每一帧都进行提取会使系统变慢。但这种方法对系统的准确性有负面影响,因为它不是对每一帧而是对每一秒都进行暴力检测。

3.3. 评估指标

有许多指标可用于衡量分类系统的性能。用于二元分类的一些指标包括准确度、精确度、召回率(灵敏度)、特异性、F 值、等错误率 (EER) 和曲线下面积 (AUC)。对于返回排序列表作为查询结果的系统,还使用其他一些指标,例如平均精确度 (AP) 和平均精确度 (MAP)。机器学习和数据挖掘研究中越来越多地使用的这些指标中的大多数都借鉴了其他学科,例如信息检索(Rijsbergen [49])和生物识别技术。有关这些指标的详细讨论,请参阅 Parker [44] 和 Sokolova 和 Lapalme [53] 的著作。ROC(接收者操作特性)曲线是另一种广泛用于评估或比较二元分类系统的方法。可以从 ROC 曲线计算出 AUC 和 EER 等指标。


在本研究中,ROC 曲线用于:(i)比较各个分类器的性能。(ii)比较系统在多类分类任务中检测不同暴力类别的性能。(iii)比较系统在二元分类任务中在 Youtube 和 Hollywood-Test 数据集上的性能。这里使用的其他指标是准确率、召回率和 EER。使用这些指标是因为它们是先前暴力检测工作中最常用的指标。在这个系统中,调整参数(融合权重)以最小化 EER。

3.4. 总结

本章详细描述了本文中用于检测暴力行为的方法。第一部分介绍训练阶段,第二部分介绍测试阶段。第一部分详细解释了训练阶段所涉及的不同步骤。首先,讨论了音频和视频特征的提取,并介绍了使用哪些特征以及如何提取这些特征的细节。接下来,讨论了用于对提取的特征进行分类的分类技术。最后,讨论了用于计算特征融合的特征权重的过程。第二部分讨论了在测试阶段用于提取包含暴力内容的视频片段并检测这些片段中的暴力类型的过程。


总而言之,该方法遵循的步骤是特征提取、特征分类、特征融合和测试。前三个步骤构成训练阶段,最后一步是测试阶段。在训练阶段,从视频中提取音频和视觉特征,并将它们用于训练二进制 SVM 分类器,每个特征一个。然后,使用单独的数据集来查找最小化系统在验证数据集上的 EER 的特征权重。在最后的测试阶段,首先从输入测试视频的每个 1 秒视频片段中提取一个视觉和音频特征。然后,将这些特征传递给训练过的 SVM 分类器,以获得这些特征代表暴力的概率。使用在特征融合步骤中获得的权重,为每种暴力类型计算这些输出概率的加权和。加权和最大的暴力类型被分配为相应 1 秒视频片段的标签。使用这些标签,系统将包含暴力的片段及其所包含的暴力类别呈现为输出。下一章将介绍该系统的实验设置和评估。




[1] http://visual-sentiment-ontology.appspot.com