2022微信大数据挑战赛 第8名 方案
官网链接 : link
Python 版本:3.8
PyTorch 版本:1.9.0
CUDA 版本:11.1
所需环境在 requirements.txt
中定义。
- 使用大赛提供的未标注数据进行无监督预训练(100万)
- 使用大赛提供的有标注数据进行微调(10万)。
(1) 单流模型: visual-bert 郭大分享链接
(2) 双流模型:lxmert
- 文本:bert-base
- 视频:vit-base
- 融合层:三层cross attention
- 使用了 huggingface 上提供的
openai/clip-vit-base-patch32
模型。link
(1) Mask language model 任务
- title 随机 30% 进行 mask,预测 mask 词。
(2) Mask frame model 任务
- 对 frame 的随机 15% 进行 mask,mask 采用了全 0 的向量填充。
采用了 Nce loss,最大化 mask 帧和预测帧的互信息
(3) frame text match 任务
- 打乱 batch 中 50%的视频帧, 预测 frame 和 text 是否配对
(4) frame text clip 任务
- 参考 郭大QQ浏览的 Inverse Cloze Task 的做法,link
- 具体实现:
- title 单独输入bert 得到 title_embedding
- frame ocr asr 拼接后 输入 bert 得到 frame_ocr_asr_embedding
- 构建 title_embedding 和 frame_ocr_asr_embedding 对比loss
- title 单独输入bert 得到 title_embedding
(5) mask modality clip 任务
- 针对模态缺失的问题:设计 mask 掉 全部 frame 或 全部 text 的 任务
- 参考论文: VLM: Task-agnostic Video-Language Model Pre-training for Video Understanding link
(1) video text clip 任务
- 参照论文:ActionCLIP: A New Paradigm for Video Action Recognition link
- 具体实现
- 使用 clip-vit-base 提取 每个视频4帧的图像特征后 mean pooling 代表 video_embedding
- 使用 bert 提取 tilte 的特征 代表 title_embedding
- video_embedding 和 title_embedding 做 clip loss
模型 id | 模型结构 | bert 初始化权重 | vit 初始化权重 | trick | F1-mean |
---|---|---|---|---|---|
model-1 | 单流 | 单流预训练 epoch 15 | clip-vit-base-32 | ema fgm | 71.4 (单折) 72.2 (全量) |
model-2 | 单流 | 单流预训练 epoch 15 | clip 预训练 epoch 15 | ema fgm | 71.7(单折) 72.1(全量) |
model-3 | 双流 | macbert-base | clip-vit-base-32 | ema fgm | 71(单折) |
model-4 | 单流 | 单流预训练 epoch 15 | clip-vit-base-32 | ema pgd | - |
4个模型 ensemble 复赛 F1-mean:0.731633
- 历时两个半月,非常感谢主办方提供的数据和计算资源,感谢工作人员的辛苦答疑。
- 此外, 也感谢QQ浏览器Ai算法大赛第一名、第二名和初赛周周星各位大佬们的分享和无私开源,我从中学到了许多无监督预训和训练技巧的新知识。