[转]2019 ActivityNet track1报告

这篇文章是来自团队内姚姓大神参加ActivityNet后的总结,记录了其中的踩坑过程,经本人同意转载过来。


2019年ActivityNet于北京时间6月11号下午三点结束了,我们团队在track1的任务中获得了70.88分(最后一分钟提交的…)。虽然结果差强人意,但也总算是給这一段时间的加班拼搏画上了一个句号。借此写一篇文章粗略总结一下,对细节更感兴趣的同学可以参考我们的submission报告(假装有的链接)

ActivityNet是当下视频理解领域最知名的比赛之一,这次比赛也吸引了不少大牛参加,比如百度vis的林天威。腾讯AI lab的王景文。有意思的是17年的冠军林天威加入了18年的冠军百度,组成了超级航母,最后的分数也的确比后几名高出一截。

由于我们组对视频理解是零基础,一开始看了不少的论文,结合2018年activtynet的submission,总结出当下的sota大致采用了two stage的方式。一是利用rgb+optical flow的双流方式进行特征抽取(利用分类作为监督信号),再利用slide window,actionness score grouping等方式提取proposals。最后对提取的proposals进行排序及融合。2018年单模型的sota就是在此基础上用TSN+BSN达到的。进一步拆分任务,可以把two stage分成四个部分进行优化,分别是1. 预训练模型;2. 分类模型训练;3. 时序动作提取与排序;4. NMS 融合。接下来介绍一下我们在每一个部分的尝试。

首先为什么把预训练模型看得这么重要呢?是因为在我们有限的认知中,使用预训练模型与数据增强是在竞赛中最高效的两个提分点。一般的imagenet预训练模型的确在提取浅层的通用特征方面已经够用了。但是对于特定的任务,更相似的数据集在深层次的特征上也有一定的相关性,能更好地帮助模型进行收敛。正好视频理解领域不乏较大的训练数据集如youtube8m,kinetics600等。评估一下youtube8m训练代价太高,所以我们选择了kinetics600进行预训练。这里我们团队踩了一个小坑。因为我们使用TSN作为分类网络骨架,所以k600也需要训练双流网络。由于k600需要大量的时间进行训练,我们首先尝试训练k600的rgb模型。由于收敛速度慢,我们在没有完全收敛的情况下就进行fine tune,最后的效果和使用imagenet 进行fine tune的效果差不多。看到结果我们心都凉了。以至于后来一段时间内我们都专注于其他的trick而没有关注预训练模型。到了五月中旬,我们突然思考到可能是相对于rgb,flow更需要预训练模型,于是又重新训练上了k600的flow模型。这一训练又花去了10天时间。最后使用k600的flow预训练模型竟然在tsn框架上一下子提高了10多个点,在最后的结果上提升了一个多点,我们才意识到预训练模型的重要性,全部训练上了预训练模型。这里也感谢主办方最后的延期,让我们顺利把k600训练出来。

第二部分是训练分类模型。分类模型的训练主要是为了训练出好的特征进行后一部分的训练。大致有两种主流方法,一种是two stream双流,另一种是3d网络。双流的工程化成本高,但最后的效果好。3d网络分类效果好,但是在时序动作提取上效果不如双流(这个仅仅是我们的理解,并不一定正确)。因此我们采用了经典的tsn双流框架进行训练。tsn由于框架比较成熟,我们训练起来的成本较低。因为考虑到最后的ensemble,所以我们使用了不同的backbone进行训练,直观上去考虑肯定要使用更深更大的网络去挖掘更有价值的特征。但是也会导致训练成本更高,更何况我们还要预训练k600,所以最后我们使用了dpn92,resnet152及se101这三个backbone(吐槽一句,其实也够深了)。我们在tsn上尝试了不同的参数配置,其中值得注意的是num_segments这一项。一般而言设置7已经够用了。我们尝试把7改为20,使网络能接受到更多的信息。结果分类效果果然变好了。但是在动作提取上效果却没有提升。这也让我们意识到分类特征学习的局限性。在此基础上我们尝试引入3d的结构以及untrimmed的信息,组成一个预测分类,start与end的网络。其中start与end的帧数都截取距离trimmed的数据4s以外的帧数,防止引入start与end不敏感的视频造成的噪音。我们希望利用这个网络去学习到分类以外的动作开始与结束信息,虽然这个网络在bsn部分中的tem阶段大幅降低了loss,但最后的结果却没有提升(我们认为可能只学习到了开始与结束的信息)。由于该网络在训练及inference阶段都需要耗费大量资源。我们并没有进行很好的error analysis就放弃了,殊为可惜。

第三部分是动作提取部分。这一部分有两种经典方式,sliding windows与actionness score grouping。目前的sota是林天威18年的经典之作BSN,很难说BSN属于哪一种,但BSN的思想和效果的确是好。因此我们主要使用了BSN作为动作提取的主要框架。我们借鉴了港中文cvpr2019的论文libra-rcnn,林天威2018的报告tricks。挖掘了六个tricks。第一部分tem训练阶段是multi task,分别预测actionness,start_prob及end_prob。其中start_prob及end_prob都有不平衡的问题,而且这三者优化的剃度方向到后期也并不一致,较为棘手。考虑到不同区间的iou样本比例极其不平衡,大部分的结果中开始与结尾的start_prob与end_prob都非常高。基于此,我们引入了iou-balanced_sampling的方式,从0-100划分10个区间,每次采样都保持平衡。这使我们的单模型提高了0.3个点多;第二个trick是考虑到tem使用的weighted logistic regression loss没有給每一个video加权,而是集中对每一个batch进行0和1预测loss的加权。我们重新设计了loss,对每个video都重新分配了weights,并且在此基础上引入了dice loss(dice_loss的权重也比较重要),最后变成了weighted logistic regression loss + lambda * dice_loss。这个方法在单模型上增加了0.2个点(但是融合的时候时灵时不灵..);第三个trick是数据的清洗,activitynet中有部分数据是一段视频中从头到尾只有一个proposal的,我们通过去除这些样本(1000多个)获得了更具有区分度的数据集,可以获得稳定的提升;第四个trick是normalize tem的输入,同样可以获得稳定的提升;第五个trick是把pem的loss改为balanced_l1_loss, beta的阈值设为0.7, 同时在把pem的feature特征从actionness扩展为actionness+normalized_rgb+normalized_flow 特征,即加入了原始的训练tem的normalized的rgb和flow特征。提升了pem的准确性(但最后结果并没有提升)。第六个trick是label smoothing,也是考虑到了start和end位置信息的不敏感性,在单模型上能提高0.2个点

第四部分是融合。一般融合都适用soft_NMS。由于我们训练了不同的模型,并且还训练了不同的backbone,因此我们融合的分数的分布差距较大。为了缓和这个问题,我们引入了normalized soft_NMS。使模型可以更稳定地进行融合。同时我们也借鉴了旷世的softer_NMS的思路,按照score的分数得到了所有超过iou阈值proposals的加权平均结果,略有提升。最后提交的时候比较匆忙,没有提交最佳分数,只交了一个简易版的,得到70.88点线上分数,还是有点小遗憾的。

总结来看,这次比赛还是让我们团队获得了巨大的成长,也收获了很多的经验。第一让我们意识到针对这类型比赛,需要更长的时间周期去准备,我们团队从抽好光流到能跑上第一个模型,已经到了五一,时间太过紧张,导致很多工作做得不够细致与完善。如果再来一次的话,把这个作为一个长期的目标,工作之余跑跑实验看看论文消化可能会效果更好;第二是我们对数据的理解还不够深刻。自从做了深度学习以来,往往沉迷于各种tricks而忽略了对数据的理解。但是如果对数据的理解不够透彻,往往没有更好的insights。我们团队其实已经对ActivityNet的数据集做了一些分析了,但总觉得做得不够细致,主要是对noisy_sample和hard_sample分析得不够。也导致我们在使用与改进一些trick时没有思路去做得更为细致。第三是策略的失误,比赛后半段,我们选择了在BSN上尝试更多的tricks,而没有用Tag以及slide windows的方法去提取proposals,致使我们融合阶段proposals提交单一。在feature上仅仅使用了TSN的feature,而没有多尝试3D的feature及其他框架的feature,也导致feature level的diversity不够大。虽然尝试了不少trick,但是大部分都是浅尝辄止,没有深入,因此也难以尝试出更有效的tricks。

Anyway,我们心底也清楚,求学之路无捷径。我们的最主要问题是在视频理解领域积累的不够,别人2-3年的工夫不可能过2-3个月就能速成。要想做好视频理解这一块,必须投入更多的时间,读更多的论文,做更多的实验。

第一次发文,希望各位大佬不吝指点。

你可能感兴趣的:([转]2019 ActivityNet track1报告)