CNN1.6-三维卷积

三维卷积 (Convolutions Over Volumes)

让我们来举个例子:假设你想在这图片中检测特征,不仅仅是对灰色图像(灰度图像),而是对RGB(红绿蓝)图像。因此,一个RGB(红绿蓝)图像的尺寸不会是 6x6,而是 6 x 6 x 3;这里的“3”对应的是颜色的三通道。因此你可以将此看作是三张 6x6 图像的叠加

为了检测图像的边缘或者其他的特征,不是把它跟原来的3×3的过滤器做卷积,而是跟一个三维的过滤器,它的维度是3×3×3,这样这个过滤器也有三层,对应红绿、蓝三个通道。

 给这些起个名字(原图像),这里的第一个6代表图像高度,第二个6代表图像宽度,这个3代表通道的数目。同样地,你的过滤器也有一个高,宽和通道数,并且图像的通道数必须和过滤器的通道数匹配,所以这两个数(紫色方框标记的两个数)必须相等。下个幻灯片里,我们就会知道这个卷积操作是如何进行的了,这个的输出会是一个4×4的图像,注意是4×4×1,最后一个数不是3了。

卷积的计算

我们研究下这背后的细节,首先先换一张好看的图片。这个是6×6×3的图像,这个是3×3×3的过滤器,最后一个数字通道数必须和过滤器中的通道数相匹配。为了简化这个3×3×3过滤器的图像,我们不把它画成3个矩阵的堆叠,而画成这样,一个三维的立方体。

在这里插入图片描述

为了计算这个卷积操作的输出,你要做的就是把这个3×3×3的过滤器先放到最左上角的位置,这个3×3×3的过滤器有27个数字(或说27个参数,这是3的立方体),27个参数就是3的立方。接下来你要做的是用这个立方体中的每一个数字(即依次取这27个数),分别与图像中的红、绿、蓝三通道的对应数字相乘。于是先取红色通道的前9个数字,然后是绿色通道,然后再是蓝色通道,然后与相对应的左边这个黄色方块里的27个数字相乘(即乘以左边黄色立方体覆盖的对应的27个数字),然后把所有这些数都加起来,就得到了输出中的第一个数字

为了得到下一个数字,你需要把这个黄色方块挪动到下一个位置,然后再一次做27次相乘,并相加,就得到下一个输出数字了。

后面计算以此类推。如图:

在这里插入图片描述

那么,这个能干什么呢?举个例子:这个过滤器是3 x 3 x 3 的,所以如果你想要检测图片里红色通道的边缘,那你可以在第一层过滤器上,设置它(过滤器)的值,如下图表格

10

-1

10-1
10-1

(第一层过滤器)

00

0

000
000

(第二层过滤器,然后在绿色通道上全部为0)

00

0

000
000

(第三层过滤器,在蓝色通道上也全部用0)

如果你用的是这三层(上述)相叠加来获得你的3x3x3过滤器,那么这个过滤器就可以仅仅检测红色通道的垂直边缘。

或者,如果你并不在意一个垂直边缘属于哪个颜色,那么你可能会想要一个这样的过滤器(如下图),通过第二种不同的序列,设定参数(RGB),你会得到一个边缘检测器3x3x3,用来检测任何颜色的边缘。参数的选择不同,你就可以得到不同的特征检测器。

通常在计算机视觉领域,当你的输入有一个固定的高度和宽度,和一个固定数量的通道,那么你的过滤器可能会有不同的高度和不同的宽度,但有相同数量的通道。理论上来说,我们可以有一个只负责红色通道的过滤器,或者一个只负责绿色(或蓝色)通道的过滤器。

再注意一下这个卷积立方体,一个6×6×6的输入图像卷积上一个3×3×3的过滤器,得到一个4×4的二维输出

 现在你已经了解了如何对立方体卷积,还有最后一个对建立卷积神经网络至关重要的概念。就是,如果我们不仅仅想要检测垂直边缘呢?如果我们想同时检测垂直边缘和水平边缘,又或者是45°倾斜的边缘,或者70°倾斜的边缘怎么办?换句话说,如果你想同时应用多个过滤器怎么办?

这是我们上一张幻灯片的图片,我们让这个6×6×3的图像和这个3×3×3的过滤器卷积,得到4×4的输出。(第一个)这可能是一个垂直边界检测器或者是这是用来学习检测其他的某个特征。现在,第二个过滤器可以用橘色来表示,它可以(可能)是一个水平边缘检测器。

在这里插入图片描述

那么之前通过第一个过滤器来卷积,我们已经得到了第一个4x4输出。

然后用第二个过滤器来卷积就能得到一个不同的4x4输出。我们可以用这两个4x4输出,把第一个过滤器放前面,接着在后面放第二个过滤器(第一个紫色框,第二个淡蓝色框),那么将这两个一起叠加,你会得到一个4x4x2输出体积(体积可以理解为上面蓝色的立方体盒子)。

也就是说,通过两个不同的3x3x3过滤器来卷积或者说应用在6x6x3图片上,得到了两个4x4输出,然后相叠加来得到一个4x4x2立方体。这里的“2”代表我们用了两个不同的过滤器。

下面让我们来总结一下这里的维度:

如果你有n * n *  n_c(通道的数量)的输入图片。如本例6*6*3。

通常来说,这两个n_c必须相同(紫色框框),这里 n_c ′ 其实就是下一层的通道数,也就是你所用的过滤器的数量。我写下这个假设时,用的步幅为1,并且没有padding。如果你用了不同的步幅或者padding,那么这个 n − f + 1 的数值会被影响。

在这里插入图片描述

所以这个对立方体卷积的概念真的很有用,其中一小部分的作用在于你现在可以直接在三个通道的RGB图像上进行操作。但是更重要的是,你可以检测两个特征,比如垂直和水平边缘或者10个或者128个甚至几百个不同的特征,那么这个输出的通道数会等于过滤器的数目(你要检测的特征数)。

 对于这里的符号,我一直用通道数(n_c)来表示最后一个维度,在文献里大家也把它叫做3维立方体的深度。这两个术语,即通道或者深度,经常被用在文献中。但我觉得深度容易让人混淆,因为你通常也会说神经网络的深度。所以,在这些视频里我会用通道这个术语来表示过滤器的第三个维度的大小。

链接:https://blog.csdn.net/qq_36575363/article/details/109710721

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值