深度学习笔记----三维卷积及其应用(3DCNN,PointNet,3D U-Net)

目录

1.什么是三维卷积

1.1 三维卷积简介

1.2 三维卷积的工作原理

2,三维卷积核多通道卷积的区别

2.1 多通道卷积

 2.2 三维卷积和多通道卷积之间的区别

2.3 总结

3,三维卷积的应用

3.1 视频分类

3.2 点云分类

3.2.1 PointNet网络亮点

3.2.2  PointNet网络结构

3.3 图像分割(U-Net)

3.3.1 二维的U-Net

3.3.2 三维的U-Net


1.什么是三维卷积

1.1 三维卷积简介

      二维卷积是在单通道的一帧图像上进行滑窗操作,输入是高度H*宽度W的二维矩阵。三维卷积输入多了深度C这个维度,输入是高度H*宽度W*深度C的三维矩阵。在卷积神经网络中,网络每层的宽度是由每一层特征图图的通道数绝决定的。多通道卷积看起来和三维卷积有一样的深度,但两者之间是有本质的区别的。

      下面就是 3D 卷积,其过滤器深度小于输入层深度(核大小<通道大小)。因此,3D 过滤器可以在所有三个方向(图像的高度、宽度、通道)上移动。在每个位置,逐元素的乘法和加法都会提供一个数值。因为过滤器是滑过一个 3D 空间,所以输出数值也按 3D 空间排布。也就是说输出是一个 3D 数据。
 

       在 3D 卷积中,3D 过滤器可以在所有三个方向(图像的高度、宽度、通道)上移动。在每个位置,逐元素的乘法和加法都会提供一个数值。因为过滤器是滑过一个 3D 空间,所以输出数值也按 3D 空间排布。也就是说输出是一个 3D 数据。三维卷积被普遍用在视频分类,三维医学图像分割等场景中。

1.2 三维卷积的工作原理

     首先我们看一下3D CNN是如何对时间维度进行操作的,如下图所示,我们将时间维度看成是第三维,这里是对连续的四帧图像进行卷积操作,3D卷积是通过堆叠多个连续的帧组成一个立方体,然后在立方体中运用3D卷积核。在这个结构中,卷积层中每一个特征map都会与上一层中多个邻近的连续帧相连,因此捕捉运动信息。
 

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

2,三维卷积核多通道卷积的区别

2.1 多通道卷积

 首先先看一下多通道卷积,如下图所示 ,这里多通道的卷积不同通道上的卷积核参数是不相同的。

具体的实现过程为:

在这里插入图片描述

多通道特征图大小公式:

 

 2.2 三维卷积和多通道卷积之间的区别

1)结构不一样:三维卷积核的大小为k*k*d,三维特征图的深度为L,一般d<L,由于卷积核本身是三维的(如下图所示),在三维的特征图上进行卷积时权重是共享的,输出时一个三维的特征图,所以和上面的多通道的卷积结构是不一样的。

                                                              三维卷积示意

                                                        二维卷积示意 

 2)参数不一样:三维卷积核多通道卷积本质上是不同的,一次多通道卷积的数量为k*k*L(待卷积的三维特征图的深度为L),一次三维卷积的参数量为k*k*d,如果载考虑三维卷积的通道数C,则需要的参数数量为k*k*d*C.所以三维卷积和二维卷积的参数比为d*C/L,这样三维卷积的数量级会增加一个级别。

2.3 总结

     3D CNN主要运用在视频分类、动作识别等领域,它是在2D CNN的基础上改变而来。由于2D CNN不能很好的捕获时序上的信息,因此我们采用3D CNN,这样就能将视频中时序信息进行很好的利用。首先我们介绍一下2D CNN与3D CNN的区别。如下图所示,a)和b)分别为2D卷积用于单通道图像和多通道图像的情况(此处多通道图像可以指同一张图片的3个颜色通道,也指多张堆叠在一起的图片,即一小段视频),对于一个滤波器,输出为一张二维的特征图,多通道的信息被完全压缩了。而c)中的3D卷积的输出仍然为3D的特征图。也就是说采用2D CNN对视频进行操作的方式,一般都是对视频的每一帧图像分别利用CNN来进行识别,这种方式的识别没有考虑到时间维度的帧间运动信息,而使用3D CNN能更好的捕获视频中的时间和空间的特征信息。

3,三维卷积的应用

3.1 视频分类

    虽然视频本质上是连续帧的二维图像,但是如果将一段视频切片当做一个整体,将其数据升级到三维,三维卷积神经网络在视频方面应用最广泛的就是进行视频分类。与二维神经网络相同,三维神经网络也包括输入层,卷积层,池化层,全连接层,损失函数层等网络层。下面相似介绍图中的三维神经网络的工作原理:

input—>H1:

      神经网络的输入为7张大小为60*40的连续帧,7张帧通过事先设定硬核(hardwired kernels)获得5种不同特征:灰度、x方向梯度、y方向梯度、x方向光流、y方向光流,前面三个通道的信息可以直接对每帧分别操作获取,后面的光流(x,y)则需要利用两帧的信息才能提取,因此H1层的特征maps数量:(7+7+7+6+6=33)[解释:7个灰度(输入是7个),7个x方向梯度,7个y方向梯度,6个x方向光流(因为是两帧作差得到的,所以7个,相互两个作差就是6个),6个y方向光流],特征maps的大小依然是60* 40。

H1—>C2

       用两个7*7*3的3D卷积核对5个channels分别进行卷积,获得两个系列,每个系列5个channels(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。然后为卷积结果加上偏置套一个tanh函数进行输出。(典型神经网。)

C2—>S3

   2x2池化,下采样。下采样之后的特征maps数量保持不变,因此S3层的特征maps数量为:23 *2。特征maps的大小为:((54 / 2) *  (34 /2)=27  *17

S3—>C4

   为了提取更多的图像特征,用三个7*6*3的3D卷积核分别对各个系列各个channels进行卷积,获得6个系列,每个系列依旧5个channels的大量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

然后加偏置套tanh。

C4—>S5

3X3池化,下采样。此时每个maps的大小:7* 4。通道maps数量分布情况如下:

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

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

S5—>C6

      进行了两次3D卷积之后,时间上的维数已经被压缩得无法再次进行3D卷积(两个光流channels只有两个maps)。此时对各个maps用7*42D卷积核进行卷积,加偏置套tanh(烦死了!),获得C6层。C6层维度已经相当小,flatten为一列有128个节点的神经网络层。

C6—>output

      经典神经网络模型两层之间全链接,output的节点数目随标签而定。
 

3.2 点云分类

     点云是一些三维点的集合,长使用N*3的矩阵便是,N表示的是点云的点数,在集合上,点的顺序不影响它在空间中对整体形状的表示。点云具有无序性,在几何上,点的顺序不影响它在空间中对整体形状的表示。所以对点云的输入不做处理,很难设计模型来完成分类的任务。最具代表的对点云处理的神经网络为PointNet,下面详细介绍该网络的工作原理。 

3.2.1 PointNet网络亮点

1)空间变换网络解决旋转问题:三维的STN(空间变换网络)可以通过学习点云本身的位姿信息学习到一个最有利于网络进行分类或分割的DxD旋转矩阵(D代表特征维度,pointnet中D采用3和64)。至于其中的原理,我的理解是,通过控制最后的loss来对变换矩阵进行调整,pointnet并不关心最后真正做了什么变换,只要有利于最后的结果都可以。pointnet采用了两次STN,第一次input transform是对空间中点云进行调整,直观上理解是旋转出一个更有利于分类或分割的角度,比如把物体转到正面;第二次feature transform是对提取出的64维特征进行对齐,即在特征层面对点云进行变换。

空间变换网络STN,可有参考微博:

https://accounts.google.com/b/0/AddMailService

2)maxpooling解决无序性问题:网络对每个点进行了一定程度的特征提取之后,maxpooling可以对点云的整体提取出global feature。特征网络提取到的特征是n*1024,通过最大池化变为1*1024;

3.2.2  PointNet网络结构

      其中,mlp是通过共享权重的卷积实现的,第一层卷积核大小是1x3(因为每个点的维度是xyz),之后的每一层卷积核大小都是1x1。即特征提取层只是把每个点连接起来而已。经过两个空间变换网络和两个mlp之后,对每一个点提取1024维特征,经过maxpool变成1x1024的全局特征。再经过一个mlp(代码中运用全连接)得到k个score。分类网络最后接的loss是softmax。

   上图中 STN的作用是为了学习点云本身的位姿信息,得到旋转矩阵。在该网络中,有两次这样的学习过程,第一次是输入转换,它对空间中的点云进行旋转调整后得到更有利于任务的角度,如把物体转到正面,变换矩阵是3*3。第二次是特征转换,它将提取的64维的特征对齐,在特征层对点云进行变换,变换举证是64*64.但是由于变换矩阵过大,通过添加正则项,可以使变换矩阵近似正交矩阵,因此大大降低参数数量。

变换矩阵部分STN的代码实现:

3.3 图像分割(U-Net)

    除了分类任务,三维卷积还可以用于三维图像,视频,点云的分割,这些任务同样可以采用U-Net结构,只需要将二维的卷积和反卷积全部替换成三维的即可。

3.3.1 二维的U-Net

     U-Net的U形结构如下图所示。网络是一个经典的全卷积网络(即网络中没有全连接操作)。网络的输入是一张572*572的边缘经过镜像操作(见下面的解释)的图片(input image tile),网络的左侧(红色虚线)是由卷积和Max Pooling构成的一系列降采样操作,论文中将这一部分叫做压缩路径(contracting path)。压缩路径由4个block组成,每个block使用了3个有效卷积和1个Max Pooling降采样,每次降采样之后Feature Map的个数乘2,因此有了图中所示的Feature Map尺寸变化。最终得到了尺寸为 32*32 的Feature Map。

       网络的右侧部分(绿色虚线)在论文中叫做扩展路径(expansive path)。同样由4个block组成,每个block开始之前通过反卷积将Feature Map的尺寸乘2,同时将其个数减半(最后一层略有不同),然后和左侧对称的压缩路径的Feature Map合并,由于左侧压缩路径和右侧扩展路径的Feature Map的尺寸不一样,U-Net是通过将压缩路径的Feature Map裁剪到和扩展路径相同尺寸的Feature Map进行归一化的(即图1中左侧虚线部分)。扩展路径的卷积操作依旧使用的是有效卷积操作,最终得到的Feature Map的尺寸是 388*388 。由于该任务是一个二分类任务,所以网络有两个输出Feature Map。是因为U-Net采用了与FCN完全不同的特征融合方式:拼接!

总结

U-Net是比较早的使用多尺度特征进行语义分割任务的算法之一,其U形结构也启发了后面很多算法。但其也有几个缺点:

  1. 有效卷积增加了模型设计的难度和普适性;目前很多算法直接采用了same卷积,这样也可以免去Feature Map合并之前的裁边操作
  2. 其通过裁边的形式和Feature Map并不是对称的,个人感觉采用双线性插值的效果应该会更好。

镜像操作: 

 U-Net对输入数据做了镜像操作,下面看看镜像操作是什么。

镜像操作即是给输入图像加入一个对称的边如下图所示,那么边的宽度是多少呢?一个比较好的策略是通过感受野确定。因为有效卷积是会降低Feature Map分辨率的,但是我们希望512*512  的图像的边界点能够保留到最后一层Feature Map。所以我们需要通过加边的操作增加图像的分辨率,增加的尺寸即是感受野的大小,也就是说每条边界增加感受野的一半作为镜像边。

3.3.2 三维的U-Net

        生物医学影像(biomedical images)很多时候都是块状的,也就是说是由很多个切片构成一整张图的存在。如果是用2D的图像处理模型去处理3D本身不是不可以,但是会存在一个问题,就是不得不将生物医学影像的图片一个slice一个slice成组的(包含训练数据和标注好的数据)的送进去设计的模型进行训练,在这种情况下会存在一个效率问题,因而很多时候处理块状图的时候会让任感到不适,并且数据预处理的方式也相对比较繁琐(tedious)。

     所以,论文的作者就提出来了3D -Net模型,模型不仅解决了效率的问题,并且对于块状图的切割只要求数据中部分切片被标注即可(可参考下图说明)。

      整个3D U-Net的模型是基于之前U-Net(2D)创建而来,同样包含了一个encoder部分和一个decoder部分,encoder部分是用来分析整张图片并且进行特征提取与分析,而与之相对应的decoder部分是生成一张分割好的块状图。论文中使用的输入图像的大小是132 * 132 * 116,整个网络的结构前半部分(analysis path)包含及使用如下卷积操作:

a. 每一层神经网络都包含了两个 3 * 3 * 3的卷积(convolution)

b. Batch Normalization(为了让网络能更好的收敛convergence)

c. ReLU

d. Downsampling:2 * 2 * 2的max_polling,步长stride = 2

而与之相对应的合成路径(synthesis path)则执行下面的操作:

a. upconvolution: 2 * 2 * 2,步长=2

b. 两个正常的卷积操作:3 * 3 * 3

c. Batch Normalization

d. ReLU

e. 于此同时,需要把在analysis path上相对应的网络层的结果作为decoder的部分输入,这样子做的原因跟U-Net博文提到的一样,是为了能采集到特征分析中保留下来的高像素特征信息,以便图像可以更好的合成。

       整体的一个网络结构如上图所示,其实可以看出来跟2D结构的U-Net是基本一样,唯一不同的就是全部2D操作换成了3D,这样子做了之后,对于volumetric image就不需要单独输入每个切片进行训练,而是可以采取图片整张作为输入到模型中(PS:但是当图像太大的时候,此时需要运用random crop的技巧将图片随机裁切成固定大小模块的图片放入搭建的模型进行训练,当然这是后话,之后将会在其他文章中进行介绍)。除此之外,论文中提到的一个亮点就是,3D U-Net使用了weighted softmax loss function将未标记的像素点设置为0以至于可以让网络可以更多地仅仅学习标注到的像素点,从而达到普适性地特点。

总结

论文针对肾脏的生物医学影像的分割结果达到了IoU=86.3%的结果。3D U-Net的诞生在医学影像分割,特别是那些volumetric images都是由很大帮助的,因为它很大程度上解决了3D图像一个个slice送入模型进行训练的尴尬局面,也大幅度的提升训练效率,并且保留了FCN和U-Net本来具备的优秀特征。

  • 79
    点赞
  • 479
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值