精华内容
下载资源
问答
  • 为了更好地对人体动作长时时域信息进行建模,提出了一种结合时序动态图和双流卷积网络人体行为识别算法。首先,利用双向顺序池化算法来构建时序动态图,实现视频从三维空间到二维空间映射,用来提取动作表观和长...
  • 该算法首先从每个视频中提取20帧图像,通过Inceptionv3模型提取图像中的深层特征,然后构建向前和向后的Bi-LSTM神经网络学习特征向量中的时序信息,接着利用注意力机制自适应地感知对识别结果有较大影响的网络权重,使...
  • 行为识别之双流卷积网络

    万次阅读 2018-11-30 19:04:30
    1、简介 从视频中进行行为识别,其挑战在于从静止帧捕获关于外观和帧间运动的补充...相比静态图像分类,视频的时序成分为行为识别提供了额外的线索(运动信息),并且视频本身对每帧图像具有天然的数据增强功能(帧...

    1、简介

    从视频中进行行为识别,其挑战在于从静止帧捕获关于外观和帧间运动的补充信息。

    贡献有三:a. 结合了时空信息  b. 多帧密集光流有助于性能提高  c. 多任务学习可用于增加训练数据量

    该网络在 UCF-101 and HMDB-51两数据集上具有较好性能表现。

    相比静态图像分类,视频的时序成分为行为识别提供了额外的线索(运动信息),并且视频本身对每帧图像具有天然的数据增强功能(帧间抖动)。

    时空双流网络分别独立地使用静态图像帧与帧间密集光流进行识别,最后进行一个结果融合。双流的解耦使空间流可以利用ImageNet预训练。

    2、双流网络架构

    双流分别为深度卷积网络,最后将两个分支softmax分数进行融合。融合方法为平均或者训练以堆叠的L2标准化的softmax分数作为特征的多类别线性SVM。

    3、光流神经网络

    时序识别网络流的输入是通过堆叠几个连续视频帧的光流位移场形成,其光流信息有几种变体选择:

    3.1  输入网络的配置

    (1)光流堆叠:

    密集光流可以描述为连续的多个的相邻两帧的位移矢量场的集合,并将矢量场分解为水平垂直两个方向成分,并将其作为两个通道的特征,为了表示一系列的帧间运动,本文堆叠了L帧的相邻帧的位移场组成2L通道的输入特征。

    表示网络的输入特征。

    (2)运动轨迹堆叠:

    光流堆叠形式的输入只是描述了相对于下一帧相对于上一帧的某一个固定点(u,v)的位移矢量,而轨迹堆叠描述的是上一帧的点位移之后的下一帧的点的位移矢量,多帧之间以此类推。

    如下为轨迹堆叠的位移矢量描述公式:

    以下是光流堆叠与轨迹堆叠的特征图对比:

    (3)双向光流

    即在正向的基础上,添加一反向的帧间位移场集合。本文采用的方法是在连续的L帧视频帧间构建光流表示,前L/2帧使用前向光流,后L/2使用反向光流。如此堆叠仍是一2L通道特征表示。光流表示可以使用上面的两种方法。

    (4)减平均光流(0中心化)

    普遍认为,对网络的输入采用0中心化可以使得模型更好地使用矫正非线性,当然就跨越大量运动而言,本模型的光流可以表现为正值与负值,自然地0中心的,即运动方向在正反方向的概率是等同的。由于两帧之间的光流是包含着相机运动位移的,在论文[10,26]中,强调了相机全局运动的重要性,故需要估计相机的运动并将其从光流中减除,而在本文,采用将光流减去均值的方法,进而缓解相机运动的影响。

    (5)网络架构

    两个流分支采用相同拓扑,光流分支输入特征为224*224*2L(某一帧)。

    3.2 时序网络分支与相关前人工作关于视频表示的联系

    特征的局部描述子多基于HOG或者HOF。双HMAX 流视频分类架构 是手工设计的特征,具有较少的层。卷积模型[12,14]没有将时空流进行解耦,而是依赖运动敏感卷积核从数据进行提取。本文是采用光流位移场明显地表示运动,是基于光流强度与光滑度的连续设想计算的。此设想应用于端到端的网络能够增强网络性能。

    4、多任务学习解决多个小数据集训练

    目的是学习一个可应用于多个数据集(HMDB-51 classification, UCF-101 classification)的抽象视频特征表示,网络修改为在最后的全连接层上接两个softmax分类层,作为两个数据集的独自分类。最后的损失即为两个损失之和。

    5、实验实现细节

    训练:训练过程可以看做是[15]的改编。权重学习使用随机梯度下降, momentum =0.9, mini-batch =256(256个视频片段,每个视频随机选择一帧)。初始学习率设置为0.01,根据固定的训练日程进行减少,50K次迭代时降为0.001,70K时降为0.0001,80K时停止。微调时,14K时改为0.001,20K时结束。

    空间网络训练:选择的视频帧(256*256)随机裁剪224*224,然后进行随机抖动与水平翻转。当然视频是提前缩放好的,最小边为256。

    时间网络训练:对选定的视频帧计算其光流表示I, 224×224×2L 的表示也是随机裁剪与翻转。

    测试:对于一个视频,均匀地采集固定的25帧,对每一帧采用四角的裁剪与水平翻转以及中间裁剪,生成10帧输入,最后的分类结果是将25帧的结果取平均。

    预训练及光流计算:

     

     

     

     

     

     

    展开全文
  • 相比于2D 卷积神经网络,3D卷积神经网络更能很好的利用视频中的时序信息。因此,其主要应用视频、行为识别等领域居多。3D卷积神经网络是将时间维度看成了第三维。 人类行为识别的实际应用: 安防监控。(检测识别...
  • 当前视频行为识别主要是在三种场景: In the Lab In TV,Movies In web videos 视频动作识别的机遇和挑战: 机遇:视觉信息提供了大量、丰富的数据用于视觉理解;动作是运动感知的核心且能够衍生许多...

    VALSE2019  王利民 南京大学

    一、基于视频的时序建模和动作识别方法

    当前视频行为识别主要是在三种场景:

    • In the Lab

    • In TV,Movies

    • In web videos

    视频动作识别的机遇和挑战:

    机遇:视觉信息提供了大量、丰富的数据用于视觉理解;动作是运动感知的核心且能够衍生许多视频理解的应用。

    挑战:复杂的动态时序变化,动作的定义不明确,噪声和行人的弱标记信息,昂贵的计算资源和存储代价。

    由于视频在图像的基础上增加了一维时序信息,王利民老师从短期(Short Term)、中期(Middle Term)、长期(Long Term)三个角度对视频的时序信息进行建模。首先,回顾了基于深度学习的视频行为识别主流方法,比如two-stream,C3D,SlowFast Network。

    然后,王老师重点分享了其本人在视频行为识别的一些工作。主要包括:

    • 短期建模方法:Appearance-and-Relation Net(ARTNet)

    • 中期建模方法Temporal Segment Network—TSN

    • 长期建模方法(Untrimmed Net)

    展开全文
  • 而在视频理解领域,为了同时保留时序信息,就需要同时学习时空特征,如果用2DCNN来处理视频,那么将不能考虑编码在连续多帧之间运动信息,而C3D网络就在这样背景下横空出世了。 3D convolu...

    1、3D卷积t简介

    2、C3D模型原理与PyTorch实现

        2.1、C3D模型结构

        2.2、C3D视频动作识别(附PyTorch代码)

        2.3、测试结果

    参考

     

    1、3D卷积的简介

        在图像处理领域,被卷积的都是静态图像,所以使用2D卷积网络就足以。而在视频理解领域,为了同时保留时序信息,就需要同时学习时空特征,如果用2DCNN来处理视频,那么将不能考虑编码在连续多帧之间的运动信息,而C3D网络就在这样的背景下横空出世了。

     

        3D convolution 最早应该是在“3D convolutional neural networks for human action”中被提出并用于行为识别的。该论文提出的模型尝试从空间和时间维度中提取特征,从而捕获在多个相邻帧中编码的运动信息。

     

    主要贡献如下:

     

        1、我们提出应用3D卷积运算从视频数据中提取空间和时间特征以进行动作识别。这些3D特征提取器在空间和时间维度上操作,从而捕获视频流中的运动信息。

     

        2、我们开发了基于3D卷积特征提取器的3D卷积神经网络架构。该CNN架构从相邻视频帧生成多个信息信道,并在每个信道中分别执行卷积和子采样。最终的特征表示是通过组合所有频道的信息获得的。

     

        3、我们提出通过增加具有作为高级运动特征计算的辅助输出的模型来规范3D CNN模型。我们进一步提出通过组合各种不同架构的输出来提高3D CNN模型的性能。

     

    具体操作:通过同时堆叠多个连续帧形成的立方体与一个3D核进行卷积。通过这个构建,卷积层上的特征图连接到了前一层的多个连续帧,从而捕捉动作信息。

     

     

    2、C3D模型原理与PyTorch实现

    2.1、C3D模型结构

     

     

        3D ConvNets 更适合学习时空特征,通过3D卷积和3D池化,可以对时间信息建模,而2D卷积只能在空间上学习特征。3D和2D的区别如下:

     

        2D卷积网络输入图像会产生图像,输入视频输出的也是图像,3D卷积网络输入视频会输出另外一个视频,保留输入的时间信息

    2D和3D卷积运算。a)在一个图像上应用2D卷积会产生一个图像。b)在视频卷上应用2D卷积(多个帧作为多个通道)也会产生一个图像。c)在视频卷上应用3D卷积可产生另一个卷,保留输入信号的时间信息。

     

    3D卷积核时间深度搜索。不同卷积核时间深度设置在UCF101测试集split-1上的精度。2D ConvNet效果最差,3×3×3卷积核的3D ConvNet在实验中表现最佳。

     

    结构如下图:

    C3D架构。C3D网络有8个卷积层,5个最大池化层和2个全连接层,最后是softmax输出层。所有的3D卷积核都是3×3×3,在空间和时间上都有步长1。滤波器的数量表示在每个框中。3D池化层由pool1到pool5表示。所有池化核为2×2×2,除了pool1为1×2×2。每个全连接层有4096个输出单元。

     

    网络架构:上图的发现表明,3×3×3卷积核的均匀设置是3D ConvNets的最佳选择。这个发现与2D ConvNets一致。使用大型数据集,可以根据机器内存限制和计算承受能力,尽可能深入地训练具有3×3×3核的3D ConvNet。使用目前的GPU内存,我们设计了3D ConvNet,具有8个卷积层、5个池化层、两个全连接层,以及一个softmax输出层。网络架构如图3所示。为了简单起见,我们从现在开始将这个网络称为C3D。所有3D卷积滤波器均为3×3×3,步长为1×1×1。为了保持早期的时间信息设置pool1核大小为1×2×2、步长1×2×2,其余所有3D池化层均为2×2×2,步长为2×2×2。每个全连接层有4096个输出单元。

    import torchimport torch.nn as nnfrom mypath import Path
    
    class C3D(nn.Module):    """    The C3D network.    """
        def __init__(self, num_classes, pretrained=False):        super(C3D, self).__init__()
            self.conv1 = nn.Conv3d(3, 64, kernel_size=(3, 3, 3), padding=(1, 1, 1))        self.pool1 = nn.MaxPool3d(kernel_size=(1, 2, 2), stride=(1, 2, 2))
            self.conv2 = nn.Conv3d(64, 128, kernel_size=(3, 3, 3), padding=(1, 1, 1))        self.pool2 = nn.MaxPool3d(kernel_size=(2, 2, 2), stride=(2, 2, 2))
            self.conv3a = nn.Conv3d(128, 256, kernel_size=(3, 3, 3), padding=(1, 1, 1))        self.conv3b = nn.Conv3d(256, 256, kernel_size=(3, 3, 3), padding=(1, 1, 1))        self.pool3 = nn.MaxPool3d(kernel_size=(2, 2, 2), stride=(2, 2, 2))
            self.conv4a = nn.Conv3d(256, 512, kernel_size=(3, 3, 3), padding=(1, 1, 1))        self.conv4b = nn.Conv3d(512, 512, kernel_size=(3, 3, 3), padding=(1, 1, 1))        self.pool4 = nn.MaxPool3d(kernel_size=(2, 2, 2), stride=(2, 2, 2))
            self.conv5a = nn.Conv3d(512, 512, kernel_size=(3, 3, 3), padding=(1, 1, 1))        self.conv5b = nn.Conv3d(512, 512, kernel_size=(3, 3, 3), padding=(1, 1, 1))        self.pool5 = nn.MaxPool3d(kernel_size=(2, 2, 2), stride=(2, 2, 2), padding=(0, 1, 1))
            self.fc6 = nn.Linear(8192, 4096)        self.fc7 = nn.Linear(4096, 4096)        self.fc8 = nn.Linear(4096, num_classes)
            self.dropout = nn.Dropout(p=0.5)
            self.relu = nn.ReLU()
            self.__init_weight()
            if pretrained:            self.__load_pretrained_weights()
        def forward(self, x):        # print ('1:',x.size())        x = self.relu(self.conv1(x))        # print ('2:',x.size())        x = self.pool1(x)        # print ('3:',x.size())
            x = self.relu(self.conv2(x))        # print ('4:',x.size())        x = self.pool2(x)        # print ('5:',x.size())
            x = self.relu(self.conv3a(x))        # print ('6:',x.size())        x = self.relu(self.conv3b(x))        # print ('7:',x.size())        x = self.pool3(x)        # print ('8:',x.size())
            x = self.relu(self.conv4a(x))        # print ('9:',x.size())        x = self.relu(self.conv4b(x))        # print ('10:',x.size())        x = self.pool4(x)        # print ('11:',x.size())
            x = self.relu(self.conv5a(x))        # print ('12:',x.size())        x = self.relu(self.conv5b(x))        # print ('13:',x.size())        x = self.pool5(x)        # print ('14:',x.size())
            x = x.view(-1, 8192)        # print ('15:',x.size())        x = self.relu(self.fc6(x))        # print ('16:',x.size())        x = self.dropout(x)        x = self.relu(self.fc7(x))        x = self.dropout(x)
            logits = self.fc8(x)        # print ('17:',logits.size())        return logits
        def __load_pretrained_weights(self):        """Initialiaze network."""        corresp_name = {            # Conv1            "features.0.weight": "conv1.weight",            "features.0.bias": "conv1.bias",            # Conv2            "features.3.weight": "conv2.weight",            "features.3.bias": "conv2.bias",            # Conv3a            "features.6.weight": "conv3a.weight",            "features.6.bias": "conv3a.bias",            # Conv3b            "features.8.weight": "conv3b.weight",            "features.8.bias": "conv3b.bias",            # Conv4a            "features.11.weight": "conv4a.weight",            "features.11.bias": "conv4a.bias",            # Conv4b            "features.13.weight": "conv4b.weight",            "features.13.bias": "conv4b.bias",            # Conv5a            "features.16.weight": "conv5a.weight",            "features.16.bias": "conv5a.bias",            # Conv5b            "features.18.weight": "conv5b.weight",            "features.18.bias": "conv5b.bias",            # fc6            "classifier.0.weight": "fc6.weight",            "classifier.0.bias": "fc6.bias",            # fc7            "classifier.3.weight": "fc7.weight",            "classifier.3.bias": "fc7.bias",        }
            p_dict = torch.load(Path.model_dir())        s_dict = self.state_dict()        for name in p_dict:            if name not in corresp_name:                continue            s_dict[corresp_name[name]] = p_dict[name]        self.load_state_dict(s_dict)
        def __init_weight(self):        for m in self.modules():            if isinstance(m, nn.Conv3d):                # n = m.kernel_size[0] * m.kernel_size[1] * m.out_channels                # m.weight.data.normal_(0, math.sqrt(2. / n))                torch.nn.init.kaiming_normal_(m.weight)            elif isinstance(m, nn.BatchNorm3d):                m.weight.data.fill_(1)                m.bias.data.zero_()
    
    def get_1x_lr_params(model):    """    This generator returns all the parameters for conv and two fc layers of the net.    """    b = [model.conv1, model.conv2, model.conv3a, model.conv3b, model.conv4a, model.conv4b,         model.conv5a, model.conv5b, model.fc6, model.fc7]    for i in range(len(b)):        for k in b[i].parameters():            if k.requires_grad:                yield k
    
    def get_10x_lr_params(model):    """    This generator returns all the parameters for the last fc layer of the net.    """    b = [model.fc8]    for j in range(len(b)):        for k in b[j].parameters():            if k.requires_grad:                yield k
    
    if __name__ == "__main__":    inputs = torch.rand(1, 3, 16, 112, 112)    net = C3D(num_classes=101, pretrained=True)
        outputs = net.forward(inputs)    print(outputs.size())

    C3D卷积网络将完整的视频帧作为输入,并不依赖于任何处理,可以轻松地扩展到大数据集。

     

    2.2、C3D视频动作识别

     

     

    2.2.1、UCF101数据集

     

     

     

    数据集由101个人类动作类别的13,320个视频组成。我们使用此数据集提供的三个拆分设置。

        train_dataloader = DataLoader(VideoDataset(dataset=dataset, split='train', clip_len=16), batch_size=4, shuffle=True, num_workers=0)    val_dataloader = DataLoader(VideoDataset(dataset=dataset, split='val', clip_len=16), batch_size=4, num_workers=0)    test_dataloader = DataLoader(VideoDataset(dataset=dataset, split='test', clip_len=16), batch_size=4, num_workers=0)
        trainval_loaders = {'train': train_dataloader, 'val': val_dataloader}    trainval_sizes = {x: len(trainval_loaders[x].dataset) for x in ['train', 'val']}    test_size = len(test_dataloader.dataset)

     

    2.2.2、分类模型

     

     

     

    提取C3D特征并将其输入到用于训练模型

     

    2.3、测试结果

     

     

     

    参考:

    https://www.jianshu.com/p/09d1d8ffe8a4

    https://zhuanlan.zhihu.com/p/61570133

     

    关注公众号,回复【C3D】即可获得完整的项目代码以及文档说明。

     

    注意:数据集为UCF101数据集,可以自行下载。

     

    展开全文
  • Action Recognition(行为识别)

    千次阅读 2018-12-13 21:11:02
    视频与图片最大不同在于视频还包含了时序的信息,此外需要计算量通常也大很多。目前主要在做视频中动作定位相关工作,为了开拓思路,读了不少视频分析相关领域文章,所以打算写几篇博客,对视频分析相关...


    随着深度学习技术的发展,以及计算能力的进步(GPU等),现在基于视频的研究领域越来越受到重视。视频与图片最大的不同在于视频还包含了时序上的信息,此外需要的计算量通常也大很多。目前主要在做视频中动作定位相关的工作,为了开拓思路,读了不少视频分析相关领域的文章,所以打算写几篇博客,对视频分析相关的几个领域做一个简要的介绍。


    这篇主要介绍Action Recognition(行为识别)这个方向。这个方向的主要目标是判断一段视频中人的行为的类别,所以也可以叫做Human Action Recognition。虽然这个问题是针对视频中人的动作,但基于这个问题发展出来的算法,大都不特定针对人,也可以用于其他类型视频的分类。



    任务特点及分析


    • 目的

    给一个视频片段进行分类,类别通常是各类人的动作


    • 特点

    简化了问题,一般使用的数据库都先将动作分割好了,一个视频片断中包含一段明确的动作,时间较短(几秒钟)且有唯一确定的label。所以也可以看作是输入为视频,输出为动作标签的多分类问题。此外,动作识别数据库中的动作一般都比较明确,周围的干扰也相对较少(不那么real-world)。有点像图像分析中的ImageClassification任务。

    • 难点/关键点

    • 强有力的特征:即如何在视频中提取出能更好的描述视频判断的特征。特征越强,模型的效果通常较好。

    • 特征的编码(encode)/融合(fusion):这一部分包括两个方面,第一个方面是非时序的,在使用多种特征的时候如何编码/融合这些特征以获得更好的效果;另外一个方面是时序上的,由于视频很重要的一个特性就是其时序信息,一些动作看单帧的图像是无法判断的,只能通过时序上的变化判断,所以需要将时序上的特征进行编码或者融合,获得对于视频整体的描述。

    •   算法速度:虽然在发论文刷数据库的时候算法的速度并不是第一位的。但高效的算法更有可能应用到实际场景中去。



    常用数据库


    行为识别的数据库比较多,这里主要介绍两个最常用的数据库,也是近年这个方向的论文必做的数据库。



    在Actioin Recognition中,实际上还有一类骨架数据库,比如MSR Action 3D,HDM05,SBU KinectInteraction Dataset等。这些数据库已经提取了每帧视频中人的骨架信息,基于骨架信息判断运动类型,不做详细介绍。



    研究进展


    • 传统方法

    iDT(improveddense trajectories)特征:“Action recognition with improved trajectories”

    •  iDT方法(13年)是深度学习进入该领域前效果最好,稳定性最好,可靠性最高的方法,不过算法速度很慢。这个方法是该实验室之前工作(Dense Trajectories and Motion Boundary Descriptors forAction Recognition)的改进。此前写的笔记见http://blog.csdn.net/wzmsltw/article/details/53023363,算法代码分析见:http://blog.csdn.net/wzmsltw/article/details/53221179

    •  基本思路:DT算法的基本思路为利用光流场来获得视频序列中的一些轨迹,再沿着轨迹提取HOF,HOG,MBH,trajectory4种特征,其中HOF基于灰度图计算,另外几个均基于dense optical flow计算。最后利用FV(FisherVector)方法对特征进行编码,再基于编码结果训练SVM分类器。而iDT改进的地方在于它利用前后两帧视频之间的光流以及SURF关键点进行匹配,从而消除/减弱相机运动带来的影响,改进后的光流图像被成为warp optical flow



    • 深度学习方法

    由于这个方向这几年的论文实在太多,所以这部分挑选了一些近年比较有代表性的论文进行简要介绍。更多的论文可以上谷歌学术通过搜索Action Recognition找到。

     

    (1) Two Stream Network及衍生方法

    Two-StreamConvolutional Networks for Action Recognition in Videos”(2014NIPS)

    Two Stream方法最初在这篇文章中被提出,基本原理为对视频序列中每两帧计算密集光流,得到密集光流的序列(即temporal信息)。然后对于视频图像(spatial)和密集光流(temporal)分别训练CNN模型,两个分支的网络分别对动作的类别进行判断,最后直接对两个网络的class score进行fusion(包括直接平均和svm两种方法),得到最终的分类结果。注意,对与两个分支使用了相同的2D CNN网络结构,其网络结构见下图。


     实验效果:UCF101-88.0%,HMDB51-59.4% 



    ConvolutionalTwo-Stream Network Fusion for Video Action Recognition“(2016CVPR)

    这篇论文的主要工作为在two stream network的基础上,利用CNN网络进行了spatial以及temporal的融合,从而进一步提高了效果。此外,该文章还将基础的spatial和temporal网络都换成了VGG-16 network。


    实验效果:UCF101-92.5%,HMDB51-65.4%

     


    TemporalSegment Networks: Towards Good Practices for Deep Action Recognition

    这篇文章是港中文Limin Wang大神的工作,他在这方面做了很多很棒的工作,可以followt他的主页:http://wanglimin.github.io/ 。


    这篇文章提出的TSN网络也算是spaital+temporal fusion,结构图见下图。这篇文章对如何进一步提高two stream方法进行了详尽的讨论,主要包括几个方面(完整内容请看原文):

    1.    输入数据的类型:除去two stream原本的RGB image和 opticalflow field这两种输入外,这篇文章中还尝试了RGB difference及 warpedoptical flow field两种输入。最终结果是 RGB+optical flow+warped optical flow的组合效果最好。

    2.    网络结构:尝试了GoogLeNet,VGGNet-16及BN-Inception三种网络结构,其中BN-Inception的效果最好。

    3.    训练策略:包括跨模态预训练,正则化,数据增强等。


    实验效果:UCF101-94.2%,HMDB51-69.4% 



    BeyondShort Snippets: Deep Networks for Video Classification Joe"

    这篇文章主要是用LSTM来做two-stream network的temporal融合。效果一般。


    实验效果:UCF101-88.6% 


    (2) C3D Network

    "Learningspatiotemporal features with 3d convolutional networks"

     C3D是facebook的一个工作,采用3D卷积和3D Pooling构建了网络。论文笔记见:http://blog.csdn.net/wzmsltw/article/details/61192243 。通过3D卷积,C3D可以直接处理视频(或者说是视频帧的volume)


    实验效果:UCF101-85.2% 可以看出其在UCF101上的效果距离two stream方法还有不小差距。我认为这主要是网络结构造成的,C3D中的网络结构为自己设计的简单结构,如下图所示。


     速度:C3D的最大优势在于其速度,在文章中其速度为314fps。而实际上这是基于两年前的显卡了。用Nvidia 1080显卡可以达到600fps以上。所以C3D的效率是要远远高于其他方法的,个人认为这使得C3D有着很好的应用前景。


    作者在其项目主页:http://vlg.cs.dartmouth.edu/c3d/ 放出了新版本的Res-C3D网络的caffe模型,但论文还没放出,估计是ICCV2017的投稿文章。新版本的模型大小是之前的一半,速度比C3D快了很多,效果也比之前提高了几个百分点(UCF上)。非常期待看到这个论文,等放出后也会好好讨论一下的。


    (3) 其他方法

    A KeyVolume Mining Deep Framework for Action Recognition

     本文主要做的是key volume的自动识别。通常都是将一整段动作视频进行学习,而事实上这段视频中有一些帧与动作的关系并不大。因此进行关键帧的学习,再在关键帧上进行CNN模型的建立有助于提高模型效果。本文达到了93%的正确率吗,为目前最高。


    实验效果:UCF101-93.1%,HMDB51-63.3%


    DeepTemporal Linear Encoding Networks

    本文主要提出了“Temporal Linear Encoding Layer” 时序线性编码层,主要对视频中不同位置的特征进行融合编码。至于特征提取则可以使用各种方法,文中实验了two stream以及C3D两种网络来提取特征。


    实验效果:UCF101-95.6%,HMDB51-71.1%(特征用two stream提取)。应该是目前为止看到效果最好的方法了(CVPR2017里可能会有更好的效果) 



    小结


    可以看出,这几年action recognition领域发展的非常快,有各种各样的方法被提出。但要注意,action recognition一般是对预先分割过的短视频进行分类,而真实环境中的视频一般都是没有预先切分过的,而且会包含大量无关信息。所以我认为这个领域的研究很像对Image Classification的研究,比较基础,可以为相关领域的研究提供有力的工具。下一篇文章将讨论视频中的动作定位问题:Temporal Action Detection.


    展开全文
  • 视频与图片最大不同在于视频还包含了时序的信息,此外需要计算量通常也大很多。 这篇主要介绍Action Recognition(行为识别)这个方向。这个方向主要目标是判断一段视频中人行为类别,所以也可以叫做...
  • 行为识别-知乎热门圆桌

    千次阅读 2017-08-10 17:07:53
    视频与图片最大不同在于视频还包含了时序的信息,此外需要计算量通常也大很多。目前主要在做视频中动作定位相关工作,为了开拓思路,读了不少视频分析相关领域文章,所以打算写几篇博客,对视频分析相关...
  • 注:本文首发在微信公众号-极市平台。如需转载,请联系微信Extreme-Vision卷积神经...而对于基于视频分析问题,2D convolution不能很好得捕获时序的信息。因此3D convolution就被提出来了。3D convolution 最早应
  • 行为识别之C3D-network

    2018-08-21 19:13:50
    注:本文首发在微信公众号-极市平台。如需转载,请联系微信Extreme-Vision 卷积神经网络(CNN)近年被广泛应用于计算机视觉中,包括分类...而对于基于视频分析问题,2D convolution不能很好得捕获时序的信息。...
  • Video Analysis相关领域介绍之Action Recognition(行为识别)

    万次阅读 多人点赞 2017-04-19 12:28:35
    视频与图片最大不同在于视频还包含了时序的信息,此外需要计算量通常也大很多。目前主要在做视频中动作定位相关工作,为了开拓思路,读了不少视频分析相关领域文章,所以打算写几篇博客,对视频分析相关...
  • UML交互图--时序图、协作图

    热门讨论 2018-11-22 21:04:02
    动态模型描述了系统随时间变化的行为,这些行为是从静态视图中抽取系统瞬间值变化来描述。 导图-时序图 使用时序图建模策略: 1.设置交互语境 2.通过识别对象在交互中扮演角色,根据角色重要性,摆放...
  • Action Recognition: 行为识别,视频分类,数据集为剪辑过动作视频 Temporal Action Detection: 从未剪辑视频,定位动作发生区间,起始帧和终止帧并预测类别 难点 1: 边界不明确(助跑跳远,上篮,高尔夫挥...
  • 网上商城UML图

    2018-05-25 20:59:50
    3.1.2顾客反馈信息时序图 25 3.1.3顾客浏览商品时序图 26 3.1.4顾客查询商品时序图 27 3.1.5顾客购买商品时序图 28 3.2.6管理员添加商品时序图 29 3.2.7管理员删除商品时序图 29 3.2.8管理员添加二级商品目录时序图 ...
  • 文章针对视频行为识别提出了一种新颖网络结构SlowFast Networks,受启发于人类视觉神经系统:80%视觉细胞通常用于捕获空间特征,对时序动作响应不明显。15%~20%视觉细胞用于捕获动作特征,用于处理高时间...
  • LSTM

    2020-08-27 20:15:53
    设计初衷是希望能够解决神经网络中长期依赖问题,让记住长期信息成为神经网络默认行为,而不是需要很大力气才能学会 回顾一下RNN模型,如下图,展开后多个时刻隐层互相连接,而所有循环神经网络都有一个重复...
  • UML之协作图

    2020-07-01 16:11:12
    协作图是动态图零一中表现形式,它强调参加交互各对象结构的信息。协作图是一种类图,它包含类元角色和关联角色,而不仅仅是类元和关联。 对象:代表协作图交互中所扮演角色,和时序图中对象概念类似 链...
  • 图像分类 是根据图像语义信息对不同类别图像进行区分,是计算机视觉中重要基础问题,是物体检测、图像分割、物体跟踪、行为分析、人脸识别等其他高层视觉任务基础,在许多领域都有着广泛应用。如:安防领域...

空空如也

空空如也

1 2
收藏数 23
精华内容 9
关键字:

行为识别的时序信息