Spatio-Temporal graph for video captioning with knowledge distillation

Spatio-Temporal graph for video captioning with knowledge distillation

利用知识蒸馏的时空图做视频描述

摘要
视频描述是一项要求对视觉场景有一个深度理解的具有挑战性的任务。最先进的生成描述的方法要么使用场景级要么使用对象级信息,然而却没有清晰地建模对象的相互作用。因此,他们往往无法做出有视觉根据的预测,并且对虚假的相关性很敏感。在这篇文章中,我们提出一个新颖的视频描述的时空图模型,该模型利用了时空中对象间的相互作用。我们的模型建立了可解释的连接,并能够提供明确的视觉根据为了避免因对象数量变化而导致性能不稳定,我们进一步提出了一种基于局部对象信息的全局场景特征正则化的对象感知知识蒸馏机制。我们通过在两个基准上的大量实验来证明我们的方法的有效性,表明我们的方法具有可解释预测的竞争性能。

主要贡献:
① 设计了一个新的时空图网络,利用对象间的相互作用来实现视频描述。据我们所知,这是第一次时空对象交互被明确地用于视频字幕和可解释的方式。
② 提出了一种基于对象感知的知识蒸馏机制,解决了以往时空图模型中存在的噪声特征学习问题

文中创新点与方法
在这里插入图片描述
在训练阶段,给定一个描述动态场景的视频,目标是要将其压缩成一个能完全捕捉时空对象交互的表示。这通过提出的时空图网络来完成,它作为对象分支。然后,这种交互信息通过对象感知知识蒸馏机制被提取到另一个场景分支。在测试时,只保留场景分支来生成文本描述。接下来,描述每个细节。

3.1 特征表示
给定一个RGB帧序列 ,我们从序列中提取两种类型的特征:场景特征和对象特征。
场景特征
在这里插入图片描述
对象特征
在这里插入图片描述
3.2 时空图
对象在空间和时间域有很多不同的行为。一方面,不同的对象在空间上相互作用。另一方面,同一对象在时间上变换(形状,位置,姿态等)。为了捕捉这两种类型的相关性,我们把图形分解为两个部分:空间图和时间图。为每一帧实例化一个唯一的无向空间图,其邻接矩阵用时间步t的 表示。对于时间图,为了不淹没模型的噪声信息,我们仅仅计算相邻帧对之间的时间边缘,而不是以完全连接的方式。注意时间图仍然以这种方式跨所有时间步连接。从t到t+1得到的时间图用 表示,它是一个沿时间流方向的有向图。
空间图 空间图的目标是要去捕捉在空间上相关联的对象之间的交互。根据目标检测器得出 cat和 box,但是如何知道猫和盒子在互动呢?解决这个问题的关键在于对象的相对空间位置。基于观察,位置相近的对象相关性更高,通过使用对象归一化的Intersection over Union (IoU)值来将这些信息明确地合并到空间图中:
在这里插入图片描述
时间图 尽管空间图在一个时间步上有捕捉交互的能力,但不能随时间建模对象转换。没有办法知道猫在任何一个帧的盒子里做了什么。为此,我们提出在每个邻近帧,通过计算他们的两两余弦相似度去连接所有语义上相似的对象:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3.3场景分支
类似于之前工作,我们在一个单独的场景分支中也直接建模帧序列。这个分支提供附加的可能是从局部对象特征中遗失的全局上下文信息,并且当一个视频中没有或者几乎检测不到对象时,这个分支是尤其重要的。为了突出我们提出的时空图的效用并且将其性能与场景建模的过程分离开,我们尽可能简单化场景分支。具体来说,对每16个连续的非重叠帧,我们提取一个3D特征。然后我们沿着时间维度复制了16次3D特征(因为每个3D特征跨越16个时间步长,并提供上下文),对2D特征对应的T切片进行采样。接下来,将2D和3D特征投射在这里插入图片描述3.4 语言解码器
在整个训练阶段,我们将场景特征Fs和对象特征 传入语言模型进行解码。在测试时,只有Fs被用于生成预测的句子。我们的工作再一次集中于视觉编码组件,我们尽可能简化语言decoder。直接采用TVT结构《Two-view transformer network for video captioning》。具体说,encoder产生一个时间序列的特征(要么是Fs要么是 )并且生成一个嵌入。Decoder接收这个嵌入并且将之前的词编码用于生成下一个词。为了澄清我们的命名,表示原始encoder-decoder Transformer结构作为我们的语言decoder。请注意,我们为两个分支使用两个单独的Transformer,并同时对它们进行训练。我们采用标准训练步骤去最小化语言交叉熵在这里插入图片描述 对相应的对象和场景分支。

3.5 对象感知知识蒸馏机制
通过特征拼接或汇集来合并两个分支,或者将场景特征作为单独的图形节点来添加,其问题在于视频(甚至是同一视频中的帧)包含的对象数量是可变的,这使得学习到的特征非常嘈杂。这是因为通过合并或添加额外的节点,它对来自两个本质上不同的空间的特征施加了严格的约束。相反我们仅仅采用语言逻辑的软正则化,本质上是概率分布,因此能够确保有力的特征学习过程,同时利用对象信息。调整语言逻辑的方法可以被认为是两个分支的后期融合,而不是像直接特征合并那样早期的融合。我们最小化来自于两个分支的词概率分布之间的KL散度。设Po(x)为从对象分支到词汇V的概率分布(pre-Softmax logits),Ps(x)为从场景分支到词汇V的概率分布(pre-Softmax logits)。我们最小化蒸馏损失:
在这里插入图片描述
在这里插入图片描述
4.3 实现细节
特征提取器 对于场景特征,我们使用[30]来提取2D和3D特征来编码场景信息。我们使用ImageNet预训练的ResNet-101来提取每个帧的2D场景特征。具体来说,我们传递了一个大小为224×224的中心裁剪帧补丁,并从平均池化层获取输出,以获得一个d_{2D}= 2048的扁平F_{2D}。我们还使用了Kinetics预训练的I3D进行3D场景特征提取,其中输入是一个由16个连续帧组成的视频片段,我们从最后一个全局平均池化层中提取输出,得到一个d_{3D} = 1024的F_{3D}。
为了提取对象特征,我们首先应用一个在Visual Genome上预训练好的Faster-rcnn(使用ResNeXt-101 + FPN backbone),为每个帧生成对象边界框。我们将检测的置信度阈值设置为0.5。给定输出边界框我们应用RoIAlign来提取相应区域的特征。具体来说,我们首先将边界框从ResNeXt-101的最后一个卷积层投射到特征映射上,然后应用RoIAlign来裁剪和重新调整投影边界框内的对象特征到相同的空间维度。这将为每个对象生成一个7×7×2048的特征,然后最大限度地将其合并为1×1×2048。
超参数 对于特征提取,我们对Fs和Fo(即,T = 10)。我们将每一帧中对象的最大数量设置为5。具体来说,如果有更多的话,我们会采用5个最可靠的探测,如果有更少的话,我们会进行补零。对于时空图,我们将3个图卷积层进行叠加,其输入和输出通道数均为dmodel = 512。在我们的语言译码器中,两者都是Transformer编码器和解码器有2层,8个attention heads,1024个隐藏尺寸,0.3 dropout 比例。为了损失函数中权衡超参数,我们设 为1和4。所有参数在验证集上调整。
其他细节。我们采用Adam,固定学习速率为1×10−4,不使用梯度裁剪。我们使用批大小为64的模型进行50个epoch的训练,并应用早期停止来找到性能最好的模型。在测试过程中,我们使用贪心译码来生成预测的句子。我们所有的实验都是在两个TITAN X GPUs上进行的。

5.Conclusion
在本文中,我们提出一个视频描述的新颖的时空图网络去明确利用时空对象交互,这对于场景理解和描述是至关重要的。除此之外,我们设计了一个对象感知知识蒸馏机制的两分支框架,解决了先前时空图模型的噪声特征学习问题。我们证明了我们放在在两个基准视频理解数据集上的有效性。

最后,附上自己对这篇文献的思维导图整理。希望对大家有所帮助~~
这篇文章注重时空对象间的交互,一个时间图捕捉随时间推移对象的位置、状态等的改变,一个空间图捕捉不同对象在空间上的交互。融合为一个时空图对角矩阵,再运用时空图图卷积更新节点特征,最后得到对象特征。用提取器提取2D和3D特征按通道拼接生成场景特征。再将特征传入Transformer decoder,其余的看图吧~

在这里插入图片描述

Spatio-Temporal Graph Convolutional Networks (STGCN)是一种针对时空数据处理的深度学习模型,特别适用于交通预测任务,因为它能捕捉到空间邻域依赖性和时间序列信息。在交通流量预测中,它将交通网络视为图结构,并利用卷积神经网络(CNN)处理时空特征。 以下是STGCN的一个简单概述以及基本的代码框架(Python+TensorFlow示例),请注意这只是一个简化版的框架,实际应用可能需要更复杂的模型配置和优化: ```python import tensorflow as tf from stgcn.layers import STConv # 假设我们有一个二维的时间序列数据集(Tx, Ny), 其中Tx是时间步数,Ny是节点数量(交通路段) inputs = ... # 形状为[BATCH_SIZE, Tx, Ny] # 创建STGCN层 stconv = STConv(num_filters=32, kernel_size=(3, 3)) # 设置滤波器数量和窗口大小 # 将输入通过STConv层 output = stconv(inputs) # 可能还需要堆叠几个这样的层进行多级特征提取 for _ in range(num_layers - 1): output = stconv(output) # 最后添加全连接层进行预测 prediction = tf.keras.layers.Dense(units=1)(output) # 定义损失函数、优化器和训练循环 loss_fn = tf.keras.losses.MeanSquaredError() optimizer = tf.keras.optimizers.Adam() for epoch in range(num_epochs): with tf.GradientTape() as tape: loss = loss_fn(y_true, prediction) gradients = tape.gradient(loss, model.trainable_variables) optimizer.apply_gradients(zip(gradients, model.trainable_variables)) ``` **关键原理**: 1. **空间-时间卷积**:STGCN将传统的卷积操作扩展到了图结构上,通过考虑邻居节点的影响,捕获了空间依赖性。同时,它还保留了时间维度上的滑动窗口卷积,以便于捕捉时间序列模式。 2. **残差链接**:为了防止梯度消失或爆炸,STGCN通常包含残差连接,使得网络可以更容易地学习长期依赖关系。 3. **分块设计**:由于图数据的大规模,可能会导致内存限制,STGCN常常采用分块策略,只对部分相邻节点进行计算,提高了效率。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>