视频问答,video qa using keras。天池江之杯视频问答大赛
问题描述
根据给定的短视频进行内容识别和分析,并回答每一个视频对应的问题。即给定一个视频,与任意的问题,模型根据视频对问题进行回答。
比赛地址:https://tianchi.aliyun.com/competition/introduction.htm?spm=5176.11165320.5678.1.538b325ckj6OVi&raceId=231676
成绩
复赛第16名
项目地址(包含所有代码,可复现)
https://github.com/SummerRaining/videoqa_keras
模型思路:
- 总体思路:
- a.句子通过lstm编码成1024维的向量;
- b.视频均匀截取30帧后通过resnet152提取2048维的特征,通过句子向量对30个视频帧做attention。
- c. 将attention后的视频向量与句子向量做融合(点乘),接上两个全连接到1000维。
- d. 损失使用sigmoid,避免类间竞争,logloss。
- e. 由于大部分答案都是重复的,故可以考虑成分类问题,选频率最高的1000个答案作为所有类别,对于不在1000个类别中的答案舍弃。每个问题有三个答案,故这是一个多标签问题。
- 对于问题句子,最大的句子长度为19,固定所有的句子长度维19(由于不是很长)。使用embedding成19*300的矩阵,通过隐藏层为512的双层lstm,得到的结果为512维向量,即为句子向量。
- 对于视频,均匀地截取30帧(第一名大佬好像是截取的关键帧),通过resnet152提取到2048维的特征。得到30*2048维的特征,使用句子向量对30个视频帧向量做attention。
- 将q全连接到[batch,h_dim],将v全连接到[batch,30,h_dim]
- q,v点乘。加上dropout,再使用一个全连接到1。[batch,30,1]
- L2标准化,softmax
- 融合:将句子向量全连接到1024维,视频向量也全连接到1024维,对其进行点乘,tanh做为激活函数。再添加两个全连接,输出结果为1000为的向量对应答案的概率。
- 损失:由于这是多标签问题,使用sigmoid激活函数而不是softmax,避免标签类竞争(softmax相加等于1)。 l o s s = − y ∗ l o