自动选择视频的缩略图
Auto selecting a thumbnail for a video
我们都听说过 YouTube 使用深度学习来 select 用户视频的代表性缩略图。但是有人在 tensorflow 上试过成功吗?
我确实找到了 https://github.com/yahoo/hecate,它声称可以做到这一点,但对结果印象不深。实际上,我使用 ffmpeg 提取关键帧然后计算 select "best" 图像的颜色分布得到了更好的结果。
但很想知道是否有人使用更多 "intelligent" 算法做得更好。
我想向 OP 澄清一下,这个答案并不代表对方法的正式描述,而是以直观的方式描述预期方法。
假设一个视频由 n 帧组成,并且每一帧都可以表示为 3D 张量(高度、宽度、通道)。可以使用 卷积神经网络 (CNN) 为每个帧生成潜在表示。
视频可以表示为帧序列(f_1、f_2、...、f_n)。最适合序列建模的神经网络架构是递归神经网络 (RNN)。我们可以使用 RNN 对 CNN 生成的一系列视频帧潜在表示进行编码。在那之后,你将有一个潜在的表示(f_1,f_2,...,f_n) 对于 RNN 生成的每一帧直接依赖于之前的帧(这是众所周知的 属性 RNN)。
正如您在最近发布的 Youtube-8M dataset 中看到的那样,每个视频都有高质量的缩略图,因此您可以将它们用作目标。特别是,给定由应用于帧序列的 RNN 生成的潜在表示,您可以生成上下文向量 c,其生成方式如下:
alpha = softmax(FNN(f_1), FNN(f_2), ..., FNN(f_n))
c = f_1 * alpha_1 + f_2 * alpha_2 + ... + f_n * alpha_n
其中 FNN 是前馈神经网络,它接收帧 f_i 的潜在表示 f_i并生成一个分数,表示当前序列中的重要性。我们可以利用上下文向量 c 来预测最合适的视频帧。
在我看来,有两种可能的策略来定义网络应该解决的最小化问题的损失函数。第一个比第二个容易。我简要描述如下:
- 预测缩略图索引:通过利用上下文向量c,我们可以训练网络预测代表位置的整数值通过最小化生成的索引和目标索引之间的交叉熵损失来选择帧;
- 重建错误:通过利用上下文向量c,我们可以训练网络通过最小化重建错误在模型生成的图像和目标图像之间进行评估。
我没有在实践中尝试过它们中的任何一个,所以我不能确定我的方法是否有效,但我相信为了有效地完成这项任务,这样做是合理的。无论如何,我希望这个答案对OP有所帮助,以便更好地理解如何解决这个任务。
我们都听说过 YouTube 使用深度学习来 select 用户视频的代表性缩略图。但是有人在 tensorflow 上试过成功吗?
我确实找到了 https://github.com/yahoo/hecate,它声称可以做到这一点,但对结果印象不深。实际上,我使用 ffmpeg 提取关键帧然后计算 select "best" 图像的颜色分布得到了更好的结果。
但很想知道是否有人使用更多 "intelligent" 算法做得更好。
我想向 OP 澄清一下,这个答案并不代表对方法的正式描述,而是以直观的方式描述预期方法。
假设一个视频由 n 帧组成,并且每一帧都可以表示为 3D 张量(高度、宽度、通道)。可以使用 卷积神经网络 (CNN) 为每个帧生成潜在表示。
视频可以表示为帧序列(f_1、f_2、...、f_n)。最适合序列建模的神经网络架构是递归神经网络 (RNN)。我们可以使用 RNN 对 CNN 生成的一系列视频帧潜在表示进行编码。在那之后,你将有一个潜在的表示(f_1,f_2,...,f_n) 对于 RNN 生成的每一帧直接依赖于之前的帧(这是众所周知的 属性 RNN)。
正如您在最近发布的 Youtube-8M dataset 中看到的那样,每个视频都有高质量的缩略图,因此您可以将它们用作目标。特别是,给定由应用于帧序列的 RNN 生成的潜在表示,您可以生成上下文向量 c,其生成方式如下:
alpha = softmax(FNN(f_1), FNN(f_2), ..., FNN(f_n))
c = f_1 * alpha_1 + f_2 * alpha_2 + ... + f_n * alpha_n
其中 FNN 是前馈神经网络,它接收帧 f_i 的潜在表示 f_i并生成一个分数,表示当前序列中的重要性。我们可以利用上下文向量 c 来预测最合适的视频帧。
在我看来,有两种可能的策略来定义网络应该解决的最小化问题的损失函数。第一个比第二个容易。我简要描述如下:
- 预测缩略图索引:通过利用上下文向量c,我们可以训练网络预测代表位置的整数值通过最小化生成的索引和目标索引之间的交叉熵损失来选择帧;
- 重建错误:通过利用上下文向量c,我们可以训练网络通过最小化重建错误在模型生成的图像和目标图像之间进行评估。
我没有在实践中尝试过它们中的任何一个,所以我不能确定我的方法是否有效,但我相信为了有效地完成这项任务,这样做是合理的。无论如何,我希望这个答案对OP有所帮助,以便更好地理解如何解决这个任务。