首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【论文精度 | ISTVT: Interpretable Spatial-Temporal Video Transformer】

【论文精度 | ISTVT: Interpretable Spatial-Temporal Video Transformer】

原创
作者头像
九年义务漏网鲨鱼
修改2025-07-09 13:07:24
修改2025-07-09 13:07:24
69800
代码可运行
举报
文章被收录于专栏:论文精读论文精读
运行总次数:0
代码可运行

ISTVT: Interpretable Spatial-Temporal Video Transformer for Deepfake Detection

目前(2023)的人脸伪造视频检测并不能达到很好的效果(C3D, LSTM).而利用VIT的检测方法虽然能达到很好的检测效果,但是缺乏可解释性。因此,作者提出了Interpretable Spatial-Temporal Video Transformer (ISTVT) architecture。作者在文章中系统分析了不同时空自住意力的变体,并提出decomposed spatial-temporal self-attention mechanismself-subtract mechanism 机制

模型框架

模型包含了Xception(特征提取),video transformer network with decomposed spatial-temporal self-attention 以及一个分类网络MLP

Spatial-Temporal Transformer Block

文章的关键点就在于如何将VIT中的时空特征进行解耦,

在通过Xception模型提取到特征图(T\times C \times H \times W )信息后,首先将特征图分为 1\times 1 大小的token,每个向量都有 C 个特征维度(T\times H W \times C ),将该向量直接作为输入向量。在每个 1\times 1 大小的token 即空间表示向量上加入一个空间分类向量(T\times 1 \times C )→(T\times (H W + 1) \times C ),同时也在时间维度上加入一个时间分类向量(1 \times (H W+1) \times C )→ ((T+1)\times (H W + 1) \times C ),最后加入可学习的位置信息作为VIT的输入。

代码语言:python
代码运行次数:0
运行
复制
x = self.to_patch_embedding(x)
b, t, n, _ = x.shape

cls_space_tokens = repeat(self.space_token, '() n d -> b t n d', b = b, t = t)
x = torch.cat((cls_space_tokens, x), dim=2)
x += self.pos_embedding[:, :, :(n + 1)]
cls_temporal_tokens = repeat(self.temporal_token, 't () d -> b t n d', b = b, n = n + 1)

在解耦的时空注意力中,在经过多头注意力机制后,由原本的((T+1)\times (H W + 1) \times C → ((T+1)\times (H W + 1) \times N \times D ,分别对时间和空间的token进行自注意力计算,以空间注意力为例,每个空间token大小为:((T+1)\times 1 \times D , 一共有$(H W + 1) \times N$个,分别计算\text{softmax}(\frac{Q K}{\sqrt{D}} \cdot) V

⭐ 在实际的代码开发中,作者通过Rerange直接调换了时空坐标的位置,方便后续的计算

代码语言:python
代码运行次数:0
运行
复制
b, n, _, h = *x.shape, self.heads
qkv = self.to_qkv(x).chunk(3, dim = -1)
q, k, v = map(lambda t: rearrange(t, 'b (t hw) (h d) -> b h t hw d', h = h, hw = 19 * 19 + 1), qkv)

🟢 最终block代码:

代码语言:python
代码运行次数:0
运行
复制
class STTransformer(nn.Module):
    def __init__(self, dim, depth, heads, dim_head, mlp_dim, dropout = 0.):
        super().__init__()
        self.layers = nn.ModuleList([])
        self.norm = nn.LayerNorm(dim)
        for _ in range(depth):
            self.layers.append(nn.ModuleList([
                PreNorm(dim, TemporalResidualAttention(dim, heads = heads, dim_head = dim_head, dropout = dropout)),
                PreNorm(dim, SpatialOnlyAttention(dim, heads = heads, dim_head = dim_head, dropout = dropout)),
                PreNorm(dim, FeedForward(dim, mlp_dim, dropout = dropout))
            ]))

    def forward(self, x):
        for attn_t, attn_s, ff in self.layers:
            x = attn_s(attn_t(x)) + x
            x = ff(x) + x
        return self.norm(x)
Self-Subtract Mechanism

为了更好的捕捉帧间的异常,作者提出在输入向量映射为QKV时插入Self-Subtract Mechanism机制. 该操作生成特征残差来取代原有特征,可以帮助网络忽略冗余信息,专注于判别性不一致的时间特征

具体来说,就是在每个相邻时间维度上做一个残差,具体实现代码,其中残差时序信息只作为QK, V还是原来的向量

代码语言:python
代码运行次数:0
运行
复制
b, n, _, h = *x.shape, self.heads
x_rearrange = rearrange(x, 'b (t hw) d -> b t hw d', hw = 19 * 19 + 1)
residual = torch.cat((x_rearrange[:,0:2,:,:],x_rearrange[:,2:,:,:] - x_rearrange[:,1:-1,:,:]), dim = 1)
residual = rearrange(residual, 'b t hw d -> b (t hw) d')
qk = self.to_qk(residual).chunk(2, dim = -1)
v = self.to_v(x)
q, k = map(lambda t: rearrange(t, 'b (t hw) (h d) -> b h hw t d', h = h, hw = 19 * 19 + 1), qk)
v = rearrange(v, 'b (t hw) (h d) -> b h hw t d', h = h, hw = 19 * 19 + 1)

实验

🟢 人脸提取:采用MTCNN方法,在每个视频中截取270帧,每6帧为一个样本,此外对于每一帧,我们使用鼻尖作为边界框的中心,并使用人脸的最大高度和宽度的1.25倍作为框的高度和宽度。最后resize为($300 \times 300$)

🟢 超参数:block块为12, 注意力头数为8, 优化器为SGD, 学习率初始值为0.0005,训练100轮

🟢 跨数据集的实验结果:

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ISTVT: Interpretable Spatial-Temporal Video Transformer for Deepfake Detection
    • 模型框架
      • Spatial-Temporal Transformer Block
      • Self-Subtract Mechanism
    • 实验
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档