返回列表

24th place solution - fast simple naive RNN

344. The 3rd YouTube-8M Video Understanding Challenge | youtube8m-2019

开始: 2019-06-27 结束: 2019-10-11 音视频处理 数据算法赛
第24名方案 - 快速简单的朴素RNN

第24名方案 - 快速简单的朴素RNN

作者: chicm (Grandmaster) | 比赛排名: 24

1. 仅在验证集上训练RNN

为了使用PyTorch,我参考 https://www.kaggle.com/tbmoon/how-to-save-tfrecord-into-npy-too-slow 将tfrecords转换成了numpy数组。

然后我仅在验证集上训练了一个3层的RNN模型。该模型包含两个独立的GRU,分别用于处理帧数据和音频数据,然后将它们拼接在一起并传递给一个带有softmax激活函数的全连接层。这让我在Public LB上获得了0.71的分数。我也尝试了上下文门控,但对该模型没有太大区别。

2. 在训练集上训练RNN并在验证集上微调

对于训练集,我只选择了只有1个标签的样本。为了加快训练速度,对于每个视频,随机选择15个连续帧进行训练。

在训练集上训练RNN模型约4小时,然后在验证集上进行微调。这个经过微调的单个3层RNN模型让我在LB上获得了0.746的分数。另外训练的一个4层RNN模型LB得分为0.735。

在单个P100 GPU上,每个模型的总训练时间不到6小时。

我的最终提交是这两个模型的平均集成,Public LB分数为0.753,Private LB分数为0.744。

3. 提交

我预测了测试集中每5秒的片段,并使用每个类别得分最高的前100000个结果进行提交。在单个GPU上预测耗时30分钟。

Transformer / 多任务实验

我用3层或6层的Transformer替换了RNN模型,但并没有提高分数。接着我参考这篇论文(https://arxiv.org/abs/1901.11504)在训练集和验证集上尝试了多任务学习,这也没有帮助。

我还计划用验证集进行序列到序列的学习实验,但在比赛结束前没能完成代码编写。

同比赛其他方案