前言

这篇博客主要详细介绍3D CNN框架结构的计算过程,我们都知道3D CNN 在视频分类,动作识别等领域发挥着巨大的优势,前两个星期看了这篇文章:3D Convolutional Neural Networks for Human Action Recognition,打算用这个框架应用于动态表情识别,当时对这篇文章的3 D CNN各层maps的计算不怎么清楚,所以自己另外对3D CNN结构层数maps等等重新计算了一下,下面是主要的计算过程。下面的主要图片和计算过程就来自于这篇论文。感兴趣的可以去阅读原始论文。

2D CNN与3DCNN的区别

采用2D CNN对视频进行操作的方式,一般都是对视频的每一帧图像分别利用CNN来进行识别,这种方式的识别没有考虑到时间维度的帧间运动信息。下面是传统的2DCNN对图像进行采用2D卷积核进行卷积操作:
使用3D CNN能更好的捕获视频中的时间和空间的特征信息,以下是3D CNN对图像序列(视频)采用3D卷积核进行卷积操作:
上面进行卷积操作的时间维度为3,即对连续的三帧图像进行卷积操作,上面的 3D卷积是通过堆叠多个连续的帧组成一个立方体,然后在立方体中运用3D卷积核。在这个结构中,卷积层中每一个特征map都会与上一层中多个邻近的连续帧相连,因此捕捉运动信息。例如上面左图,一个卷积map的某一位置的值是通过卷积上一层的三个连续的帧的同一个位置的局部感受野得到的。

需要注意的是:3D卷积核只能从cube中提取一种类型的特征,因为在整个cube中卷积核的权值都是一样的,也就是共享权值,都是同一个卷积核(图中同一个颜色的连接线表示相同的权值)。我们可以采用多种卷积核,以提取多种特征

论文中使用的3D CNN架构

输入层(input): 连续的(7帧)大小为60*40的视频帧图像作为输入。.
硬线层(hardwired,H1): 每帧提取5个通道信息(灰度gray,横坐标梯度(gradient-x),纵坐标梯度(gradient-y),x光流(optflow-x),y光流(optflow-y))。前面三个通道的信息可以直接对每帧分别操作获取,后面的光流(x,y)则需要利用两帧的信息才能提取,因此

H1层的特征maps数量:(7+7+7+6+6=33),特征maps的大小依然是60* 40;

卷积层(convolution C2): 以硬线层的输出作为该层的输入,对输入5个通道信息分别使用大小为7* 7 * 3的3D卷积核进行卷积操作(7* 7表示空间维度,3表示时间维度,也就是每次操作3帧图像),同时,为了增加特征maps的个数,在这一层采用了两种不同的3D卷积核,因此C2层的特征maps数量为:

(((7-3)+1)* 3+((6-3)+1)* 2)* 2=23* 2

这里右乘的2表示两种卷积核。

特征maps的大小为:((60-7)+1)* ((40-7)+1)=54 * 34

降采样层(sub-sampling S3): 在该层采用max pooling操作,降采样之后的特征maps数量保持不变,因此S3层的特征maps数量为:23 *2

特征maps的大小为:((54 / 2) * (34 /2)=27 *17

卷积层(convolution C4): 对两组特征maps分别采用7 6 3的卷积核进行操作,同样为了增加特征maps的数量,文中采用了三种不同的卷积核分别对两组特征map进行卷积操作。这里的特征maps的数量计算有点复杂,请仔细看清楚了

我们知道,从输入的7帧图像获得了5个通道的信息,因此结合总图S3的上面一组特征maps的数量为((7-3)+1) * 3+((6-3)+1) * 2=23,可以获得各个通道在S3层的数量分布:

前面的乘3表示gray通道maps数量= gradient-x通道maps数量= gradient-y通道maps数量=(7-3)+1)=5;

后面的乘2表示optflow-x通道maps数量=optflow-y通道maps数量=(6-3)+1=4;

假设对总图S3的上面一组特征maps采用一种7 6 3的3D卷积核进行卷积就可以获得:

((5-3)+1)* 3+((4-3)+1)* 2=9+4=13;

三种不同的3D卷积核就可获得13* 3个特征maps,同理对总图S3的下面一组特征maps采用三种不同的卷积核进行卷积操作也可以获得13*3个特征maps,

因此C4层的特征maps数量:13* 3* 2=13* 6

C4层的特征maps的大小为:((27-7)+1)* ((17-6)+1)=21*12

降采样层(sub-sampling S5): 对每个特征maps采用3 3的核进行降采样操作,此时每个maps的大小:7* 4

在这个阶段,每个通道的特征maps已经很小,通道maps数量分布情况如下:

gray通道maps数量= gradient-x通道maps数量= gradient-y通道maps数量=3

optflow-x通道maps数量=optflow-y通道maps数量=2;

卷积层(convolution C6): 此时对每个特征maps采用7* 4的2D卷积核进行卷积操作,此时每个特征maps的大小为:1*1,至于数量为128是咋来的,就不咋清楚了,估计是经验值。

对于CNNs,有一个通用的设计规则就是:在后面的层(离输出层近的)特征map的个数应该增加,这样就可以从低级的特征maps组合产生更多类型的特征。

通过多层的卷积和降采样,每连续7帧图像就可以获得128维的特征向量。输出层的单元数与视频动作数是相同的,输出层的每个单元与这128维的特征向量采用全连接。在后面一般采用线性分类器对128维的特征向量进行分类,实现行为识别,3DCNN模型中所有可训练的参数都是随机初始化的,然后通过在线BP算法进行训练。

下面是整个过程中3DCNN各通道数量变化情况以及特征maps大小变化情况:

原文链接:3D CNN框架结构各层计算

理解3D CNN及3D卷积相关推荐

  1. 3d卷积和2d卷积1d卷积运算-CNN卷积核与通道讲解

    全网最全的卷积运算过程:https://blog.csdn.net/Lucinda6/article/details/115575534?spm=1001.2101.3001.6661.1&u ...

  2. 本周AI热点回顾:「时空版」Transformer训练速度远超3D CNN;拒绝内卷的AI狼火了!不想抓羊只想躺!...

    ‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍点击左上方蓝字关注我们 01 「时空版」Transformer训练速度远超3D CNN,提速3倍! Facebook AI推出了全新的视频理解架构TimeSform ...

  3. 基于深度学习的肺部CT影像识别——采用U-net、3D CNN、cGAN实现肺结节的检测(二)

    点击此处跳转到系列博客索引 文章目录 引言 算法原理 多层级3D CNN 多尺度渐变集成3D CNN 实现过程 实验结果 评价指标 结果分析 参考 引言 上一节中介绍了U-net在肺结节分割提取中的原 ...

  4. 3D CNN框架结构各层计算

    最近也在看和视频有关的处理问题,对3D-CNN的各层结构不是很清楚,这里找到一篇讲解较为清晰的文章,特此转载过来 转自:http://blog.csdn.net/auto1993/article/de ...

  5. DeepMedic —— 一种经典的医学图像分割的3D CNN框架

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/JYZhang_CVML/article ...

  6. Image segmentation of nasopharyngeal carcinoma using 3D CNN with long-range skip connection and mult

    Image segmentation of nasopharyngeal carcinoma using 3D CNN with long-range skip connection and mult ...

  7. 论文翻译-Three Stream 3D CNN with SE Block for Micro- Expression Recognition

    用于微表情识别的三流3D CNN SEnet:Squeeze-and-Excitation Networks 论文地址:链接:https://pan.baidu.com/s/1VQxxIKb51N4D ...

  8. 《NormalNet: A voxel-based CNN for 3D object classification and retrieval 》翻译

    <NormalNet: A voxel-based CNN for 3D object classification and retrieval >翻译 摘要:处理3D对象识别任务的常见方 ...

  9. 1D CNN+2D CNN+3D CNN

    1D CNN+2D CNN+3D CNN 3D CNN过程详解 区别 1维卷积,核沿1个方向移动.一维CNN的输入和输出数据是2维的.主要用于时间序列数据. 2维卷积,核沿2个方向移动.二维CNN的输 ...

最新文章

  1. Numpy之N维数组-ndarray
  2. python代码写好了怎么运行并画图-无所不能的python编程是怎么快速画图的呢?5分钟学会!...
  3. CEO 赠书 | 打破创新神话,揭示创新本质
  4. ImageView的scaleType理解
  5. 万元大奖,FlyAI算法新赛事,心理卡牌目标检测
  6. 大数据学习笔记53:Flume Sink Processors(Flume接收器处理器)
  7. Java基础-final关键字
  8. python学起来很蛋疼_一个初学者的辛酸路程-了解Python-2
  9. 腾讯翻译君在线翻译怎么翻译整个文件_Word文档翻译:分享下面几种方法
  10. 【Unity 资源分享】☀️ | Unity 超好看的 精品四季蔚蓝自然场景模型 ,让我们离二次元开发更近一步!
  11. Unity笔记-29-ARPG游戏项目-13-打击感(卡肉)与僵直感
  12. 二维光子晶体禁带的遗传优化算法实现
  13. 复旦大学高等代数期末考试班级前几名
  14. 关于Invalid bound statement (not found)出现原因和解决方法
  15. 【NVMe2.0b 6】NVMe 队列模型
  16. 数据库作业:关系数据库及相关概念
  17. 基于Nios-II的流水灯实验
  18. html css x y相对定位坐标,HTML与CSS之相对定位、绝对定位
  19. 牛客SQL 大厂面试真题 某滴打车 6套代码及解析
  20. linux没有写的权限问题

热门文章

  1. 第三章第三十题(当前时间)(Current time)
  2. System.BadImageFormatException:“未能加载文件或程序集“xxx”或它的某一个依赖项。试图加载格式不正确的程序。”
  3. 计算机网络基础这门课的介绍,课程介绍
  4. linux对笔记本,联想转变对Linux笔记本态度更认真对待
  5. SSH整合方式1——无障碍整合
  6. 用计算机怎么扣税点,工资超过3500怎么扣税 利用计算器轻松算缴纳金额
  7. 什么是DNS?DNS端口号是多少?什么是DNS服务,DNS服务器?DNS域名解析原理
  8. c语言单向链表插入字符串,C语言之单向链表
  9. eclipse和idea导出jar包
  10. @Value中#和$的用法