【私信获取源码】
数据集
1.1 AVA数据集介绍
AVA数据集为目前行为数据集中背景最复杂、人体目标最多的数据集,是由Google在2018年所发表的一个用于训练动作检测的数据集,该数据集注释430个15分钟电影切片中的80个原子视觉动作,在空间和时间上定位了动作,从而产生了1.62万个动作标签。这个数据中的内容有以下特点:更多的使用原子动作而不是复合动作(如bow、kneel、jump、sleep等)、对于每个人有更多的的时空标注(每个人会同时具有多种行为)、在切片内的标注尽可能的详细(每个切片中的动作种类会尽可能丰富)、物体在跨段中尽可能的连续(对于出现过的人会有ID进行标注)和使用电影来收集尽可能多的动作类别。且视频内人物动作具有无规则性,例如站立、坐下、与他人谈话等。动作类别丰富且具有代表性、普遍性。其动作类型如图1所示:
1.2公开数据集处理
为了避免网络训练时对同一场景进行过多训练而产生过拟合现象,因此在数据的预处理过程中,通过ffmpeg工具将数据集中的视频时长统一处理成15分钟。处理代码如下:
图2 截取视频代码
通过上述所说,在完成裁剪时长后需要对视频进行抽帧处理,从而实现由连续帧中提取时间信息特征的目的,便于后续对网络模型的训练。因此把视频裁剪完后再裁剪成图片,本文中使用1秒3帧的方式来裁剪,裁剪完后统一存放在myframes文件夹中,便于后续标注处理。
在运行抽帧代码对数据集进行处理后,需要对每帧图片中的人体行为进行行为标注,通过标注的工作才能进行下一步网络的训练以及测试。考虑到所需处理图片数量大,标注时间过长,因此为了减少人工标注时间,本文使用detectron2工具对图片进行自动标注。Detectron2工具由Facebook AI团队维护,其被广泛用于目标检测、行为估计等应用方向,同时能进行图像分割等处理。
图3 via标注
采用detectron2项目中的Faster RCNN目标检测算法进行自动标注,检测出图片中的人的位置即检测框四个点的坐标,然后将检测结果导入via标注工具,审核筛选无用框和错误框进行修正。在通过自动标注处理后会自动生成csv文件及txt文件,csv文件中包含图像中被检测到目标的框坐标,而txt文件中则包含动作标签,其均用于后续Slowfast网络训练时处理。处理结果如图4所示:
图 4 数据集及处理文件存放结构
2、SlowFast网络
视频动作识别是通过对预先分割好的时域序列进行时空信息建模,从而学习视频中所包含的表象(appearance)和运动(motion)信息,以此来建立视频内容与动作类别之间的映射关系,使得计算机能够有效地胜任视频理解的任务。相比较于图像分类,视频中的动作识别多出一个时序维度,如何捕获视频帧之间所包含时序信息是动作识别的重点。其难点在于以下几点:
- 不确定因素多
动作数据集中往往存在光照不均、背景变化、相机抖动、目标遮挡等问题。这些不确定因素的干扰,会严重影响模型的性能,这也是导致动作识别未能实用化的重要原因。
- 动作边界的不确定性
一段视频可能包含多个动作,一些动作持续时间较短,而有些动作持续时间较长,且速度变化快,难以在时序上对动作的边界进行精准的定位,模糊的动作边界将很大程度上影响识别的精度。
- 动作类间差距小
在视频动作数据集上,会存在动作类间差异性小的问题,即不同类别的动作之间只存在细微的差距。然而,要精确地区分这些动作往往是比较困难的。
在自然图像里,空间维度x轴和y轴两个方向具有相同的可能性,但视频里,并不是所有的时空方向都有相同的可能性,慢动作比快动作的可能性大。因此就不应该对称的看待空间和时间。对于视频数据集里的人类动作一样,视频里既有相对静止的画面,也会有快速的动作。人的的空间语义变化很缓慢,因此人这个类别的识别是“慢速”刷新的;而人的动作速度比其主体识别的速度要快得多。这样快速变化的动作需要“快速”刷新。另外,在自然界中,动物界灵长类动物观察外界时,大多视网膜神经细胞用于识别外界静态细节,而还有一小部分神经细胞则用于观察外界目标的运动快慢信息的现象。基于这些原因, Facebook AI研究团队提出了SlowFast网络这种并行网络结构,该方法如同名称一样,应用了slow和fast两个并行的卷积神经网络来进行行为识别目的网络架构。
SlowFast模型包括两个路径,如图5所示,C代表Channel,T代表采样的帧数。其中Slow路径用于提取目标静态特征,即以低时间分辨率捕捉空间信息,例如一个人在做跑步动作时,跑步动作并不会改变“腿”的身份,一个人也会保持人类的身份,即便是从站着的状态变成跑步的状态。而Fast路径则用于提取目标动态特征,即以高帧率运行,捕获到更细节的时间信息。该路径可通过减少通道个数来简化模型复杂度,同时学习到有用的时间特征信息便于行为识别,达到轻量化目标,提高网络推理速度。
图5 SlowFast网络结构 |
SlowFast网络模型中通过将Fast路径通道个数减小到达轻量化目的,占总总计算量的20%。虽然减小通道的同时降低了空间信息处理能力,但由于轻量化的特性,可以在任何高帧率上进行操作,保持时间保真度。图中上方Slow分支路径,帧率不需要很高,即T的大小不需很大,因为其路径目的是为了捕捉到更多的细节信息,由于空间目标信息并不会快速变化,因此在通道上的维度是足够的;而对于Fast分支路径而言,因为不需捕捉细节特征,因此其通道信息的维度不需要过多,反而为了捕获动作信息,相应的帧数T就需要调大了,从而对应更密集的帧图像。在这之后,通过横向连接将两个路径的学习后的信息融合在一起。每个阶段(stage)结束后,都会实现一次横向连接,在pool1、res2、res3、res4四个阶段后一共执行了四次横向连接的信息融合。由于每个阶段结束后Slow和Fast的计算结果会具有不同的形状,无法直接拼接或相加,因此需要先对Fast的计算结果进行变换。在图像的目标检测任务中,横向连接被广泛应用于融合多尺度空间分辨率特征中。
Slow通道和Fast通道都使用3D RestNet模型,捕捉若干帧之后立即运行3D卷积操作。在每个通道的末端,SlowFast执行全局平均池化,一个用来降维的标准操作,然后组合两个通道的结果并送入一个全连接分类层,该层使用softmax来识别图像中发生的动作。实验表明,SlowFast网络对于建模幅度大、变化快的动作更具优势。图6为SlowFast网络结构的具体操作。其中包括多个残差网络(Resnet),因为在一个普通网络中,其预测输出值应该尽量接近输入值,但整个调节过程比较困难。因此通过残差网络,即将输出值变为初始输出值加上输入值,这样通过观察调节残差的大小来训练网络会更加有效及快速。
图6 SlowFast具体结构
-
Slowfast网络训练及测试
3.1实验环境配置
本章的实验环境基于Windows系统的pycharm编译平台上进行的,使用RTX3090显卡进行Slowfast网络模型的训练测试。SlowFast网络训练配置如表1所示,在完成数据集的处理后,为了使SlowFast网络模型训练时间尽可能缩短,因此选用Facebook提供的预训练模型,使网络更快收敛,提高网络训练速度。下载好预训练模型后,开始配置相关参数,本文中训练的batch_size为16,模型drop_out阈值为0.5,使用sigmoid函数作为激活函数。
表 1 SlowFast训练说明
说明 |
参数 |
配置 |
torch1.8.1+cu111,torchvision0.9.1+cu111,opencv3.4、tensorboard2.4,ffmpeg、fvorce、PyYaml、psutil,CUDA11.1 |
GPU |
RTX3090 (24GB) |
初始学习率 |
0.1 |
Epoch |
400 |
batch_size |
16 |
一个epoch训练时长 |
30min |
3.2设置网络结构及训练
在完成数据集的处理后,为了使SlowFast网络模型训练时间尽可能缩短,因此选用Facebook提供的预训练模型SLOWFAST_32x2_R50_SHORT5.yaml。预训练模型,即已经在某一类数据集上训练好的模型,例如要训练出一个能识别出人的四肢的网络模型,则可通过使用在人体识别上准确度较高的预训练模型来训练四肢的数据集,这样就能减少部分网络参数的更新,提高网络训练速度。下载好预训练模型后,开始配置相关参数,本文中训练的batch_size为16,模型drop_out阈值为0.5,使用sigmoid函数作为激活函数。在网络模型训练完成后,通过测试集来检测网络模型的性能。
图 7相关配置文件代码
训练过程中可根据训练日志文件,通过 tools/analysis/analyze_logs.py 脚本绘制 loss/top-k 曲线。本功能依赖于 seaborn使用前先通过 pip install seaborn 安装依赖包。如下图8所示在top1和top5的条件下左上角为模型准确率,右上角为分类损失曲线图,左下角为召回率曲线图,右下角为精确率曲线图。由图可得训练过程良好,未出现过拟合或者欠拟合现象,模型的准确率先逐渐增大而损失值先减小最后二者都稳定于某一水平上保持稳态波动。
3.3测试样例
文章来源:https://www.toymoban.com/news/detail-786307.html
文章来源地址https://www.toymoban.com/news/detail-786307.html
到了这里,关于基于计算机视觉的学生上课姿态识别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!