双流网络、、、

简介

双流CNN通过效仿人体视觉过程,对视频信息理解,在处理视频图像中的环境空间信息的基础上,对视频帧序列中的时序信息进行理解,为了更好地对这些信息进行理解,双流卷积神经网络将异常行为分类任务分为两个不同的部分。单独的视频单帧作为表述空间信息的载体,其中包含环境、视频中的物体等空间信息,称为空间信息网络;另外,光流信息作为时序信息的载体输入到另外一个卷积神经网络中,用来理解动作的动态特征,称为时间信息网络,为了获得比较好的异常行为分类效果,我们选用卷积神经网络对获得的数据样本进行特征提取和分类,我们将得到的单帧彩色图像与单帧光流图像以及叠加后的光流图像作为网络输入,分别对图像进行分类后,再对不同模型得到的结果进行融合。双流卷积神经网络结构如下图所示:

               

网络的具体结构

深度学习的效果好坏,很大程度上取决于网络的结构,目前深度学习的浪潮也催生了很多应用于不同任务的优秀网络结构,随着研究的深入和网络结构的加深,不同结构得出的效果也证实,随着网络层次结构的合理加深,网络的效果也有相应的提升。原始双流CNN的时空信息结构使用的是中等规模的卷积神经网络CNN_M网络结构。其网络结构如下图所示:

               

CNN_M的结构设计基本上和AlexNet是同一种思路,包括5层卷积层和3层全连接层,网络的输入图像尺寸被固定在224×224。与
AlexNet相比,CNN_M包含更多的卷积滤波器。第一层卷积层的卷积核尺寸缩小为7×7,卷积步长减小为2,其他层次的参数都与
AlexNet相同。通过增加滤波器的数量,减小滤波器的尺寸和步长,CNN_M可以更好地发现和保留原始输入图像的细节信息,因此,CNN_M学习到的滤波器较之前的网络结构有更好的鲁棒性和更高的准确率。CNN_M在ILSVRC-2014物体识别任务上获得了
13.5%的top 5错误率,较之前的网络模型有大幅度的减少。
 


训练

神经网络训练任务中一个较为重要的过程就是如何对各个神经元进行权重的初始化。神经元初始权重的选择将直接影响到网络的收敛速度以及训练效果,如何选择一种合适的初始化方式也成为了我们需要解决的问题。常用的初始化方法包括全0全1初始化、高斯随机初始化、标准方差初始化等,但是效果往往一般。在实际应用中,由于数据集的大小有限,迭代的次数过少,容易造成网络的过拟合或者网络不收敛,这样得到的网络效果通常很差,因此,通常不会直接训练卷积神经网络,而是使用迁移学习的方法对预训练好的网络模型在不同的数据集上进行微调,从而获得更好的效果。
 
如果选择目标分类任务场景相似的大规模数据集来进行预训练,由于新任务的数据量较小,容易造成过拟合。因此,选取ImageNet ILSVRC-2012物体分类数据集对网络进行预训练,然后再在动作分类数据集上进行微调。对于空间信息,直接使用RGB单帧图像进行训练和预测,预训练数据集和动作视频数据集的模式相差不多,但对于时序信息的光流特征,光流场的模式与普通RGB图像有所差异,所以对光流图像进行上一节中所述的处理,将光流矢量投影到0到255的区间内,用彩色图像的形式对光流矢量图进行表示。在之后的实验中,发现通过RGB图像预训练的模型对光流图像的训练也同样适用。

另外,由于在ImageNet上预训练了模型,需要调小模型训练初始的学习率,并根据训练的迭代次数对学习率实时进行调整,随着迭代次数的增多,减小学习率。最终得到在动作数据集上训练好的网络模型,并且可以根据具体的应用场景以及数据集模式对模型加以调整,进行迁移学习。

### YOLO双流网络架构及其实现 YOLO(You Only Look Once)是一种高效的实时目标检测算法,而双流网络通常用于处理视频中的时空特征提取。YOLO双流网络可以被理解为一种结合了空间和时间信息的目标检测方法[^1]。 #### 双流网络的概念 双流网络由两个分支组成:一个是负责捕捉静态图像的空间流(Spatial Stream),另一个是通过光流法捕捉动态变化的时间流(Temporal Stream)。这种设计允许模型同时学习物体的外观以及其运动模式。 #### YOLO与双流网络的融合 为了将YOLO应用于双流框架下,可以通过以下方式实现: 1. **空间流** 使用标准的YOLO模型来分析单帧图片中的对象位置及类别。输入数据通常是RGB格式的静止图像。 2. **时间流** 利用预计算好的密集光流向量作为输入替代原始像素值送入另一版调整过的YOLO网络中去预测基于动作的信息。 以下是简单的伪代码展示如何构建这样的体系结构: ```python import torch.nn as nn class TwoStreamYOLO(nn.Module): def __init__(self, num_classes=80): super(TwoStreamYOLO, self).__init__() # 定义空间流 (RGB 图像) self.spatial_stream = create_yolo_model() # 创建基础YOLO模型 # 定义时间流 (光流图) self.temporal_stream = create_yolo_model() # 调整最后一层适应不同类型的输出 self.fusion_layer = nn.Conv2d(in_channels=..., out_channels=num_classes, kernel_size=...) def forward(self, rgb_image, optical_flow): spatial_out = self.spatial_stream(rgb_image) temporal_out = self.temporal_stream(optical_flow) fused_output = self.fusion_layer(torch.cat([spatial_out, temporal_out], dim=1)) return fused_output ``` 此代码片段定义了一个`TwoStreamYOLO`类,它继承自PyTorch的`nn.Module`基类,并初始化两条独立路径——一条针对常规视觉数据;另一条则专门接收光学流动态线索。 #### 数据准备注意事项 当训练此类模型时需要注意两点: - 对于时间流部分需要额外生成对应的光流场; - 确保两路输入具有相同的分辨率以便后续融合操作顺利进行。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wanderer001

ROIAlign原理

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值