Pseudo-3D Residual Networks 算法笔记

Pseudo-3D Residual Networks(P3D ResNet)是ICCV2017提出的一种优化3D卷积的方法,用于视频分类。通过1*3*3和3*1*1卷积代替3*3*3卷积,降低计算成本,提高速度,同时在Sports-1M和UCF101数据集上表现出优于传统3D卷积网络和ResNet的性能。P3D ResNet通过不同结构的组合实现性能提升,其速度和准确率的平衡使其成为视频理解领域的有效解决方案。

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

论文:Learning Spatio-Temporal Representation with Pseudo-3D Residual Networks
论文链接:http://openaccess.thecvf.com/content_ICCV_2017/papers/Qiu_Learning_Spatio-Temporal_Representation_ICCV_2017_paper.pdf
官方代码:https://github.com/ZhaofanQiu/pseudo-3d-residual-networks
第三方代码:https://github.com/qijiezhao/pseudo-3d-pytorch

ICCV2017的文章。在视频分类或理解领域,容易从图像领域的2D卷积联想到用3D卷积来做,虽然用3D卷积进行特征提取可以同时考虑到spatial和temporal维度的特征,但是计算成本和模型存储都太大,因此这篇文章针对视频领域中采用的3D卷积进行改造,提出Pseudo-3D Residual Net (P3D ResNet),思想有点像当年的Inception v3中用1*3和3*1的卷积叠加代替原来的3*3卷积,这篇文章是用1*3*3卷积和3*1*1卷积代替3*3*3卷积(前者用来获取spatial维度的特征,实际上和2D的卷积没什么差别;后者用来获取temporal维度的特征,因为倒数第三维是帧的数量),毕竟这样做可以大大减少计算量,而如果采用3D卷积来做的话,速度和存储正是瓶颈,这也使得像C3D算法的网络深度只有11层,参看Figure1。该文章的网络结构可以直接在3D的ResNet网络上修改得到。顺便提一下,除了采用3D卷积来提取temporal特征外,还可以采用LSTM来提取,这也是当前视频研究的一个方向。

Figure1是几个模型在层数、模型大小和在Sports-1M数据集上的视频分类效果对比,其中的P3D ResNet是在ResNet 152基础上修改得到的,深度之所以不是152,是因为改造后的每个residual结构不是原来ResNet系列的3个卷积层,而是3或4个卷积层,详细可以看Figure3,所以最后网络深度是199层。官方github代码中的网络就是199层的。ResNet 152是直接在Sports-1M数据集上fine tune得到的。可以看出199层的P3D ResNet虽然在模型大小上比ResNet-152(此处ResNet-152是在sports-1M数据集上fine tune得到的)大一些,但是准确率提升比较明显,与C3D(此处C3D是直接在sports-1M数据集上从头开始训练得到的)的对比在效果和模型大小上都有较大改进,除此之外,速度的提升也是亮点,后面有详细的速度对比。
这里写图片描述

既然想用1*3*3卷积和3*1*1卷积代替3*3*3卷积,那么怎样组合这两

### 伪3D残差网络用于时空特征表示学习 伪3D残差网络(Pseudo-3D Residual Networks, P3D)是一种通过分解3D卷积操作来高效学习视频数据中时空特征的方法。这种方法的核心在于将复杂的3D卷积运算分为时间维度上的1D卷积和空间维度上的2D卷积,从而显著降低计算复杂度和内存需求。 #### 核心原理 传统的3D卷积可以直接捕捉视频中的时空信息,但由于其高计算成本和内存占用,难以扩展到深层网络结构。P3D网络通过引入三种不同的模块化设计——即 **Type A**, **Type B**, 和 **Type C** ——实现了对3D卷积的有效近似[^1]。这些模块分别对应于不同的时空建模策略: 1. **Type A**: 首先应用一个单独的时间卷积 (1×3×3),随后是一个标准的空间卷积 (3×1×1)。 2. **Type B**: 将时间卷积与空间卷积融合为单一的操作单元,其中时间卷积嵌入在两个空间卷积之间。 3. **Type C**: 反转顺序,首先执行空间卷积 (3×3×1),再接续时间卷积 (1×1×3)。 这种模块化的设计允许灵活调整模型的复杂性和性能表现,同时保持较低的资源开销。 #### 实现细节 为了进一步理解如何构建P3D网络,以下是其实现的关键部分: 1. **基础架构继承自ResNet** P3D网络的基础框架来源于经典的二维残差网络(ResNet)。它通过对原始ResNet层进行修改,加入额外的时间维度处理能力,形成适合视频分析的新组件。 2. **多尺度特征提取** 利用堆叠的不同类型的P3D块,可以在多个尺度上捕获丰富的动态特性。例如,在高层级上关注长期依赖关系;而在低层级则更注重局部运动模式。 3. **优化目标函数** 训练过程中通常采用交叉熵损失作为分类任务的主要指标,并可能结合其他正则项以提升泛化能力和防止过拟合。 下面展示了一段简单的PyTorch代码示例,演示如何定义基本的P3D Type B Block: ```python import torch.nn as nn class P3DBlockB(nn.Module): def __init__(self, in_channels, out_channels, kernel_size=3, stride=1, padding=1): super(P3DBlockB, self).__init__() # Spatial Convolution self.spatial_conv = nn.Conv3d(in_channels, out_channels, kernel_size=(1, kernel_size, kernel_size), stride=stride, padding=(0, padding, padding)) # Temporal Convolution self.temporal_conv = nn.Conv3d(out_channels, out_channels, kernel_size=(kernel_size, 1, 1), stride=1, padding=(padding, 0, 0)) def forward(self, x): identity = x # Apply spatial convolution first out = self.spatial_conv(x) # Followed by temporal convolution out = self.temporal_conv(out) return out + identity ``` 此代码片段展示了如何创建一个基于Type B配置的小型P3D块实例。 #### 特征可视化 文章还探讨了通过DeepDraw工具对学到的行为类别进行可视化的过程[^3]。尽管生成的结果质量有限,但它揭示了网络确实能够识别特定动作的相关视觉线索。例如,“摩托车竞赛”的案例显示出了清晰的比赛场景特征。 --- ### 总结 综上所述,伪3D残差网络提供了一种高效的解决方案,能够在减少硬件负担的同时保留强大的时空表达能力。这对于实时视频处理以及大规模数据集的应用尤为重要。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值