2019年爱奇艺多模态视频人物识别挑战赛复盘

一、前言

我们的团队参加过2018年的爱奇艺多模态视频任务识别竞赛,并最终取得了第九名的成绩。当时,由于时间关系,我们并没有对算法进行充分调优,算法中各模块所依赖的模型基本全部来自于开源框架。我们此前很少研究过视频识别相关的算法,但是却有一定的基于图像的人脸检测与识别、行人ReID方面的项目经验。

因此,我们的思路是,将视频识别转化为图像识别问题,即先从视频中抽帧,对单帧图像进行人物识别,再由每一帧图像的识别结果经过投票得到视频的识别结果(当然,考虑到多模态特征融合的可操作性,我们对每一帧图像进行识别时所使用的特征,并不是全部来自这一帧图像)。

而对图像中的人物进行识别,最可靠的方法又无疑是识别图像中的人脸,虽然这一步也可以借助头部、声音、身体等特征,但考虑到数据集中的视频来源多为影视剧、网络视频等,即使是同一ID的人物也服装穿着各异(身体),发型、头饰、帽子等也会发生变化(头部),背景音乐、对话等又会干扰声音特征,因此,使用这些单一特征得到的识别结果往往是不可靠的,这一点在参考文献 [1]中已经有所体现了。

于是,整个算法的流程就是这样的:

  • 从视频中按照一定的帧率抽取图片;
  • 从图片中检测人脸并对齐;
  • 提取人脸特征;
  • 利用MLP进行人脸特征分类;
  • 由单帧图像的分类结果投票得到视频的分类结果。

之所以按照分类的方案解决问题,是因为训练集和测试集的已知ID是相同的,这时,分类模型往往更加简单可靠。这是一个使用纯人脸特征的方案,最终,我们做到了0.8075(top1:0.8865)的成绩,得到了第九名。

 

今年,我们又继续参加了这一竞赛。在设计方案时,我们首先尝试沿用去年的思路,不过却遇到了一些困难。

本次竞赛的提交方式是,将测试工程打包成docker镜像,上传到远程服务器在线运行,并且规定运行时间不能超过8个小时。

考虑到服务器的硬件配置,我们很难在8小时以内完成上述全部流程。不过,官方已经预先训练了针对face、head、audio和body这几类特征的特征提取网络,并从全部训练集和测试集中提取了特征,具体结构如下:

  • face:num_face * 512(num_face为每段视频中检测到的人脸数量)
  • head:num_head * 512
  • audio:512
  • body:num_body * 512

虽然不太清楚这些特征本身的质量,但还是可以利用这些特征进行阶段性的测试,我们要做的就是训练MLP对这些特征进行分类,再由特征级的分类结果融合成视频级的分类结果(后来,据了解,前几名中的多数团队都是只利用了官方特征的)。

 

二、数据集划分

我们合并了官方提供的训练集和验证集,重新进行10折交叉验证划分。

接下来的实验中,为了节省每周三次的提交次数,我们首先会在自己的验证集上测试得分,只有当算法在自己的验证集上取得了一定的提升之后,我们才会在测试集上测试结果(因此,许多中间步骤我们都是没有测试集上的得分的)。

 

二、特征分类

1. 纯人脸方案

由于不同模态特征理论上的分类性能存在差异,其中人脸特征应该远强于其它几类特征,因此,我们首先尝试使用纯人脸特征进行特征分类。我们通过实验,选定了一个包含三个fc层的分类器,具体结构如下:

    input -> fc1 -> bn1 -> relu1 -> fc2 -> bn2 -> relu2 -> fc3 -> softmax

    其中所有全连接层的通道数均为1024。

然后,将512维人脸特征作为输入训练分类器,使用softmax loss作为损失函数。

测试阶段,我们计算一段视频中所有人脸特征对某一类别的分类置信度的最大值作为这段视频的分类置信度。

通过这一方案,我们在自己的验证集上获得了~87%的得分(我们参考提交时的得分计算方法,在自己的验证集上计算了得分)。

2. 多模态特征融合

然后,我们又利用相同的方法单独训练了head特征分类器,并在验证集上取得了52%的得分,我们对于两种模型得到的验证结果,按照各自的验证得分进行加权融合,使融合后的验证得分获得了~1%的提升。

但是,结果层面上的融合有一定的局限性,我们认为这种方案更接近于ensemble,而不是特征融合,因此,我们又尝试了将多模态特征直接作为输入训练分类器的方案,具体的做法是:

  • 保持每张图片的512维特征不变,作为主特征;
  • 对每段视频的head、audio和body三种特征分别取均值,得到3条512维特征,与每张图片的512维特征融合成一个2048维特征,作为新的一张图片的输入。

为了使模型更好地适应2048维输入,我们又对模型进行了如下调整:

  • 将所有fc层的通道数调整为2048;
  • 使用prelu层替换relu层;
  • 使用bce loss作为损失函数,替换softmax loss。原因是softmax loss不能有效地利用空类样本(根据去年的竞赛经验,将空类作为一个单独的分类加入到分类器中并不会使结果获得明显的提升,但如果不将空类加入训练会损失大量的训练数据),于是,我们参考了Humpback Whale Identification竞赛中top-1的方案,使用了一个10034分类的BCE loss作为损失函数;
  • 对输入数据进行标准化处理,并且使用了更多的数据增强方法,包括random drop、random noise等;
  • 我们也尝试了添加shortcut-connection、attention module等模块,但都没有取得明显的提升,因此,我们在最终方案中并没有使用这些策略。

经过上述修改后,我们在自己的验证集上的得分提高到了91%。

3. re-ranking

在从视频级的分类结果生成提交结果的过程中,我们借鉴了re-ranking的思想,认为“如果要将一个样本判断为某个类别,那么不仅要求这个样本属于该类别的置信度在所有样本中排名较高,同时也要求这个样本属于该类别的置信度在所有类别中排名较高,即:样本和类别互为最近邻时,才认为样本属于类别”。具体的做法是,一段视频的10034维分类置信度中排名靠前的k项可以得到一个额外的加分。

通过反复实验,最终,我们选定了如下函数形式:

s(j) = s(j) + exp(- rank(j)) if rank(j) <= 10

这个策略使我们在自己的验证集上获得了92.2%的得分,并在测试集上得到了87.3%的提交结果,这是我们最早的有效提交结果。

三、重检测

比赛进行到这里的时候,我们在特征层面上的优化就进入了瓶颈,我们尝试了利用shortcut-connection、attention module等策略优化网络,但都没有取得明显的提升。我们接下来训练了6个模型进行融合,将结果提高到89.5,然而,当时top-1的成绩已经超过90%。这时我们认为,继续对特征网络进行优化的性价比比较低,于是,我们将注意力转向了官方提供的特征本身。

我们认为,特征本身的表达能力决定了分类网络的性能上限,而官方提供的人脸特征至少在两个方面存在不足:

  • 官方的人脸特征提取器应该没有针对该数据集的10034个ID进行过优化。
  • 官方没有对人脸进行对齐。

而根据我们以往的经验,这两点都会对人脸特征的质量产生一定的影响,因此,我们开始重新尝试对人脸进行检测和对齐的方案。

1. 人脸检测与对齐

本次比赛在运行时间方面的限制使我们无法按照传统的方法进行抽帧、检测、对齐、特征提取和分类,虽然官方已经给出了8fps的抽帧图片以及对应的人脸检测框,但从硬盘中读取图片仍然是速度瓶颈。

于是,我们针对官方给出的数据进一步优化了检测与对齐的过程,具体如下:

  • 使用NVIDIA DALI(NVIDIA Data Loading Library)库取代pytorch(和其它框架)提供的从硬盘中读取图片的方法。这使得我们从硬盘中加载图片的速度有了明显提高(~380fps,测试集中一共包含270w+张图片);
  • 原始图像的尺寸比较大,会影响检测网络的运行速度,因此,我们利用官方提供的检测框,放大一定比例后,从原图中截取出相应的区域,作为人脸的候选区域;
  • 然后将该区域resize到192 * 192的尺寸,使用RetinaFace作为人脸检测器,进行检测与对齐(~180fps)。
  • 考虑到每段视频中包含的人脸数量有较大的差异,对于包含较多人脸图片的视频,图像之间的变化程度往往比较低,这对融合后的分类结果影响不大,因此,我们将人脸数量超过threshold的视频下采样到threshold,以降低检测和特征提取的时间消耗(在最后的实验中,我们选取threshold = 30,这在我们的验证集中对结果的影响极低)。

在官方检测框的基础上进行重检测,可能出现检测失败的情况,这会损失一些人脸图片。具体来说,在测试集中,重检测结果相对于官方检测框减少了~3.37%,但考虑到这部分人脸往往是质量较差的人脸,所以不会降低最终的分类准确率。

2. 特征提取与分类

然后,我们利用新的检测框重新训练了insightface用于特征提取,并将提取到的特征作为新的特征维度,与原先的2048维向量组成了新的2560维向量,在保持其它参数不变的情况下继续训练分类器,最终,我们在自己的验证集上获得了93.2%的得分,并在测试集上得到了~89%的提交结果。

四、模型融合

最后,我们利用起初划分的交叉验证数据集训练了多个模型,当使用3模型融合时,我们在测试集上获得了90.62%的提交结果;当使用6模型进行融合时,我们在测试集上获得了91.13%的提交结果。

我们最后也尝试了将新的2560维特征得到的结果与原先的2048维特征得到的结果进行融合,提交结果也只提高到91.14%,没有明显的提升,这也是我们最终得到的最高得分,到提交截止时间为止,这一成绩在所有参赛队伍中排名top-1。

五、后记

事实上,受到比赛时间以及提交次数的限制,我们还有许多测试没有完成:

  • 关于多模态特征的利用方面,我们只使用了简单的特征拼接方法,这相当于直接将各模态特征之间的权重信息隐含到了网络参数中。但在这一领域,还有一些值得借鉴的方案,例如CentralNet [4],LMF [5] 等。
  • 我们并没有利用到检测框的置信度得分信息,我们只在很早的实验中粗略地测试了将置信度得分作为权重,加权得到输出结果的方案,但并没有明显的效果,所有后期我们就放弃了这部分信息。但在答辩过程中,通过和小伙伴们交流,我们收获了一些很不错的加权融合的idea,如果能够将这部分信息融合到我们的方案中,应该也能使结果有一定的提升。

总的来说,通过这次比赛,我们的团队积累了许多模型搭建、训练、测试方面的经验,关于人脸识别和多模态融合思想也有了新的认识。前期走过的一些弯路使我们浪费了许多时间,直到最后一天我们才完成所有模型的训练与测试,如何更好地规划时间安排,让有限的设备得到更有效率的应用,也是我们要考虑的重要问题。

 

参考文献:

[1] Deng J , Guo J , Zafeiriou S . ArcFace: Additive Angular Margin Loss for Deep Face Recognition[J]. 2018.

[2] Deng J , Guo J , Zhou Y , et al. RetinaFace: Single-stage Dense Face Localisation in the Wild[J]. 2019.

[3] NVIDIA DALI: https://developer.nvidia.com/DALI

[4] V. Vielzeuf, A. Lechervy, S. Pateux, and F. Jurie. Centralnet: a multilayer approach for multimodal fusion. In ECCV Workshop, 2018.

[5] Zhun Liu, Ying Shen, Varun Bharadhwaj Lakshminarasimhan, Paul Pu Liang, AmirAli Bagher Zadeh, and Louis-Philippe Morency. 2018. Efficient lowrank multimodal fusion with modality-specific factors. In Proceedings of the 56th Annual Meeting of the Associatio

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值