模型中分为两部分:
1.proposal模块:检测视频中的proposal区域
2.captioning模块:将proposal模块的结果作为输入,输出整个视频的captioning结果。
Proposal模块
解决了长视频中的时间检测问题,原来通常是将视频池化为一个向量,只能描述clip,不能检测到长视频中的多个事件。
输入:视频通过C3D模型产生的C3D特征,{ft = F(vt : vt+δ)},其中δ是时间分辨率(帧数大小),F输出的特征为NxD维,D=500,N = T /δ。即将视频分割成了N个16帧的片段,对每一个16帧的片段都产生一个500维的C3D特征。
DAPS:将输入的序列利用多步长进入Daps,文中使用了1,2,4,8步长进行平行操作,得到了多个proposal区域。
输出:
P = {(tstart, tend, score , h )},proposal事件的起始时间和评分,当评分大于阈值则进入captioning模块,h是每一个proposal事件的隐藏表达,作为captioning的输入。
Captioning模块
利用proposal模块输出的h状态,结合上下文生成每一个事件的描述。(hpast , h , hfuture )作为captioning LSTM的输入
其中hipast是i事件之前的所有proposal事件的表达,hifuture是i事件之后所有proposal事件的表达,hi是自身的表达。
其中Zpast是在i时间之前所有proposal事件的总数。
Wj的计算方式如下:
ai是注意力向量,通过wa和ba学习而来。
语言模型
2层LSTM,512个隐藏单元,利用标准差为0.01的高斯分布来初始化词向量,预测时,beam search大小为5.
损失函数
proposal模块预测的置信度在0~1之间,利用交叉熵计算proposal的置信度。
IoU高的proposal事件才会被传到语言模型。语言模型中,计算每个词的交叉熵,然后通过batch-size和句长进行归一化。
训练与优化
在加入上下文联系之前,先利用相邻的事件训练captioning模块10个epoch。以标准差为0.01的高斯分布初始化权重,使用加0.9动量的SGD优化器,语言模型的步长为0.01,proposal的步长为0.001.