文章:Two-Stream Convolutional Networks for Action Recognition in Videos(NIPS2014)

链接:https://arxiv.org/abs/1406.2199

虽然在2013年就在人类行为识别的一篇文章中提出了3D卷积的内容,但效果并不好,直到这篇文章出来以后才意味着深度学习在行为识别中迈出了重大的一步。

主要贡献点:

1、首先,我们提出了一种融合时空网络的双流convnet体系结构。

2、第二,我们证明了在多帧密集光流上训练的convnet的方法,即使在训练数据有限的情况下仍能获得很好的性能。

3、最后,将多任务学习应用于两种不同的动作分类数据集,可以增加训练数据量,提高训练数据的性能。

介绍:所谓two-stream是指空间stream和时间stream,视频可以分成空间与时间两个部分,空间部分指独立帧的表面信息,关于物体、场景等;而时间部分信息指帧间的光流,携带着帧之间的运动信息。相应的,所提出的网络结构由两个深度网络组成,分别处理时间与空间的维度。结构如下图所示:

上层的Spatio Stream Convet处理静态的帧画面,输入是单个帧画面,得到画面中物体的特征,还可以使用ImageNet challenge数据集种有标注的图像数据进行预训练。temporal stream convet则是通过多帧画面的光流位移来获取画面中物体的运动信息,其输入由多个连续帧之间的光流位移场叠加而成,这种输入显式地描述了视频帧之间的运动,这使得识别更加容易,因为网络不需要隐式地估计运动。两个不同的stream都通过CNN实现,最后进行信息融合。

那么什么是光流(Optical flow)?

optical flow是由一些位移矢量场(displacement vector fields)(每个矢量用dt表示)组成的,其中dt是一个向量,表示第t帧的displacement vector,是通过第t和第t+1帧图像得到的。dt包含水平部分dtx和竖直部分dty,可以看下图中的(d)和(e)。因此如果一个video有L帧,那么一共可以得到2L个channel的optical flow,然后才能作为Figure1中temporal stream convnet网络的输入。

(c)对轮廓区域的密集光流的特写;(d)位移矢量场的水平分量dx(高强度对应正值,低强度对应负值)。(e)垂直分量dy

上图中的(a)和(b)表示连续的两帧图像,(c)表示一个optical flow,(d)和(e)分别表示一个displacement vector field的水平和竖直两部分。

所以如果假设一个video的宽和高分别是w和h,那么Figure1中temporal stream convnet的输入维度应该是下面这样的。其中τ表示任意的一帧。

τ表示任意的一帧

其中,文章实验了多种多帧画面的光流位移的输入,有:

1、 光流栈(Optical flow stacking

光流栈(Optical flow stacking),或者叫做光流的简单叠加。简单的来说就是计算每两帧之间的光流,然后简单的stacking。式子1列出了分别得到水平和竖直方向的Iτ的计算公式,其中(u,v)表示任意一个点的坐标。因此 Iτ(u,v,c) 存的就是(u,v)这个位置的displacement vector。

公式1
示意图

2、轨迹叠加(Trajectory stacking):在基于轨迹的描述符[29]的启发下,另一种运动表示法将在多个帧的相同位置采样的光流替换为沿运动轨迹采样的流。

顾名思义,轨迹叠加就是假设第一帧的某个像素点,我们可以通过光流来追踪它在视频中的轨迹,即用来描述一个对应特征点连续的光流变化。

公式2:其中Pk表示k-th point along the trajectory
示意图

3、双向光流:

4、减去平均光流:

以上的4种方法是Temporal Stream的输入讨论。

multi-task learning来克服数据量不足的问题。其实就是CNN的最后一层连到多个softmax的层上,对应不同的数据集,这样就可以在多个数据集上进行multi-task learning。spatial stream convnet因为输入是静态的图像,因此其预训练模型容易得到(一般采用在ImageNet数据集上的预训练模型),但是temporal stream convnet的预训练模型就需要在视频数据集上训练得到,但是目前能用的视频数据集规模还比较小(主要指的是UCF-101和HMDB-51这两个数据集,训练集数量分别是9.5K和3.7K个video)。因此作者采用multi-task的方式来解决。怎么做呢?首先原来的网络(temporal stream convnet)在全连接层后只有一个softmax层,现在要变成两个softmax层,一个用来计算HDMB-51数据集的分类输出,另一个用来计算UCF-101数据集的分类输出,这就是两个task。这两条支路有各自的loss,最后回传loss的时候采用的是两条支路loss的和。

可以看到,每个深度网络都会输出一个softmax层,最后会通过一种方法把两个softmax层的输出融合:一种是平均层,一种是训练一个以这些softmax输出作为特征的SVM。

参考链接:流浪者:[行为识别] Two –Stream CNN for Action Recognition in Videos

https://blog.csdn.net/u014380165/article/details/78756459

cnn 示意图_Two-Stream CNN(双流CNN)介绍(NIPS2014)相关推荐

  1. 基于FFT频谱与小波时频图的双流CNN轴承故障诊断模型

    在博客https://blog.csdn.net/qq_41043389/article/details/106150980里,我们提出了采用小波时频图作为轴承信号的故障特征数据,即首先利用提取各样本 ...

  2. CV之CNN:基于tensorflow框架采用CNN(改进的AlexNet,训练/评估/推理)卷积神经网络算法实现猫狗图像分类识别

    CV之CNN:基于tensorflow框架采用CNN(改进的AlexNet,训练/评估/推理)卷积神经网络算法实现猫狗图像分类识别 目录 基于tensorflow框架采用CNN(改进的AlexNet, ...

  3. TF之CNN:Tensorflow构建卷积神经网络CNN的简介、使用方法、应用之详细攻略

    TF之CNN:Tensorflow构建卷积神经网络CNN的简介.使用方法.应用之详细攻略 目录 TensorFlow 中的卷积有关函数入门 1.tf.nn.conv2d函数 案例应用 1.TF之CNN ...

  4. cnn输入层_多尺度CNN特征图的分析与应用

    本文适用于那些参与CNN架构设计的工程师和研究人员,他们厌倦了盲目尝试和错误,可以从CNN主干中选择哪些特征图以改善其模型的性能,而宁愿从早期开始设计过程的步骤,以使特征图的空间比例轮廓与训练数据集中 ...

  5. DL之CNN:基于CRNN_OCR算法(keras,CNN+RNN)利用数据集(torch,mdb格式)训练来实现新图片上不定长度字符串进行识别—训练过程

    DL之CNN:基于CRNN_OCR算法(keras,CNN+RNN)利用数据集(torch,mdb格式)训练来实现新图片上不定长度字符串进行识别-训练过程 目录 输出结果 设计思路 核心代码 输出结果 ...

  6. DL之CNN:基于CRNN_OCR算法(keras,CNN+RNN)利用数据集(torch,mdb格式)训练来实现新图片上不定长度字符串进行识别—预测过程

    DL之CNN:基于CRNN_OCR算法(keras,CNN+RNN)利用数据集(torch,mdb格式)训练来实现新图片上不定长度字符串进行识别-预测过程 目录 输出结果 设计思路 核心代码 输出结果 ...

  7. python cnn 实例_在Keras中CNN联合LSTM进行分类实例

    我就废话不多说,大家还是直接看代码吧~ def get_model(): n_classes = 6 inp=Input(shape=(40, 80)) reshape=Reshape((1,40,8 ...

  8. JDK8新特性简介、Lambda表达式、Stream流常用api介绍

    JDK8新特性简介.Lambda表达式.Stream流常用api介绍 接口 Java1.8前接口中是不允许有普通方法的,在Java1.8后允许接口中有普通方法,只需要加上default关键字即可: J ...

  9. 卷积神经网络CNN与深度学习常用框架的介绍与使用

    一.神经网络为什么比传统的分类器好 1.传统的分类器有 LR(逻辑斯特回归) 或者 linear SVM ,多用来做线性分割,假如所有的样本可以看做一个个点,如下图,有蓝色的点和绿色的点,传统的分类器 ...

最新文章

  1. Android Rect 的使用以及与RectF的区别
  2. java的动态代理机制详解
  3. 用Play 1.x 实现简单云计算多租户设计(Use Play 1.x To Achieve Multi-Tenancy Design)
  4. django orm级联_django+jquery 实现级联选择菜单
  5. App Store应用脱壳
  6. SSO单点登录和OAuth2.0的区别和理解
  7. windows平台桌面开发技术
  8. RHEL7出现tkinter.TclError: no display name and no $DISPLAY environment variable
  9. 为什么很多人说Python简单呢?
  10. Windows 8 to Go
  11. 统一建模语言UML概述
  12. 最大流最小割经典例题_图像分割之最小割与最大流算法
  13. 守望先锋四服务器修改,服务器刷新率提高 《守望先锋》终于不用死在墙角了...
  14. 前端开发实习面试题(Vue篇)
  15. 子慕谈设计模式系列(三)
  16. 【python爬虫笔记】验证码
  17. 大数据之ZooKeeper数据类型和节点操作
  18. 上海中兴软件测试面试,中兴综合测评没做完
  19. Robotaxi进入“大洗牌”时代,主机厂成接盘侠
  20. vue stomp 的使用笔记

热门文章

  1. 8.9 NOIP模拟测试15 建设城市(city)+轰炸行动(bomb)+石头剪刀布(rps)
  2. DDD-上下文映射图
  3. Java字符字符串类
  4. spring boot2 kafka
  5. (项目)生鲜超市(六)
  6. 查询数据库中所有表名称
  7. 《常见问题集》Maven
  8. POJ2976-Dropping tests-01分数规划
  9. 【转】ASP.NET 表单验证实现浅析
  10. React项目中跨域问题的解决方案