T-C3D 实时行为识别时序卷积网络

介绍了T-C3D网络,一种实时动作识别架构,基于3D-CNN学习多粒度视频表示,解决了长时序动作识别问题。文章讨论了网络结构、聚合函数及实验结果。

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

论文名称:T-C3D:TemporalConvolutional3D NetworkforReal-TimeActionRecognition 

论文地址:https://aaai.org/ocs/index.php/AAAI/AAAI18/paper/view/17205

代码地址:https://github.com/tc3d

最近忙于写论文,也没有时间写博客,今天,我给大家带来一篇行为识别文章《T-C3D:TemporalConvolutional3D NetworkforReal-TimeActionRecognition 》,这篇文章是2018年发表在ECCV上的一篇经典文章,文章出自于北京邮电大学。T3D网络在baseline数据集UCF-101和HMDB-51数据集上精度分别达到了91.8%和62.8%。这篇文章的贡献如下:

  • 提出了一个基于3D-CNN的实时动作识别架构,来学习多种粒度的视频表示。学习的特征不仅能够模拟短视频片段之间随时间变化,而且能够模拟整个视频的时间动态;
  • 提出了一种具有聚合函数的时间编码技术来模拟整个视频的特征,这大大提高了识别性能;
  • 只使用RGB帧作为CNN的输入来实时处理动作识别,同时取得了与现有方法相当的性能。

在开始文章讲解之前,我想简单介绍一些当下行为识别和语义分割的研究热点。其实行为识别和语义分割都属于分类任务,其区别在于分类的关注点不同,但是在随着这两个方向的不断发展,出现了很多要解决的问题,比如语义分割中的FCN网络存在对小目标分割丢失的问题或大目标分割不全的问题。对于行为识别,对于短动作的行为识别,目前的方法已经达取得的很好的结果,但是对于长时序的动作,目前方法还存在问题。其实对于分割和行为识别面临问题属于同一类问题,解决该问题的思路是:局部特征提取,最后进行局部特征融合形成全局的特征。典型网络代表:语义分割PSPNet,行为识别T-C3D。本段话纯属个人理解,如有问题请留言。

按照我写博客的一贯作风,我首先介绍文章的创作灵感,之后当下的一些研究状况,紧接着是研究方法(文章的灵魂),最后是实验部分。

本文创作的的目的是为了解决行为识别网络不实时问题和长时序动作识别问题。那么什么是实时呢?在行为识别领域,具体实时是指端到端的训练,而对于双流网络,由于其结合的光流信息,需要额外时间计算光流图,导致网络不能端到端训练。对于

                                                                                    图1 长短时序动作

长时序动作,为了直观理解,看图1,“弹钢琴”和“射箭”可以很容易地通过静态画面或连续画面之间的小动作的外观信息来识别,然而,有时短剪辑不足以区分类似的类别(跳高和跳远),这时候需要考虑全局的时序特征来进行判别。同时该网络也可以在提取局部时序特征时候,几个卷积共享参数,所以可以大大减低参数量,这个后续用网络结构图来进行解释。

接下来介绍一下行为识别的研究领域最新情况和面临的问题。面临的挑战具体有,视频尺度的变化,杂乱的背景,视点的变化,相机的移动等对网络判别行为有很大的影响,这也是行为识别精度上不去的原因之一,同时,和静态图片识别相比,行为识别是一个序列问题,动作要通过多帧结合来进行有效的识别。在过去的十年中,基于视频的行为识别一直在研究中,开始是基于手工设计的方式来获取视频局部的时空特征,然而,手工特征方式面临设计繁琐,存在大量冗余的特征,具体代表方法有IDT,HOG3D,SIFT-3D。之后随着深度学习的发展,利用卷积来自动提取时空特征成为了主流,这也是现阶段发展的主要方向,具体代表网络有C3D,双流网络。

现在我们介绍本文的重点网络结构,具体如图2,输入为整个视频,分成多个片段作为网络的输入,之后每个片段通多3D CNN来提取局部的时空特征,这些3D CNN共享权重,之后将多个片段进行融合行为对整个视频的表示,最后通过softmax进行行为判别。为了详细阐述这个结构,文章引入了几个部分,具体由Temporal Encoding Model(时序编码模型),Video Components Generation(视频成分产生),3D Convolution Neural Network(3D卷积网络),Aggregation Functions(聚合函数)。接下来对每个部分进行详细介绍:

                                                                          图2 T-C3D网络结构

Temporal Encoding Model

为了刻画视频的整体特征,引入了Temporal Encoding Model。形式上,给定一个视频V,在时间维上把它统一划分为S部分{P1,P2,P3,…,Ps},然后从Pi中选择一系列帧组成片段Ci。接下来,通过将每个片段经过3D-CNN的作用,获得S个特征图。将S个clips通过聚合函数作用得到视频级特征。最后,根据视频级特征得出最终的类别分数。不同于以往的工作,T-C3D通过视频级而非帧级预测来优化和更新其参数。具体公式如图3,W表示3D CNN的权重,F:表示激活函数,Q:表示聚合函数,H:表示预测函数,用来产生每个类别的概率得分。关于分段损失函数如图4,其中 G = Q(F(C1; W); F(C2; W); ...;F(Cs; W)) ,模型参数导数计算如图5,用于参数更新。

                                                                     图3 视频最终的类别得分

                                                                                  图4 损失函数

                                                                                  图5 权重导数

Video Components Generation

与静止图像不同,视频是动态的,并且具有不同的序列。为了利用良好的方式对整个视频进行建模,作者首先在时间维度上将视频统一划分为几个部分。然后用两种常用的抽样方案从每个部分抽取多个帧,构成一个clip。第一种方案将前一步生成的视频片段统一划分为一定数量的fragments,并从每个fragments中随机选择一帧构成最终的片段。第二种方法从fragments中随机选择一定数量的连续帧来构造最终片段。实质上,第一采样方法随机选择均匀分布在整个视频中的非连续帧来表示整个视频。第二种方法从整个视频中均匀地选择S个片段,每个片段由一定数量的连续帧组成。后续实验部分给出了两种不同的下采样方法的分类精度。

3D Convolution Neural Network

首先,受深度残差CNN所获得的惊人的图像分类精度的启发,文章采用了一种带有残差块的深度3D-CNN网络。更特别的是,根据ConvNet架构搜索的工作,采用了17个卷积层和一个完全连接层的3D ResNet。实验表明,在给定的多帧图像中,深度残差的3D-CNN可以提取出更丰富、更强的时空特征层次。其次,对CNN的参数进行预训练在大规模数据集上,已被证明对各种视觉任务非常关键,例如目标检测、图像分类、语义分割等。对于3D-CNN,先前的工作如LTC已经表明,在Sprots-1M上预先训练的3D模型比从头训练的模型具有更高的分类精度。本文首先按照C3D中的策略,对Sports-1M模型进行了预训练,虽然Sports-1M有超过100万个视频,但由于没有人工标注,因此含有大量的噪声。最近,Kay(Kay等人。2017)等人提出了一个大规模、干净的数据集,称为Kinetics,涵盖400个人类行为类别,每个行为至少有400个视频clips。为了尽可能地激活3D-CNN中的神经元,作者采用时间编码的方法对3D-CNN进行了Kinetics数据集上训练,实验表明,Kinetics预训练显著提高了训练效果。

Aggregation Functions

聚合函数是T-C3D框架中非常重要的组件。文章详细描述和深入分析四个聚合函数,包括平均池、最大池、加权池和注意力池。接下来我进行一一阐述,这很重要。

  • 平均池:平均池的基本假设是利用所有片段的激活进行动作识别,并将其平均响应作为整体视频预测。从这个角度来看,平均池能够联合描述视频片段序列并从整个视频中获得视觉特征。然而,一些视频可能包含与动作无关的噪声序列,在这种情况下,对这些噪声片段进行平均无法准确地建模动作特征,可能导致识别性能的下降。
  • 最大池:max pooling的基本直觉是为每个动作类别选择最具辨别力的clip,并以这种最强的响应来表示整个视频,直观地说,它专注于单个clip,而不考虑其他剪辑的激活。在某些情况下,单个clip的辨别力不足以捕获整个视频信息。在某种程度上,T-C3D退化到了以前的工作,即在使用最大池时,用每个视频一个clip来训练网络。因此,这种聚合功能驱动T-C3D仅用一个片段来表示整个视频,这违背了T-C3D对整个视频建模的假设。
  • 加权池:此聚合函数的目标是生成一组线性权重,以便在每个clip的输出之间执行元素加权线性融合。实验中,网络权值W和融合权值ω同时优化。该聚合函数根据动作总是由多个阶段组成,这些不同的阶段在识别动作类时可能有不同的影响而产生,同时该聚合函数结合了最大池和均匀池的优点,能够同时减少相关片段的序和噪声片段的不良影响。具体是采用了以S×1为核的卷积层来实现该功能。具体函数定义为如图6.
  • 注意力池:此聚合函数的目标与加权池方法相同。它借用了一种端到端可训练记忆网络的记忆注意机制。直觉是利用一个神经模型通过一个可辩别的处理/注意方案读取外部记忆。具体作者将每个片段的输出视为记忆,将特征权重视为记忆处理程序。形式上,让Fs作为第s个片段的经过3D-CNN的特征图,然后聚合模块通过点积用核q对其进行过滤,生成相应的权值序列。具体如图7.

                                                                                 图6 加权池作用机理

                                                                                图7 注意力池作用机理

最后是实验部分,这部分主要是说明T-C3D最优性和探索实验。图8是T-C3D和一些主流方法的对比。图9帧两种采样方式对比,前面有阐述。图10不同聚合方式对比。图11不同训练方式比较,其中多尺度表示对输入进行裁剪和采用镜像(图像增强)。

                                                                                    图8 和一些主流模型对比

                                                                                      图9 不同采样方式对比

                                                                                    图10 不同聚合函数对比

                                                                              图11 对于T-C3D不同训练方式比较

<think>好的,用户现在想了解深度学习中用于时序行为识别的核心算法。之前我已经给出过相关的详细回答,现在需要根据用户提供的三个引用和之前的回答来进一步调整和补充。首先,我需要确认用户的需求是否有所变化,或者是否有需要强调的新内容。 用户提供的引用包括语音识别中的深度学习流程、群组行为识别的弱监督方法,以及TCN在时序预测中的应用。虽然这些引用可能与时序行为识别相关,但用户明确提到要参考这些引用并结合之前的回答。所以需要判断这些引用中的内容是否适用于当前的查询。 首先,用户的上一个问题涉及3D CNN、双流网络、RNN/Transformer等算法,现在的问题则是询问核心算法,可能需要更精炼的总结,同时结合新的引用中的信息。例如,引用3提到TCN,这可能是一个需要补充到核心算法中的点,因为TCN在处理长序列时有效,而之前回答中可能没有提到。 接下来,我需要回顾之前的回答结构,将核心算法分类,并检查是否有遗漏。之前的回答分为3D CNN、双流网络、RNN/Transformer,现在可能需要加入TCN作为第四类。同时,引用2提到群组行为识别中的弱监督与半监督方法,这可能涉及到多模态融合或半监督学习策略,可以补充到模型优化策略中。 然后,用户可能希望得到更结构化的回答,比如分点列出核心算法,并附上关键公式、实现代码示例等。需要确保每个算法都有清晰的原理说明、数学表达、代码片段(如果有的话)、优缺点以及应用场景。 同时,用户提供的引用1关于语音识别的流程可能并不直接相关,但可以类比数据预处理和训练技巧部分,不过可能不需要特别提及。而引用3的TCN需要被整合到时序建模部分,作为传统RNN的替代方案,强调其并行计算能力和处理长期依赖的优势。 另外,引用2提到的弱监督与聚类结合的方法,可以在模型优化或应用场景中提及,尤其是在处理未标记数据时的策略,这可能补充到训练技巧或挑战与解决方案部分。 需要确保回答中的引用标识正确对应,比如之前回答中的[^4]和[^2],现在用户提供的引用是[^1]、[^2]、[^3],但根据用户指示,应参考用户上一次的问题和回答,所以可能需要保留原有的引用标记,如[^4]和[^2],同时将新的引用内容融入,但用户可能并没有要求新增引用,而是希望参考这些引用的内容来调整回答。不过用户明确说“上述引用仅供参考”,所以可能需要将TCN作为补充算法加入,而弱监督方法可以作为优化策略的一部分。 最后,生成的相关问题需要围绕核心算法展开,比如TCN的优势、双流网络的改进方法、弱监督学习的应用等。</think>### 基于深度学习的时序行为识别核心算法详解 --- #### **一、核心算法分类与原理** 时序行为识别的核心在于**时空特征联合建模**与**长时序依赖捕捉**,以下是四大核心算法框架: --- ##### **1. 3D卷积神经网络3D CNN)** - **原理**: 通过三维卷积核(宽×高×时间)直接提取时空特征,典型公式为: $$ F_{out}(x,y,t) = \sum_{i=-k}^{k} \sum_{j=-k}^{k} \sum_{m=-d}^{d} W(i,j,m) \cdot F_{in}(x+i, y+j, t+m) $$ 其中$k$为空间核尺寸,$d$为时间维度跨度。 - **代码实现**: ```python import torch.nn as nn class C3D(nn.Module): def __init__(self): super().__init__() self.conv3d = nn.Conv3d(3, 64, kernel_size=(3,3,3), padding=1) self.pool3d = nn.MaxPool3d(kernel_size=(2,2,2)) ``` - **优点**:端到端学习,无需手动设计特征。 - **缺点**:计算量极大(如C3D处理16帧视频需约20G FLOPs)[^2]。 - **应用**:短时动作识别(如UCF101数据集)。 --- ##### **2. 双流网络(Two-Stream Networks)** - **架构**: - **空间流**:处理RGB帧,使用预训练的2D CNN(如ResNet)提取静态特征。 - **时间流**:处理光流序列,捕捉运动信息(光流计算公式): $$ I_x(u)v_x + I_y(u)v_y + I_t(u) = 0 $$ 其中$I_x, I_y$为空间梯度,$I_t$为时间梯度。 - **融合方式**: - 晚期融合:加权平均分类得分。 - 中期融合:特征拼接后接全连接层。 - **优化**: 使用TV-L1光流算法加速(OpenCV实现仅需10ms/帧)[^4]。 --- ##### **3. 时序建模网络(RNN/Transformer/TCN)** - **RNN/LSTM**: - 时序状态传递公式: $$ h_t = \sigma(W_{xh}x_t + W_{hh}h_{t-1} + b_h) $$ - 缺点:难以并行计算,长序列梯度消失。 - **Transformer**: - 多头自注意力机制: $$ \text{Attention}(Q,K,V) = \text{Softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V $$ - 优势:全局时序建模,并行计算高效(如TimeSformer在1000帧视频中提速3倍)[^最新研究]。 - **TCN(时序卷积网络)**[^3]: - 核心组件: - **因果卷积**:保证$t$时刻输出仅依赖$t$及之前输入。 - **空洞卷积**:扩展感受野,公式为: $$ F(t) = \sum_{k=0}^{K-1} w(k) \cdot x(t - d \cdot k) $$ 其中$d$为空洞率。 - **残差连接**:避免深层网络退化。 - 代码片段: ```python class TCNBlock(nn.Module): def __init__(self, in_ch, out_ch, dilation): super().__init__() self.conv = nn.Conv1d(in_ch, out_ch, kernel_size=3, padding=dilation, dilation=dilation) self.res = nn.Conv1d(in_ch, out_ch, 1) if in_ch != out_ch else None ``` --- ##### **4. 图卷积网络(GCN)** - **适用场景**:人体骨骼时序行为识别(如NTU-RGB+D数据集)。 - **建模方法**: - 将人体关节坐标构建为时空图(节点=关节,边=骨骼连接+时序连续性)。 -卷积公式: $$ H^{(l+1)} = \sigma\left(\tilde{D}^{-\frac{1}{2}} \tilde{A} \tilde{D}^{-\frac{1}{2}} H^{(l)} W^{(l)}\right) $$ 其中$\tilde{A}=A+I$为添加自连接的邻接矩阵。 --- #### **二、算法对比与选型** | 算法类型 | 优点 | 缺点 | 适用场景 | |----------------|-------------------------------|-------------------------------|---------------------------| | **3D CNN** | 时空特征联合提取 | 计算成本高,长序列处理弱 | 短视频片段分类 | | **双流网络** | 运动特征显式建模 | 依赖光流计算,实时性差 | 精细动作识别(如手势) | | **Transformer**| 长时序依赖建模,并行能力强 | 数据需求大,内存消耗高 | 多视角长视频分析 | | **TCN** | 并行计算,长期记忆稳定 | 局部特征优先,空间建模弱 | 实时行为检测(如跌倒预警)| | **GCN** | 骨骼拓扑结构显式利用 | 依赖姿态估计精度 | 人体动作识别 | --- #### **三、关键优化策略** 1. **时空特征解耦**: -3D卷积分解为2D空间卷积 + 1D时间卷积(如SlowFast网络)[^4]。 - 公式实现: $$ F_{\text{out}} = \text{Conv2D}(X) \oplus \text{Conv1D}(X) $$ 2. **弱监督与半监督结合**: - 使用聚类算法(如K-means)对未标注视频特征分组。 - 设计联合损失函数: $$ \mathcal{L} = \alpha \mathcal{L}_{\text{cls}} + \beta \mathcal{L}_{\text{cluster}} $$ 3. **多模态融合**: - 融合RGB、光流、音频等多模态输入(如MMAction框架)。 - 跨模态注意力机制: $$ \text{Fusion}(Q,K) = \text{Softmax}(QK^T) \cdot V $$ --- #### **四、典型代码实现(TCN+Transformer混合模型)** ```python class HybridModel(nn.Module): def __init__(self): super().__init__() # TCN部分:提取局部时序特征 self.tcn = nn.Sequential( TCNBlock(64, 128, dilation=1), TCNBlock(128, 256, dilation=2) ) # Transformer部分:捕捉全局依赖 self.trans_encoder = nn.TransformerEncoder( nn.TransformerEncoderLayer(d_model=256, nhead=8), num_layers=3 ) def forward(self, x): x = self.tcn(x) # shape: (B, C, T) x = x.permute(2, 0, 1) # (T, B, C) for Transformer x = self.trans_encoder(x) return x[-1] # 取最后时刻输出 ``` --- ### **相关问题** 1. TCN中的空洞卷积如何平衡感受野与计算效率? 2. 在Transformer中如何设计高效的时空位置编码? 3. 如何将图卷积网络(GCN)与3D CNN结合用于多模态行为识别? 4. 弱监督学习方法在数据标注成本高的场景下如何优化?[^2]
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值