NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

2018 视频人物识别挑战赛冠军经验分享:在现有机器资源条件下更快速验证是关键

  • 2019-03-22
  • 本文字数:3215 字

    阅读完需:约 11 分钟

2018视频人物识别挑战赛冠军经验分享:在现有机器资源条件下更快速验证是关键

在 2018 年爱奇艺联合 PRCV 会议举办的第一届多模态视频人物识别挑战赛中,来自 Infinivision 的团队获得冠军。现在,该团队分享了他们在比赛中的经验心得,希望可以为对多模态领域研究感兴趣的朋友提供参考。

前言:

在去年,我们团队决定参加由爱奇艺联合 PRCV 会议举办的第一届多模态视频人物识别挑战赛,为了这个挑战赛爱奇艺准备了迄今为止最大的人物视频数据集(IQIYI_VID)。参赛比赛的过程中我们团队经历了沉稳-自信-压力-兴奋的心理路程,十分有趣。


挑战赛的信息是从一个技术交流的群里了解到的, 因为挑战赛的方向比较合适目前的研究方向, 就毫不犹豫的注册参加了。我们团队 WitcheR(名字来源某著名游戏)包括 3 个成员:IBUG Jiankang Deng、公司的小伙伴 JackYu 和我。我们团队的合作模式比较简单,没有特别明确的分工,在比赛过程中中团队成员会相互交流想法,共同找出当前可能存在的问题与改进点,最终由我统一汇总来实现和验证。


在这次比赛中我们不仅积累了视频特征处理、检索的一些经验,同时也认识了业界的一些伙伴、朋友,并且进行了深入的学习和交流。

一、准备策略:

爱奇艺举办的视频人物识别挑战赛是一个针对视频的人物检索竞赛,赛题逻辑比较简单:在视频数据集 IQIYI_VID 中,计算出该视频包含的人物是谁。整个数据库包含 50 万条视频,5000 名人物(噪音清理后 4934), 每条视频的长度是 1~30 秒。爱奇艺准备的这份数据集很特别,做到了数据的大和干净,其中视频数量和包含的人物数量截至目前都是最高的,并且噪音维持在了一个极低的水平, 对检验模型算法性能有很好的参考意义。


对视频人物检索问题来说,我们可能可以利用的信息有:


(1)人脸识别模型


(2)人头识别模型


(3)行人重识别模型


(4)图片场景模型


(5)声纹模型


(6)人体姿态模型


在我们这次必定的方案中只用到了(1)和(4)。理由是:


1.人头识别缺少数据集


2.ReID model 可以和 recognition model 同时存在, 但泛化性能不如, 组合后会带来提升还是下降未知


3.声纹模型不熟悉


4.人体姿态步伐做人物识别更有些虚无缥缈


5.人脸识别是最重要的特征, 在能看到脸的视频里面起决定性作用


6.图片场景模型可以对检不到脸的场景做一些补充


第一波数据公布后我利用空闲时间开始了实验, 用各种策略评估官方第一次提供的训练/验证集合的精度:


1.帧速, 即每隔多少帧抽一次人脸/图片特征


2.检测器选择, 更准的检测器是否相比 MTCNN 带来更高的精度.


3.人脸特征聚合, 如何用特征来表示一个视频


4.获得视频特征后如何更好的提升检索性能


5.用什么人脸识别模型和图片场景模型

二、正式启动:第一次提交成绩第一 但很快被超过

在官方发布了所有数据集和测试集后,因为先期积累了一些经验,我们决定专门腾了一台 8 卡 P40 来做这个任务。


我们用了自己研发和训练的一个 one stage 检测器来同时检测人脸和关键点做对齐,相比 MTCNN,在 phase1 的 validation set 上能有差不多 1 个点的 mAP 提高。不管是在这个比赛中,还是其他的应用里,我们都发现关键点的精度是非常重要的,更精准的关键点能带来更好的识别性能。这个检测器也会很快在 insightface 上开源。人脸识别的模型训练数据我们用了 MS1M-Arcface(emore)+ Glint-Asia 的组合, 没有采用任何私有数据。 Loss function 用我们刚刚被 CVPR 2019 接收为 oral 的 Arcface:



网络结构沿用了 paper 里面提出的 ResNet100 和 IR Block:



更多细节可以参考我们的文章:



对每段视频我们间隔 3 帧抽一次特征(~8FPS), 并对所有特征取平均来获得该视频的特征. 在这个过程中我也尝试了一些其他方法:


1.根据 feature norm 去掉模糊人脸,有提升


2.增加 flip augmentation,没有提升


3.增加 color jittering augmentation,性能下降


4.根据人脸 5 点估计姿态,并进行分组处理,没有提升


在获取每个视频的特征向量后,我们就可以通过简单的向量夹角来衡量视频之间的相似度,并根据测试视频和所有训练视频中最相似的视频来输出预测结果。这时候我提交了第一个结果,test mAP:79.8. 当时只有不到 10 个人提交,暂列第一, 但很快被超过。

三、调整策略:加速

A) MLP:

在上面的方法中有一个缺陷,实际上我们并没有用到训练集视频来做训练。我也尝试过把训练集的视频人脸图片抽取出来放到识别的训练集里,但效果并不好。那如何才能用到这些训练集信息? 答案是直接用视频向量做为输入训练一个多层感知机(MLP)。最简单的多层感知机很直观,输入 512 embedding,通过 2 个全连接层,来预测该向量属于某个人物分类的概率,最后加 softmax loss 来 BP。但这里面的设计就又有不同,多少层最好,每层的宽度多少, 用不用 BN,是否需要 shortcut connection,用不用 dropout, batch-size 多大等等这些因素都会很大程度影响最终结果。我们最终选取了如下策略:


1.三层感知机


2.层宽 channel size = 1024


3.PRelu 代替 Relu


4.在中间层使用 shortcut connection, 因输入输出分辨率一致.


5.使用 BN, 不使用 Dropout


6.用非常大的 batch-size 训练, 单卡 4096


7.Softmax 层之前添加一个 fix gamma 的 BN, 并和原始不加 fix gamma BN 的版本联合预测


这 7 个技巧是我们的 best setting。在使用最简单的 MLP 配置时,提交的 test mAP 为 82.9。加上这 7 个技巧以后,mAP=86.4, 足足提高了 3.5 个点。

B). 模型融合

模型融合可以说是打比赛必备的 trick, 多个模型一般来说总能提升最终结果的精度. 我们保持同样的数据集和训练方法,并采用不同的 random seed 训练了 4 个人脸识别模型。对这些识别模型也做同样的 MLP 训练来输出最终的预测概率, 并加权得到最终结果. 此时 mAP 得分来到 88.2。

C). 场景分类模型

对那些无法检出人脸的视频, 我们从 mxnet model zoo 里找到 imagenet11k+place365 预训练的 resnet152 模型做为基准模型,用抽取的视频图片做微调来预测每张图片属于哪个明星。做完分类处理后, mAP 最终定格在 88.6。


结果汇总:


四、最后的决战:压力

在提交截止前的 2-3 天, 排名第二的队伍得分突然一下提高了很多, 离我们只差不多 1 个点的距离。而当时我们手上其实已经没什么牌可以打了。领跑了大半个赛季的我们,在最后一个夜晚还是比较担忧最终的成绩会被翻盘。焦虑不安的渡过了一个夜晚,第二天上午看到最终结果才放松下来。最终以总分比较高的优势拿到了这次比赛的第一名。

五、比赛经验:策略如何更容易的验证

纵观整个比赛过程, 付出最大精力的可能是如何使我们的 idea 更容易的去验证。Idea 很容易想, 可能一天会有好几个,在确定了方案之后,怎么能在现有的机器资源的条件下更快速的去验证,是比赛的一个关键。


尤其在数据量很大比赛中, 如果没有一个优质的流程, 不但会引起效率低, 更会忙中出错,简单介绍其中几种方法:


1.根据视频的 hash id 切分多卡跑检测, 并序列化中间结果. 对视频按帧检测比较耗时, 所以在检测策略没有发生变化的情况下可以保证复用结果;


2.对每个识别模型, 保存其对每一个视频的特征抽取结果. 在视频特征抽取算法不变的情况下保证可复用, 做为训练 MLP 的输入;


3.序列化保存每个训练的 MLP 模型和预测的概率信息, 做为最终模型融合的输入。

五、后记

在 PRCV2018 的颁奖现场我也与主办方和通过比赛认识的小伙伴们进行了亲切和友好的交流,结下了深厚友谊。针对如何提高视频、图像人物检索性能达成了一系列共识。2019 年的视频人物识别挑战赛已经开始了,这次比赛的数据集有了新的升级,也是业界中最接近实际媒体应用场景的视频人物数据集,在原有的基础上新增了短视频人物 ID 约 5000 个,包括一些特效、滤镜、换妆等。数据集 iQIYI-VID-2019 在复杂场景下 10000 名明星人物、200 小时、20 万条影视剧与短视频数据集,对于挑战者来说更具挑战性,我们团队会继续参加,并希望能有更多的志同道合的团队能来一起参与, 把成绩再提高更好的水平,也能为工业界多做贡献。本文里面提交的技巧和代码都有在 insightface 里面开源,可自行取用参考。


insightface 开源项目链接:https://github.com/deepinsight/insightface


公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2019-03-22 10:153605

评论

发布
暂无评论
发现更多内容

电商系统微服务拆分-模块6

小牧ah

架构实战营

Spark 源码阅读 02:从 Spark-Submit 到 Driver 启动

程序员赤小豆

spark 技术 Spark 源码

【iOS独立开发】基于iCloud构建游戏内排行榜

LabLawliet

ios 8月日更 独立开发

模块6作业

柱林

html创建表格有那些小技巧,表单中真的有这么多功能吗

你好bk

html html5 大前端 html/css JavaScrip

Spark 源码阅读 01:环境搭建

程序员赤小豆

spark 技术 Spark 源码

Lua 入门到精通( 01 Lua 简介以及软件安装)《做一个脚本高手》

陈皮的JavaLib

lua Linux 运维 脚本语言 8月日更

模块六作业

Mr.He

架构实战营

架构实战营模块 6 作业

蔸蔸

【架构训练营】模块六作业

zclau

百度地图开发-在地图上实现路线导航 09

Andy阿辉

android Android 小菜鸟 Android端 8月日更

架构实战营 模块六 作业

脉醉

#架构实战营

模块6 作业

Geek_35a345

你知道 JavaScript 中的 Arguments 对象都有哪些用途吗?

编程三昧

JavaScript 大前端 函数 8月日更 Arguments

拆分电商系统为微服务

木云先森

架构实战营

拆分电商系统为微服务

feitian

kafka核心技术与实战学习笔记(一)

追风少年

kafka

Linux之fgrep命令

入门小站

Linux

架构训练营模块六作业

喻高咏        

架构实战营

架构实战营模块6作业

zlz

架构实战营第一期--模块六作业

clay

架构实战营

微信业务架构&学生系统管理系统设计

Geek_dae

架构实战营

模块六作业 - 电商系统微服务

babos

#架构实战营

java毕设开发经典选题

清风

毕业设计

把知识玩起来:Ansible(一)快乐的入门

南冥

❤ 超详细《软件测试全栈技能》思维导图详解 ❤(建议收藏) ​

程序员阿沐

程序员 软件测试 自动化测试 经验分享 技能图谱

架构训练营 模块六

小卷儿

如何找到靠谱的工长?

escray

生活记录 8月日更 装修记

模块六

秀聪

架构训练营

模块六作业

seawolflin

架构实战营

在线JSON转Schema工具

入门小站

2018视频人物识别挑战赛冠军经验分享:在现有机器资源条件下更快速验证是关键_AI&大模型_过佳_InfoQ精选文章