【论文笔记】TSN(Temporal Segment Networks: Towards Good Practices for Deep Action Recognition)

TSN(Temporal Segment Networks)旨在解决现有动作识别模型对长期时间信息分析不足的问题,通过稀疏采样策略和双流网络结构,结合光流与RGB信息。在有限数据下,通过预训练、正则化和增强数据增强等手段提高模型性能。文章探讨了端到端网络的概念,指出TSN并非端到端模型,并分享了论文中的关键发现和实验结果。

【注】这是我在动作识别领域,认真研读的第一篇文章,对很多概念还理解得不透彻,名词翻译不准确,请大家谅解并在评论区指正。最近正在看TSN的实现代码,后期还会出一篇代码研读的博客。

解决问题(motivation):

  1. 现有模型缺乏对long-range时间动作信息的分析
    目前主流的动作识别模型,往往专注于提取空间信息(appearance)和short-term的时间动作信息,缺乏对long-range的时间动作信息的分析应用。而不去提取long-range的时序信息的原因,在于现有解决方案使用的是稠密时序采样(dense temporal sampling with a predefined sampling interval),这会导致极大的计算量,导致特征提取的视频长度有限。
  2. 训练数据有限
    由于视频数据的采集和标注十分困难,现有的训练数据十分有限。例如现有的两个主流数据集:UCF101,HMDB51,在大小以及动作类别上都十分有限。如何在有限的数据下训练得到效果较好的模型也是一个问题。

解决方案(方案关键点):

1.提出基于双流网络结构的TSN网络 ,并使用稀疏采样的策略,获得视频长度上的时间动作信息。

2.在模型训练中使用一系列改进方法及技巧,使得在有限的数据下模型也能较好的训练。
①cross-modality pre-training; ②regularization; ③enhanced data augmentation;④study four types of input modalities to two-stream ConvNets.
原文Fig.1

一些疑问:

  • 解决方案2中的多模态融合的实现细节?
### Temporal Segment Network (TSN) 的概念 Temporal Segment Network 是一种用于视频分析的深度学习框架,旨在通过时间片段建模来捕捉视频中的动态信息。该模型的核心思想是将整个视频划分为多个时间段,并分别提取这些时间段内的特征[^1]。 TSN 主要由三个部分组成: 1. **Segment Sampling**: 将输入视频均匀分割成若干个片段(segments)。这种采样方式有助于减少计算复杂度并提高效率。 2. **Consensus Function**: 对不同片段的预测结果进行聚合操作,通常采用平均池化或最大池化等方式。 3. **Convolutional Neural Networks (CNNs)**: 使用预训练好的 CNN 提取每一段图像帧的空间特征。 这种方法能够有效处理大规模视频分类任务,在保持较高精度的同时降低资源消耗。 ### 实现方法 以下是基于 PyTorch 的 TSN 基本实现: ```python import torch from torchvision import models, transforms from PIL import Image class TSN(torch.nn.Module): def __init__(self, num_classes=101, num_segments=3, base_model='resnet50'): super(TSN, self).__init__() self.num_segments = num_segments # 加载基础模型 if base_model == 'resnet50': self.base_model = models.resnet50(pretrained=True) feature_dim = self.base_model.fc.in_features self.base_model.fc = torch.nn.Identity() # 移除全连接层 self.consensus_func = torch.mean # 可替换为其他共识函数如 max pooling # 添加新的分类头 self.classifier = torch.nn.Linear(feature_dim, num_classes) def forward(self, x): batch_size, segments, channels, height, width = x.size() # 展平批次和片段维度以便送入网络 x = x.view(batch_size * segments, channels, height, width) features = self.base_model(x) # 获取空间特征 # 还原形状并将片段特征沿时间轴堆叠 features = features.view(batch_size, segments, -1).transpose(1, 2) # 应用共识函数 output = self.consensus_func(features, dim=-1) # 分类器 result = self.classifier(output) return result # 初始化模型实例 model = TSN(num_classes=101, num_segments=3, base_model='resnet50') print(model) ``` 上述代码定义了一个简单的 TSN 架构,其中 `num_segments` 表示视频被划分的时间段数量,而 `base_model` 则指定了用来提取空间特征的基础卷积神经网络。 ### 数据增强与预处理 为了提升性能,可以引入特定的数据增强技术以及标准化流程。例如,使用随机裁剪、翻转等手段增加样本多样性;同时利用均值减法和归一化确保数值范围一致。 ```python data_transforms = { 'train': transforms.Compose([ transforms.RandomResizedCrop(224), transforms.RandomHorizontalFlip(), transforms.ToTensor(), transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]) ]), 'val': transforms.Compose([ transforms.Resize(256), transforms.CenterCrop(224), transforms.ToTensor(), transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]) ]) } ``` 此部分展示了如何构建适合 TSN 输入的数据管道,包括训练集和验证集中不同的转换策略。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值