AVA数据集
随便说说:最近开始搞动作识别(action recognition),发现很多框架都选择会兼容AVA格式都数据集,然后就开始研究这个数据集,发现还是有点复杂的,动作的分类、自动打框、追踪之类的。恰好YOLOv8最近可以自动进行track了,似乎可以一次实现完整的数据集构建。所以就开始研究这个内容,再把东西发一下,希望可以对大家有帮助。这篇就先主要介绍一下AVA的数据集的基本内容,以及论文中所叙述的制作方法。
数据集概述
spatio-temporally localized Atomic Visual Actions(简称AVA)是由Google在2018年所发表的一个用于训练动作检测的数据集,该数据集注释430个15分钟电影切片中的80个原子视觉动作,在空间和时间上定位了动作,从而产生了1.62万个动作标签。这个数据中的内容有以下特点
- 更多的使用原子动作而不是复合动作(如bow、kneel、jump、sleep等)
- 对于每个人有更多的的时空标注(每个人会同时具有多种行为)
- 在切片内的标注尽可能的详细(每个切片中的动作种类会尽可能丰富)
- 物体在跨段中尽可能的连续(对于出现过的人会有ID进行标注)
- 使用电影来收集尽可能多的动作类别
数据集格式
AVA数据集目前有V2.1和V2.2两个版本,此处以V2.2为例,其主要包括以下文件
-
动作部分
-
ava_action_list_v2.2.pbtxt
:80类原子行为,其部分格式如下label { name: "bend/bow (at the waist)" label_id: 1 label_type: PERSON_MOVEMENT } label { name: "press" label_id: 44 label_type: OBJECT_MANIPULATION } label { name: "watch (a person)" label_id: 80 label_type: PERSON_INTERACTION }
其中的label_type是AVA设计过程中的一个tip,总分为三大类的原子动作
- 人的姿势(pose)
- 人和物体的交互(interactions with objects )
- 人和其他人的交互(interaction with other person)
-
ava_action_list_v2.2_for_activitynet_2019.pbtxt
:用于activitynet的动作标注这个文件是为了评估该数据集的向activity net的向下映射,自己制作时不需要
item { name: "bend/bow (at the waist)" id: 1 } item { name: "crouch/kneel" id: 3 }
-
ava_included_timestamps_v2.2.txt
:单列,每个视频要检测的位置,官方给定第902到1798秒0902 0903 0904 ...
-
-
训练部分
-
ava_train_v2.2.csv
:训练的数据集文件,最重要的部分,其中每一行包括5个部分-5KQ66BBWC4,0902,0.226,0.032,0.366,0.497,12,0
其中每一列对应的信息如下
video_id
:视频名称,不包括文件后缀middle_Frame_timestamp
:关键帧所在位置(第几秒)person_box
:此处包括了四列,(x1, y1, x2, y2)
,分别代表左上、右下点的位置。action_id
:即ava_action_list_v2.2.pbtxt
中对应的id。person_id
:bbox中人物的编号,可以实现人在跨段中尽可能的连续
每一行只标注一个框的、一个任务、一个动作,所以可能会出现多行中的框相同、事件相同
-
ava_train_excluded_timestamps_v2.2.csv
:部分出现问题的帧,进行排除,(视频+时间戳)72MzYjWz_7g,1199
-
-
评估部分
ava_val_v2.2.csv
: 格式与ava_train_v2.2.csv
的相同,数据表示的是用于评估的行为ava_train_excluded_timestamps_v2.2.csv
:在评估的数据集中出现问题的帧
-
测试部分
-
ava_test_v2.2.txt
:一列数据,只包含视频的名称--205wugM18 -APF0-L14kw -FLn0aeA6EU
-
ava_test_excluded_timestamps_v2.2.csv
:两列数据,视频名称+需要排除的时间点0f39OWEqJ24,1110 0f39OWEqJ24,1599 3IOE-Q3UWdA,1114 3IOE-Q3UWdA,1355
-
以上就是AVA数据集的标注全部内容,在完全了解其格式之后,下一节将介绍官方的数据集制作流程
数据集制作过程
生成动作列表(Action vocabulary generation)
在这个部分,其主要工作是设计动作的类别,即完成前文提到的动作部分的设计,这里简述一下官方在分动作时候所遵守的几个原则
- 一般性(generality):所选择的动作类别尽可能在全部环境下通用,而不是在特定环境中的特定动作
- 原子性(atomicity):动作尽可能的独立并且基本
- 完全性(exhaustivity):覆盖了日常生活中99%的动作,动作尽可能的全面
值得注意的是,在文中有提到一个hierarchical nature of activity,从低级到高级有多个不同的动作。文中说在高级的动作是比较难界定的,因此他们通过缩小了时间的长度,从而使得动作更加的明确。
选择电影以及片段(Movie and segment selection)
在这个部分,主要介绍了在构建数据集中他们如何挑选原始的视频,这里阐述一下他们的理念,希望对于我们在采集视频的过程中可以有一些启发。在构建AVA的过程中,视频均来自于Youtube,作者主要其中挑选了电影和电视,视频满足至少有30分钟(这里是为了后面的裁剪)、发布一年以上、最少有1k的观看,同时排除了黑白、卡通、游戏视频。
因为电影的开头可能存在许多的文字信息(片头等)这会影响标注,所以他们选取了视频中的第15~30分钟,来作为自己的数据。而最后,每一个15分钟片段都会变成893个3s的电影切片,每一个直接,往后移动了一秒。
这里可以看作是对于电影的特殊裁剪,我们在使用自己的视频构建的时候,并不需要这样,所以我们可以直接从第一秒到视频的最后一秒进行裁剪。
人物界限框标注(Person bounding box annotation)
在这个部分,其主要的工作是在完整的视频中利用bounding box对于人进行定位,以便于规定动作的发起者。每一个人可能发出了多个动作,因此一个框的标注可能会产生多个动作标注。其中需要注意的是,因为标注bbox的工作十分的繁重,文中使用了Faster-RCNN模型的人类识别模型,来对于框进行了预标注。
人物连接标注(Person link annotation)
在这个部分,文中通过在短时间内链接边界框,以获得真实的人物轨迹。通过度量两个帧之间框的相近度,利用匈牙利算法进行了配对。通过这样的方式,可以获得一个动作在时间先后上的关联性等信息。
bbox的标注以及框在时间上的连接,因为现在YOLOv8更新了自动的追踪,我们可以更快的实现这个过程,这也是我们这系列博客所改进的部分。
动作标注(Action annotation)
在这个部分,其官方标注过程主要如下图,首先对于人的框进行了确认,保证在标注框的时候不出现问题,其次先必要的选择了一个人的姿势,再以可选择的条件分别询问了人-物动作与人-人的动作。同时,作者观察到直接按照流程进行标注,要求标注者直接在给定的动作表中做出选择的时候,人们经常会出现一些错误的选择。因此作者划分出了两个标注过程:
- 动作标注action proposal:要求尽可能多的人对于数据集进行标注,统计大多数标记结果作为最终的标记
- 验证verification:让另一批人对于前面统计得到的结果进行确认。
总结
在这个文档中,我们了解了AVA数据集的主要模式与其结构,确认了我们自己标注最终所需要的文件结构。同时我们了解了官方在标注的时候的过程,这将有助于我们更好地安排我们后续制作数据集所需要的步骤。在下一个部分中,我们将讲述如何对于视频进行预处理,使得其满足动作识别的任务要求。