行为识别笔记:C3D network-用于视频特征提取的3维卷积网络
2017-03-10 10:17
357 查看
注:本文首发在微信公众号-极市平台。如需转载,请联系微信Extreme-Vision
卷积神经网络(CNN)近年被广泛应用于计算机视觉中,包括分类、检测、分割等任务。这些任务一般都是针对图像进行的,使用的是二维卷积(即卷积核的维度为二维)。而对于基于视频分析的问题,2D convolution不能很好得捕获时序上的信息。因此3D convolution就被提出来了。3D convolution 最早应该是在[1]中被提出并用于行为识别的,本篇文章则主要介绍下面这篇文章 C3D[2],C3D network是作为一个通用的网络提出的,文章中将其用于行为识别,场景识别,视频相似度分析等领域。
可以访问C3D network的项目主页或是github获得其项目代码及模型,项目基于caffe实现。最近作者还更新了残差网络结构的新C3D模型,但是还没有放出对应的论文,暂时不做讨论。
首先简要介绍一下2D与3D卷积之间的区别。a)和b)分别为2D卷积用于单通道图像和多通道图像的情况(此处多通道图像可以指同一张图片的3个颜色通道,也指多张堆叠在一起的图片,即一小段视频),对于一个滤波器,输出为一张二维的特征图,多通道的信息被完全压缩了。而c)中的3D卷积的输出仍然为3D的特征图。
现在考虑一个视频段输入,其大小为 c∗l∗h∗w ,其中c为图像通道(一般为3),l为视频序列的长度,h和w分别为视频的宽与高。进行一次kernel size为3∗3∗3,stride为1,padding=True,滤波器个数为K的3D 卷积后,输出的大小为K∗l∗h∗w。池化同理。
作者还对卷积核的尺寸进行了实验研究,结果表面3∗3∗3大小的卷积核效果最好。
基于3D卷积操作,作者设计了如上图所示的C3D network结构。共有8次卷积操作,4次池化操作。其中卷积核的大小均为3∗3∗3,步长为1∗1∗1。池化核的大小为2∗2∗2,步长为2∗2∗2,但第一层池化除外,其大小和步长均为1∗2∗2。这是为了不过早缩减时序上的长度。最终网络在经过两次全连接层和softmax层后就得到了最终的输出结果。网络的输入尺寸为3∗16∗112∗112,即一次输入16帧图像。
行为识别用的数据库是UCF101,C3D+SVM的结果达到了85.2%。UCF101这个数据库目前为止(2017年3月)看到最高的结果已经达到了96%左右。
动作相似度标注问题的任务是判断给出的两段视频是否属于相同的动作。文章中使用的数据库为ASLAN。C3D的效果超过了当时的state of the art 不少。
场景识别问题主要使用了Maryland和YUPENN,也都达到了不错的效果。
这几部分我都跑过相关的实验,其中光流计算(GPU版本)现在的速度可以达到20-25fps,我使用的光流计算代码的github地址为gpu_flow。表中C3D的速度应该是在视频帧无重叠的情况下获得的。将一段16帧的视频作为一个输入,则C3D一秒可以处理约42个输入(显卡为1080, batch size选为50),换算成无重叠情况下的fps为672。可见C3D的速度还是非常快的。
[2] Tran D, Bourdev L, Fergus R, et al. Learning spatiotemporal features with 3d convolutional networks[C]//Proceedings of the IEEE International Conference on Computer Vision. 2015: 4489-4497.
[3] Brox T, Malik J. Large displacement optical flow: descriptor matching in variational motion estimation[J]. IEEE transactions on pattern analysis and machine intelligence, 2011, 33(3): 500-513.
卷积神经网络(CNN)近年被广泛应用于计算机视觉中,包括分类、检测、分割等任务。这些任务一般都是针对图像进行的,使用的是二维卷积(即卷积核的维度为二维)。而对于基于视频分析的问题,2D convolution不能很好得捕获时序上的信息。因此3D convolution就被提出来了。3D convolution 最早应该是在[1]中被提出并用于行为识别的,本篇文章则主要介绍下面这篇文章 C3D[2],C3D network是作为一个通用的网络提出的,文章中将其用于行为识别,场景识别,视频相似度分析等领域。
可以访问C3D network的项目主页或是github获得其项目代码及模型,项目基于caffe实现。最近作者还更新了残差网络结构的新C3D模型,但是还没有放出对应的论文,暂时不做讨论。
2D 与 3D 卷积操作
首先简要介绍一下2D与3D卷积之间的区别。a)和b)分别为2D卷积用于单通道图像和多通道图像的情况(此处多通道图像可以指同一张图片的3个颜色通道,也指多张堆叠在一起的图片,即一小段视频),对于一个滤波器,输出为一张二维的特征图,多通道的信息被完全压缩了。而c)中的3D卷积的输出仍然为3D的特征图。
现在考虑一个视频段输入,其大小为 c∗l∗h∗w ,其中c为图像通道(一般为3),l为视频序列的长度,h和w分别为视频的宽与高。进行一次kernel size为3∗3∗3,stride为1,padding=True,滤波器个数为K的3D 卷积后,输出的大小为K∗l∗h∗w。池化同理。
3D 卷积核参数的选择
作者还对卷积核的尺寸进行了实验研究,结果表面3∗3∗3大小的卷积核效果最好。
C3D network 结构
基于3D卷积操作,作者设计了如上图所示的C3D network结构。共有8次卷积操作,4次池化操作。其中卷积核的大小均为3∗3∗3,步长为1∗1∗1。池化核的大小为2∗2∗2,步长为2∗2∗2,但第一层池化除外,其大小和步长均为1∗2∗2。这是为了不过早缩减时序上的长度。最终网络在经过两次全连接层和softmax层后就得到了最终的输出结果。网络的输入尺寸为3∗16∗112∗112,即一次输入16帧图像。
实验结果
接下来介绍一下C3D的实验结果,作者将C3D在行为识别、动作相似度标注、场景与物体识别这三个方向的数据库上进行了测试,均取得了不错的效果。注意以下结果均为当时情况下的比较(2015年),从那时候到现在这些数据库不知道又被刷了多少遍了。。行为识别-Action Recognition
行为识别用的数据库是UCF101,C3D+SVM的结果达到了85.2%。UCF101这个数据库目前为止(2017年3月)看到最高的结果已经达到了96%左右。
动作相似度标注-Action Similarity Labeling
动作相似度标注问题的任务是判断给出的两段视频是否属于相同的动作。文章中使用的数据库为ASLAN。C3D的效果超过了当时的state of the art 不少。
场景识别-Scene Recognition
场景识别问题主要使用了Maryland和YUPENN,也都达到了不错的效果。
运行时间分析
下表中是C3D与其他一些算法的速度比较。其中iDT是行为识别领域的非深度学习方法中效果最好的方法,可以见我之前的博文iDT算法介绍。Brox指Brox提出的光流计算方法[3].这几部分我都跑过相关的实验,其中光流计算(GPU版本)现在的速度可以达到20-25fps,我使用的光流计算代码的github地址为gpu_flow。表中C3D的速度应该是在视频帧无重叠的情况下获得的。将一段16帧的视频作为一个输入,则C3D一秒可以处理约42个输入(显卡为1080, batch size选为50),换算成无重叠情况下的fps为672。可见C3D的速度还是非常快的。
总结
C3D使用3D CNN构造了一个效果不错的网络结构,对于基于视频的问题均可以用来提取特征。可以将其全连接层去掉,将前面的卷积层放入自己的模型中,就像使用预训练好的VGG模型一样。参考文献
[1] Ji S, Xu W, Yang M, et al. 3D convolutional neural networks for human action recognition[J]. IEEE transactions on pattern analysis and machine intelligence, 2013, 35(1): 221-231.[2] Tran D, Bourdev L, Fergus R, et al. Learning spatiotemporal features with 3d convolutional networks[C]//Proceedings of the IEEE International Conference on Computer Vision. 2015: 4489-4497.
[3] Brox T, Malik J. Large displacement optical flow: descriptor matching in variational motion estimation[J]. IEEE transactions on pattern analysis and machine intelligence, 2011, 33(3): 500-513.
相关文章推荐
- 行为识别笔记:C3D network-用于视频特征提取的3维卷积网络
- 深度学习笔记7 Working with Large Images 卷积特征提取
- 深度学习笔记---卷积特征提取与池化
- 配置caffe-C3D,提取视频特征
- 菜鸟学java 网络视频笔记 第二课(by Super)
- 笔记--VC+DShow+TS(from network) --视频区域刷新问题
- ASP.NET网络安全简单防护公开课-视频学习笔记
- SAP BW R3应用_特征数据的加载——视频学习笔记07
- 激光雷达学习笔记(三)特征提取
- SAP BW_PA_文件_特征数据——视频学习笔记13
- 行为识别特征提取综述
- 4个视频中行为识别的底层特征检测、描述及代码
- 孙鑫C++视频笔记(14)网络编程
- 菜鸟学java 网络视频笔记 第一课(by Super)
- ios开发笔记之 MPMoviePlayerController网络视频加载
- H264参数结构二:网络提取层NAL (Net Abstraction Layer) & 视频编码层VCL (Video Coding Layer)
- 孙鑫VC++视频学习笔记之14:网络编程
- OpenCV学习笔记(二十九)——视频前景的提取Video
- 几个视频中行为识别的底层特征及代码
- Reading papers_10(人体行为识别特征点提取小综述)