Auto Byte

专注未来出行及智能汽车科技

微信扫一扫获取更多资讯

Science AI

关注人工智能与其他前沿技术、基础学科的交叉研究与融合发展

微信扫一扫获取更多资讯

如何光明正大地学习KISS?当然是用这个DL接吻检测器了

情人节的时候,机器之心向大家推荐了一个鉴黄数据集,结果大家反应热烈,纷纷留言。还有一些有「大胆想法」的朋友在问有没有视频的数据集,这不,福利来了 [贼笑]←←

不要误会。作为一个严肃的公众号,我们才不会收集什么奇怪的视频呢!我们批判了大量电影,造访了众多 GitHub,这次推荐给大家的内容的确包含大量视频数据,这些视频的确有那么点少儿不宜,大家看完还可以借鉴一下里面的姿势呢。

诶,想什么呢?这些只是接吻的视频而已😗。这些接吻视频片段来自 100 部电影,看完这些,你可能就学会了十八式或者一百零八式接吻姿势了?

这个项目是斯坦福的 Amir Ziai 做的,至于他到底在斯坦福念的是什么学位,小编还没搞明白。但略查了查,这人还挺厉害:

本科毕业于有「伊朗麻省理工」之称的谢里夫理工大学,念的是机械工程;然后在加拿大名校西蒙弗雷泽大学读了硕士学位,接着又在 UC Berkeley 拿到了数据科学的硕士学位,然后是佐治亚理工大学的计算机科学、机器学习硕士学位。最后,这两年在斯坦福进修 AI。

貌似跑题了,重点是他做的项目:深度学习电影镜头接吻检测器。一看就好有内涵哦……

这个系统到底是干嘛用的?

不要以为作者这么无聊,就为了集中看一下电影中的接吻镜头顺便观摩学习一下。其实,电影中的场景类型对于视频编辑、分类和个性化等应用来说,都非常重要。

精确的场景探测器可以丰富特定场景类型的视频元数据,用户也可以轻松搜索和检索目标片段。

但是,大多数现有系统都只是对静止帧进行分类,或者识别整个视频中是否存在某个动作。所以,在这项研究中,作者提出了一个检测和提取电影中接吻片段的系统。

本着学习的精神,小编为广大读者朋友们推荐了这个系统,大家可以试试这个检测系统好不好用,好用的话用来干点别的也是可以的。当然,你想集中观看一下这些电影中的接吻片段,顺便观摩学习一下也是可以的。

激动人心接吻检测器

看到这里,大家一定急着想用这个工具来「学习」了。作者在 Github 上提供了使用代码的方法,可以通过提供的 API 从视频中获得接吻镜头。

调用代码的方式如下:

使用作者提供的 segmentor 和 unpickle 两个 API,然后使用 seg.visualize_segments

提取本地 mp4 文件中的接吻镜头:

从 Youtube 网站的视频获取接吻镜头:

代码可以在 Github 的 examples 文件夹中找到。

  • Github 地址:https://github.com/amirziai/kissing-detector

这个检测系统是怎么做的?

这个系统输入的是单个视频(电影),输出的是视频中检测到的一个或多个不重叠的接吻片段。比如说一部 60 分钟的电影 M 中有两个时长为 1 分钟的接吻场景,分别在第 5 分钟和第 55 分钟时出现。这时系统应该输出 K1 和 K2,其中 K1 表示第一个接吻片段,K2 表示第二个接吻片段。

它需要两个组件来实现这一点:二元分类模型和聚合算法(aggregation algorithm)。作者小哥哥还制作了一个小视频,他简要介绍了这篇论文的最主要思想与做法:

首先,二元分类模型获取连续且不重叠的 1 秒钟视频片段,然后为每个片段预测一个二进制标签(即该片段是否为接吻片段)。接着,聚合算法把对这些片段的预测聚集到一组接吻场景中。图 1 描述了这个过程,如下所示:

二元分类模型

二元分类模型由两个架构组成:一个 18 层的 ResNet CNN 和一种类似 VGG 的架构 VGGish。如下图所示:

ResNet 以 3 通道 224x224 张量的形式在 1 秒钟视频片段的最后一帧上运行。作者已经分离了最后一个全连接的层,并使用了前一层的 512 维输出。

VGGish 对 1 秒钟视频片段最后 960 毫秒的音频波进行转换。这种转换是以单通道 96x64 张量的方式完成的。VGGish 是一种卷积网络,它有效地将转换后的音频视为图像,并生成语义上有意义的 128 维嵌入。

聚合算法

聚合算法结合了来自二元分类器的预测标签列表 P,并生成了一组接吻片段。例如,有一部 60 分钟的电影中包含一个两分钟长的接吻场景,从第 30 分钟开始。

分类器将输出 3600 个预测结果,作者再将这些预测放在列表 P 中。假如有一个完美的分类器,那分割器的预期输出将是包含单个视频片段的列表,该片段从第 30 分钟开始,在第 32 分钟时结束。

算法 1 详细描述了聚合算法的逻辑:

数据集来自哪里?

作者使用的数据是一个 2.3TB 大小的数据库,里面包含了从 1915 年到 2016 年的 600 部好莱坞电影。这些电影的题材范围很广,分辨率也各不相同,大小在 200MB 到 12GB 之间。

作者从中手动选择了 100 部电影,然后对这些电影中的接吻片段进行了注释。未注释的片段被视为非接吻片段并被如此标记,如图 4 所示。

最后,作者总共标注了 263 个接吻片段和 363 个非接吻片段,时长从 10 秒到 120 秒不等。数据集分为训练、验证和测试集,比例分别为 80%、10%、10%。

对于每个带注释的视频片段,作者会提取两组特征,分别是图像特征和音频特征。

这个接吻镜头检测系统好用吗?

作者使用了 F1 得分来评估二元分类器的质量。F1 被计算为精确度和召回率的调和平均数,并在二者之间达到平衡,这使得系统很难作弊。

作者对二元分类器训练了 10 个 epoch 后,评估 F1 得分为 0.95。也就是说,这个系统的准确率高达 95%。对于这个初始实验,他训练了网络中的所有权重。此外,使用的批大小是 64,ResNet-18 作为图像特征提取器,VGGish 作为音频特征提取器,Adam 优化器的学习率为 0.001。

并且,作者通过实验发现,ResNet 是这一任务和训练配置的最佳架构。因此,他还对 3D ResNet-34 训练了 10 个 epoch,但使用该架构的 F1 得分为 0.88,低于 ResNet-18。

对于这一差异,作者认为可能有两个原因:首先,ResNet-18 受益于在 ImageNet 上进行的预训练,而 3D ResNet-34 是从头开始训练的;其次,模型在 16 帧的时间深度上可能不足以捕捉相关上下文。

如果对这个系统感兴趣,可以戳下面的链接了解更多信息哦~

  • https://arxiv.org/pdf/1906.01843.pdf

入门数据集计算机视觉AI视频分析
1
相关数据
VGG技术

2014年,牛津大学提出了另一种深度卷积网络VGG-Net,它相比于AlexNet有更小的卷积核和更深的层级。AlexNet前面几层用了11×11和5×5的卷积核以在图像上获取更大的感受野,而VGG采用更小的卷积核与更深的网络提升参数效率。VGG-Net 的泛化性能较好,常用于图像特征的抽取目标检测候选框生成等。VGG最大的问题就在于参数数量,VGG-19基本上是参数量最多的卷积网络架构。VGG-Net的参数主要出现在后面两个全连接层,每一层都有4096个神经元,可想而至这之间的参数会有多么庞大。

张量技术

张量是一个可用来表示在一些矢量、标量和其他张量之间的线性关系的多线性函数,这些线性关系的基本例子有内积、外积、线性映射以及笛卡儿积。其坐标在 维空间内,有 个分量的一种量,其中每个分量都是坐标的函数,而在坐标变换时,这些分量也依照某些规则作线性变换。称为该张量的秩或阶(与矩阵的秩和阶均无关系)。 在数学里,张量是一种几何实体,或者说广义上的“数量”。张量概念包括标量、矢量和线性算子。张量可以用坐标系统来表达,记作标量的数组,但它是定义为“不依赖于参照系的选择的”。张量在物理和工程学中很重要。例如在扩散张量成像中,表达器官对于水的在各个方向的微分透性的张量可以用来产生大脑的扫描图。工程上最重要的例子可能就是应力张量和应变张量了,它们都是二阶张量,对于一般线性材料他们之间的关系由一个四阶弹性张量来决定。

优化器技术

优化器基类提供了计算梯度loss的方法,并可以将梯度应用于变量。优化器里包含了实现了经典的优化算法,如梯度下降和Adagrad。 优化器是提供了一个可以使用各种优化算法的接口,可以让用户直接调用一些经典的优化算法,如梯度下降法等等。优化器(optimizers)类的基类。这个类定义了在训练模型的时候添加一个操作的API。用户基本上不会直接使用这个类,但是你会用到他的子类比如GradientDescentOptimizer, AdagradOptimizer, MomentumOptimizer(tensorflow下的优化器包)等等这些算法。

推荐文章
KISS只是一个引子