最近,英特尔营销团队向英特尔视觉云系统科学技术中心 (Intel Science and Technology Center for Visual Cloud Systems) 提出了一项请求。营销团队正在寻找可以在展会和演示中使用的交通相关视频,并想确认我们是否可以提供部署在匹兹堡的智慧城市测试平台中的一些视频给他们。但是当深入研究了他们的要求后,我们却发现问题比想象的要更复杂。他们想要的是各个视角和不同地点的精选视频。然而,对于内容的授权许可以及视频中包含的可辨识个人信息(如面部),是存在着一些限制要求的。我们在匹兹堡的部署规模很小,并不足以提供此类数据。我们转而利用了 Yahoo/Flickr 100 million (YF100M)数据集。YF100M 是最大的公共可用视频数据集之一,包含约 80 万个视频。我们决定结合使用 Scanner 和 视觉数据管理系统 (VDMS),并借助 Apache Spark、Pandas 和 Apache Arrow,从 YF100M 中选出可用的视频,并围绕视觉大数据分析进行概念验证 (PoC)。
什么是视觉大数据分析?
近年来,大数据涵盖了多种结构化和非结构化、传统和基于人工智能 (AI) 的数据分析方法。而视频分析通常是指针对视频数据所采用的传统和基于人工智能的计算机视觉和图像分析技术。将这两种方法结合起来,就是我所说的视觉大数据分析:
- 视觉:除了视频内容本身,在应用中也会创建并使用到其他基于视觉的数据。此类数据包括个人图像和转换后的视频、视频处理数据(如运动矢量)、与人工智能相关的数据(如神经网络特征矢量)、衍生的抽象物(如边界框和分割图),以及生成的数据(如纹理和对象网格)。所有这些数据可能都比较复杂,而且管理和分析的成本也可能会很高。
- 大:顾名思义,指视觉数据量很庞大。一个画质为 4k 60fps 且时长为两小时的视频可能会占用0.5TB 的磁盘空间,但这可能会根据不同的编码方案而有所变化。YF100M 包含了 800,000 个视频,但是大多数视频都很短且质量相对较低。我之前提到的 Brown Institute 数据集则包含了 200,000 个较长的视频。当您缩放数据集以及相关的应用和视频元数据时,整个视频数据集的量级就变得显而易见了。
- 数据:整合视觉数据与元数据,以便视觉大数据科学家了解整个数据量级。这其中可能有大量与视频本身(如拍摄的时间和地点,视频中的人和物,视频许可条款和编码参数等)相关的元数据。在一些应用中,还可能经常需要利用视觉数据来分析非视觉数据。例如在智慧城市案例中,我可能想将交通信号定时数据与交通摄像头在每个信号周期检测到的车辆数量关联在一起。
- 分析:人们倾向于将分析概括为“从视觉数据及其关联的元数据中推导出洞察”。这是个比较到位的总结,但值得一提的是,有些应用能延伸这一定义。在今年的 国际计算机视觉与模式识别会议 (CVPR) 上,我们演示了在一场足球赛的 36 个同步视频流上运用 Scanner 和 VDMS 来生成骨骼重建结构和球员姿态。这些姿态随后被英特尔体育事业部运用到由他们所实施的体积渲染管道中,以创建更高质量的球员重建结构。这些姿态可视为一种“洞察”,但只有将其整合到管道中才能体现出它们的最终价值。从“洞察到行动”同样也会发生在监控应用中,例如根据车牌识别生成执法调度。
所以,我们营销团队的请求为我们带来了一个不错的有关视觉大数据分析的真实示例。下面就让我们来谈谈我们是如何来应对他们的挑战的。
YF100M 数据集
如上所述,我们使用了来自 多媒体共享计划 (Multimedia Commons Initiative)* 的 YF100M 核心数据集来进行概念验证。该数据集拥有多达 9,920 万张图像和大约 80 万个视频。这些视频的总播放时长约为 8,081 个小时,平均每个视频的时长为 37 秒,中位时长为 28 秒。YF100M 按照知识共享条款 (Creative Commons terms) 发布,其中部分 YF100M 带有标签。该“即时可用”的数据集拥有总计 15 GB 的视频和图像, 以及 334 MB 的元数据文件。以绝对价值来说,这并不能被称作非常“大”,但即使这样,它仍是公开可用的最佳视频数据集之一。对于所发布的个人视频则共有 6 种知识共享许可协议类型,其中只有一种可用于营销目的。
PoC 的要求和架构
我们的任务是根据以下标准从数据集中选择视频子集:
- 筛选出具有授权许可的视频以供处理。这是我们的首要任务,以确保我们不会因意外收录不合规的视频而承担风险。
- 查找该子集中带有关键词“交通”标签的视频。
- 查找该子集中编码为 H.264 的视频,因为我们的后续处理引擎无法处理数据集中少量存在的 VP9 编码文件。
- 检测该子集中的面部和车牌,然后对视频中检测到的区域进行模糊过滤处理。
- 扩大目标以识别视频拍摄的角度(例如:从上方、从路边摄像头,或从行驶中的车辆)。关于这部分内容我们还在研究过程中。
我们所实施的架构如下图所示。该架构包括三个主要的子系统:Apache Spark、Scanner 和 VDMS。应用逻辑在组合的 Spark、Scanner 和 VDMS 客户端上运行。该应用采用与底层子系统兼容的相应 API 和数据格式。通过 Amazon Elastic Kubernetes Service (EKS) 集群中的独立节点组将每个子系统实例化,因此我们就能针对每个子系统的特定工作负载来采用不同的基于英特尔® 至强® 可扩展处理器的实例类型。从客户端和每个子系统可完全访问共享数据存储。元数据存储使用 Apache Arrow 和 parquet 文件在子系统之间共享数据。视觉数据和元数据则被存储在 Amazon Elastic File System (EFS) 上,以共享数据存储。而 YF100M 数据集本身可直接从公共的 YF100m S3 bucket 访问。
我们通过 spark-submit 将 python 查询命令提交到集群,从而实现 Spark 功能。但是为了简化操作,我们在客户端使用 Pandas 完成了大部分的数据清洗和过滤(例如选出带有“交通”标签的视频)。这些任务本可以直接在 Spark 上完成,但是在这一工作流程中,我们并不需要它的横向扩展功能。对于更复杂的分析任务(例如,使用边界框和特征矢量来识别视频中的相似面孔),Spark 的并行化功能则更有价值。
我们通过 FFprobe 来提取候选视频编码的相关信息,并在候选列表中仅保留 H.264 编码的视频。
我们使用 Scanner 和英特尔® OpenVINO™ 来查找并对面部与车牌进行模糊处理。为了确保万无一失,我们添加了两个自定义的 Scanner 运算符来进行模糊处理。我们还计划使用 Scanner 执行更为复杂的任务,也就是我在上文提到的通过扩大目标对象来识别拍摄角度。
我们使用 VDMS 存储选定视频的元数据和衍生视觉数据,以便将这些数据能够轻松地用于后续任务,而无需重新运行底层计算密集型分析。例如,法务团队可能要求我们对原先处理过的面部做更彻底的模糊处理。VDMS 让我们能够检索并重新模糊面部区域,且无需重新运行面部检测处理。
PoC 结果
在 787,479 个 YF100M 的视频中,有 137,000 个视频的许可证类型匹配我们的用途。其中,有 152 个视频带有“交通”标签。我们运行 ffprobe 并过滤掉非 H.264 视频,获得了 137 个候选视频。然后我们对这些视频进行模糊过滤处理,并生成最终内容,供当初提出请求的营销团队审核。在三节点 kubernetes 集群上处理此端到端工作流程大约需要 40 分钟,其中绝大多数时间都用在了面部和车牌的模糊化处理上。
结论
这个工作流程并没有给基于现代云服务的系统带来太大的压力,而它也确实展示了视觉大数据分析在商业上的有趣应用。除此之外,它还演示了这些应用如何使用传统的数据分析工具(如 Spark 和 Pandas)以及视觉数据处理和管理工具(如 Scanner 和 VDMS)。整个解决方案堆栈都是运用开源软件构建的,而此开源软件运行在公开可用的云基础设施。这意味着您几乎不需要任何前期投资,便可复制该系统用于自己的应用,而且还能学习如何成为视觉大数据分析架构师。
查看我发布的其他视觉云系列博客文章:
- Sharing the Video(视频边缘共享)——Mainstream 和 FilterForward(2019 年 4 月)
- Feeling a Little Edgy(边缘新助力)——OpenRTIST(2019 年 3 月)
- The Loneliness of the Expert(高处不胜寒)——Eureka(2019 年 3 月)
- Visual Data: Rack Rat to Exploer(视觉数据:另辟新的管理方式)——VDMS(2019 年 2 月)
- Scaling the Big Video Data Mountain(攀登视频大数据的高峰)——Scanner(2019 年 1 月)
发布时间 2019 年 10 月 25 日作者 Jim Blakley分类 视觉云标签 分析,大数据,视觉云
关于 Jim Blakley
Jim Blakley 是英特尔视觉云创新事业部高级总监,在计算和通信行业拥有 30 多年的经验。在他的整个职业生涯中,Jim Blakley 一直致力于将涵盖媒体处理、人机交互、全球分布式计算和网络等领域的新兴技术商业化。