[Transformer] TransVOD: End-to-End Video Object Detection with Spatial-Temporal Transformers

该文介绍了如何将DETR和DeformableDETR的Transformer架构扩展到视频对象检测(TransVOD),减少人工设计组件,如光流、RNN和关系网络。TransVOD通过TemporalTransformer结合时空信息,实现端到端的检测,无需后处理。网络结构包含SpatialTransformer、TemporalDeformableTransformerEncoder、TemporalQueryEncoder和TemporalDeformableTransformerDecoder,其中TemporalDeformableAttention关注关键采样点以提高效率。损失函数采用一对一匹配规则,避免后处理。文章对比了与传统方法的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2022年1月

https://arxiv.org/abs/2201.05047v3

https://github.com/SJTU-LuHe/TransVOD.

DETR《End-to-End Object Detection with Transformers》

Deformable DETR《Deformable Transformers for End-to-End Object Detection》

TransVOD 《End-to-End Video Object Detection with Spatial-Temporal Transformers》

标题一脉相承

本文笔记基于2021.5版本,比较老;新版的论文加入了TransVOD++,在此并未详述。

1 简介

DETR和Deformable DETR用于Object Detection,可以在减少人工设计的组件(非最大抑制、Anchor生成)的情况下仍然取得较好的效果。

下图为DETR示意图

而TransVOD就是将这种思想运用到VOD(video object detection)中,减少人工设计组件的数量,例如光流、RNN以及关系网络等。另外,本文的方法不需要进行后处理。

2 网络结构

对于当前帧,使用一系列视频帧作为输入,输出当前帧的检测结果。

在DETR的基础上加上一个Temporal transformer。

Temporal transformer由三个部分构成, Temporal Deformable Transformer Encoder (TDTE) ,Temporal Query Encoder (TQE) ,and Temporal Deformable Transformer Decoder (TDTD)。对于每一帧,这几个模块都是共享的,并通过端到端的方式进行训练。

网络整体结构由以下四部分组成:

  • Spatial Transformer

使用Deformable DETR作为静态图片的检测器,包括Spatial Transformer Encoder和Spatial Transformer Decoder,将每一帧编码成Spatial Object Query Qt和Memory Encoding Et。

  • Temporal Deformable Transformer Encoder (TDTE)

编码时空信息,为最后的decoder输出提供位置信息。

使用Temporal Deformable Attention采样部分有效信息,在时间维度上连接Memory Encodings Et,并抑制背景噪声。

Temporal Deformable Attention的核心思想是只关注少部分关键的采样点,从而实现更加高效的特征聚合。

下图中的详细解释与Deformable DETR原文基本一样,唯一的区别是l从指代输入特征层改为指代视频帧:

  • Temporal Query Encoder (TQE)

将当前帧与其他参考帧的spatial object queries进行关联,利用参考帧来增强当前帧的输出。

结合所有参考帧的spatial object queries,标记为Qref,以coarse-to-fine的方式来进行打分和筛选。利用一个额外的FFN来预测类别,然后计算

根据p值对参考点进行排序,从这些参考点中选出top-k值。

这些选出的值将会被送入feature refiners,与从不同帧中提取出的object queries进行交互,计算与当前帧输出的co-attention。

将带有cross-attention模块的decoder层作为feature refiner,迭代地更新每个Spatial Transformer的输出queries,最后得到temporal object query,作为TDTD的输入。

Tip:

TopK是一种计算准确率的方法,在多分类任务中经常出现,如 cifar100 这个100分类任务中,衡量预测是否准确可以:

1、Top1 准确率:直接对比网络计算得到的output中概率最高的那个类别和标签类别是否一致,如果一致则判断正确,否则错误。

2、Top5 准确率:对比output中概率前五的类别中是否有标签的类别,有则判断正确,否则就是判断错误。

很明显,K越大对于网络的评价标准越宽容。

  • Temporal Deformable Transformer Decoder (TDTD)

TDTD以TDTE(fused memory encodings)和TQE(temporal object queries)的输出作为输入,输出当前帧最终的检测结果。

下图中的具体解释与Deformable DETR原文完全一样:

损失函数

原始的DETR避免了后处理,并采用一个one-to-one的标签规则。

用Hungarian 算法来match ground truth 和 TDTD的预测结果

因此Spatial Transformer的训练过程与原始DETR一致。

Temporal Transformer使用相似的损失函数。

3 对比

### Video Vision Transformer 架构与实现 #### 概述 Vision Transformers (ViTs) 已经被扩展至处理视频数据,形成了 Video Vision Transformers (VidTrans)[^1]。这类模型通过引入时间维度来捕捉动态场景中的时空特征。 #### 基本架构设计 Video Vision Transformer 主要由以下几个部分组成: - **输入层**: 将连续帧图像切分为固定大小的patch序列,并映射到相同维度的空间向量表示。 - **位置编码**: 添加一维的时间嵌入和二维空间嵌入以保留像素间相对距离信息以及各帧之间顺序关系。 - **多头自注意力机制(Multi-head Self-Attention)**: 这种结构允许模型关注不同片段内的局部区域及其跨帧变化模式[^2]。 - **前馈神经网络(Feed Forward Networks, FFNs)** 和 **残差连接(Residual Connections)** : 提升表达能力和加速收敛过程。 - **分类头部(Classification Head)** 或其他特定任务模块:用于最终预测输出如动作识别标签等。 ```python import torch.nn as nn from einops.layers.torch import Rearrange class VidTrans(nn.Module): def __init__(self, num_frames=8, image_size=224, patch_size=16, dim=768, depth=12, heads=12, mlp_dim=3072): super().__init__() self.patch_embedding = nn.Sequential( Rearrange('b t c (h p1) (w p2) -> b t (h w) (p1 p2 c)', p1=patch_size, p2=patch_size), nn.Linear(patch_size * patch_size * 3, dim) ) # Positional embedding for spatial & temporal dimensions self.pos_emb_spatial = nn.Parameter(torch.randn((image_size//patch_size)**2 + 1, dim)) self.pos_emb_temporal = nn.Parameter(torch.randn(num_frames + 1, dim)) transformer_layers = [] for _ in range(depth): layer = nn.TransformerEncoderLayer(d_model=dim, nhead=heads, dim_feedforward=mlp_dim) transformer_layers.append(layer) self.transformer_encoder = nn.TransformerEncoder(transformer_layers[-1], num_layers=len(transformer_layers)) self.class_token = nn.Parameter(torch.zeros(1, 1, dim)) def forward(self, x): B, T, C, H, W = x.shape cls_tokens = self.class_token.expand(B*T, -1, -1).to(x.device) patches = self.patch_embedding(x.view(-1,C,H,W)).reshape(B,T,-1,self.dim) tokens_with_cls = torch.cat([cls_tokens.unsqueeze(dim=1),patches],dim=-2) pos_embedded = tokens_with_cls + self.pos_emb_spatial[:tokens_with_cls.size(-2)] + \ self.pos_emb_temporal[:T].unsqueeze(1).expand_as(tokens_with_cls[:,:,:,0]) out = self.transformer_encoder(pos_embedded.permute(1,0,2)) return out.mean(dim=[0,1]) # Global average pooling over all frames and patches. ``` 此代码展示了如何构建一个简单的 Video Vision Transformer 模型框架,在实际应用中可能还需要考虑更多细节优化,比如更复杂的预处理方式、正则化手段或是针对具体应用场景调整超参数设置等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值