主要记录上一阶段有关video summary工作的一些理解和想法
一、《Deep Reinforcement Learning for Unsupervised Video Summarization with Diversity-Representativeness Reward》
众所周知视频标注成本极高,一旦涉及主观评分则需要多个标注人员(多为10人以上)对每一个标注样本进行标注。而视频类别本身又极其丰富,难以在涵盖所有视频类别的情况下进行大量标注。因此本文的无监督+强化学习方法很好的解决了数据成本问题。
Baseline如下图所示。总体上通过去掉了最后输出层的CNN对视频的每一帧进行特征提取,之后将全部输出特征合并送入一个双向LSTM获得对每一帧的选取结果,之后根据当前的Summary结果计算奖励函数(代表性奖励+多样性奖励)。
就具体代码而言,模型的Summary过程可以具体表述为:
1、顺序读取视频中的每一帧,将每一帧送入CNN(Resnet152等均可)提取特征。这一过程中维护两个array,一个是所有视频帧的特征video_feat,另一个是根据指定间隔(默认15帧)的特征video_feat_for_train
2、根据video_feat、总帧数、fps进行镜头切换检测,获得镜头切分帧和每一段视频segment长度
3、将video_feat_for_train输入RNN网络,对其中的每一帧获得一个【0,1】内的值,训练时依据这个值进行伯努利算法,决定是否选择这一帧,进而进行奖励函数的计算,而Summary时则代表了这一帧的得分(相对重要程度),并将此得分复制给临近区间(默认15帧)内的所有帧。之后按照视频切分segment,对每个segment内的帧得分计算平均值,从而获得每个segment的得分。
4、将问题转换为了0/1背包问题,在限定了最终总长度的基础上,尽可能选取总得分最高的segment们组成Summary。
其他细节:
1、奖励函数
1)多样性函数:就是在计算任意两帧之间的相似性,越不相似则说明多样性更高。值得注意的是,对于相似性高但间隔距离很远的两帧,不能简单认为他们是相似的,这样忽略了时间上的关系。因此指定了一个间隔阈值λ,对于大于此阈值的两帧则d(xt, xt‘ ) = 1。
2)代表性函数:旨在希望模型可以选择足够代表视频主体的帧。因此首先对所有帧进行k-medoids problem聚类,簇类中心则是理论上最佳选取对象,通过计算选取帧与中心的距离来衡量选取效果。
在实际操作中,视频中经常会包含表情包、转场镜头等不重要的快速过度画面,但因为多样性奖励函数的存在会使得模型倾向于选择这样的画面,实际上与视频主体无关。
解决方案:一方面需要提升视频场景边界帧检测准确度,进而过滤间隔过短的视频片段(视为不重要帧);或者建立常见表情包特征库,对相应的特征做相似判断实现过滤。
开源代码易用性强,可以根据具体场景做更多的复加功能和操作。