深度学习笔记(三十一)三维卷积及卷积神经网络
RGB三维图像的卷积计算方法和二维卷积类似,从三维图像中划分出3×3×33\times3\times33×3×3的方块(称为卷积立方体),对这27个像素点进行卷积,即逐个元素与过滤器相乘求和,得到输出二维矩阵中的一个值。三维图像和过滤器可以有不同的高和宽,但是必须有相同的通道数。在RGB这个例子中,就是有R G B三个颜色通道(组成图像中的任意颜色)叠加过滤器试想一个问题,用前面的方法可以实现垂直
一、RGB三维图像的卷积
首先复习以下二维卷积运算的过程:
然后让我们看看三维图像如何进行有效的卷积运算。
计算方法和二维卷积类似,从三维图像中划分出
3
×
3
×
3
3\times3\times3
3×3×3的方块(称为卷积立方体),对这27个像素点进行卷积,即逐个元素与过滤器相乘求和,得到输出二维矩阵中的一个值。
三维图像和过滤器可以有不同的高和宽,但是必须有相同的通道数。在RGB这个例子中,就是有R G B三个颜色通道(组成图像中的任意颜色)
二、叠加过滤器
试想一个问题,用前面的方法可以实现垂直边缘检测和水平边缘检测,但是如果我们要检测的是更一般的边缘呢(换句话说:想检测更多的特征信息 )?比如43°。这个时候需要一种方法,叫做过滤叠加。
- 使用垂直边缘检测过滤器,得到垂直边缘检测结果【二维】。
- 使用水平边缘检测过滤器,得到水平边缘检测结果【二维】。
- 将垂直和水平边缘检测矩阵叠加得到【三维】结果。
- 该【三维】结果叠加了垂直和水平检测的效果。
来看看老师的示意图:
三、维度总结
三维图像:
n
×
n
×
n
c
n\times n\times n_c
n×n×nc
过滤器:
f
×
f
×
n
c
f\times f\times n_c
f×f×nc
卷积输出:
n
−
f
+
1
×
n
−
f
+
1
×
n
c
′
n-f+1\times n-f+1\times n_c'
n−f+1×n−f+1×nc′
其中,
n
c
′
=
n_c'=
nc′= #
f
i
l
t
e
r
s
filters
filters
注意,这里用到的padding=valid,stride=1.
所以更一般的卷积输出如下:
n
+
2
p
−
f
+
1
s
×
n
+
2
p
−
f
+
1
s
×
n
c
′
\frac{n+2p-f+1}{s}\times \frac{n+2p-f+1}{s}\times n_c'
sn+2p−f+1×sn+2p−f+1×nc′
输出的通道数
n
c
′
n_c'
nc′等于过滤器的数量,也等于检测的特征数(在上述RGB图像例子中,检测垂直和水平边缘两个特征)
四、单层卷积网络
计算单层网络中参数的个数
单层中图像是
3
×
3
×
3
3\times3\times3
3×3×3,过滤器数量为10,问该层有多少个参数?
- 每层27个位置,卷积运算后加上1个偏置值b,得到每个过滤器卷积时需要28个参数。
- 一共10个过滤器,作10次上述过程,共计280个参数。
可以看到,不管图像有多大,参数并不多,取决于过滤器的数量和大小,这个在卷积神经网络中称为避免过拟合。
五、符号说明
f [ l ] f^{[l]} f[l]:第 l l l层的过滤器大小
p [ l ] p^{[l]} p[l]:第 l l l层的padding数量
s [ l ] s^{[l]} s[l]:第 l l l层的stride步长
n c [ l ] n_c^{[l]} nc[l]:第 l l l层的过滤器数量
f [ l ] × f [ l ] × n c [ l − 1 ] f^{[l]}\times f^{[l]}\times n_c^{[l-1]} f[l]×f[l]×nc[l−1]:第 l l l层的过滤器维度
f [ l ] × f [ l ] × n c [ l − 1 ] × n c [ l ] f^{[l]}\times f^{[l]}\times n_c^{[l-1]}\times n_c^{[l]} f[l]×f[l]×nc[l−1]×nc[l]:第 l l l层的权重维度
n c [ l ] : 1 × 1 × 1 × n c [ l ] n_c^{[l]} :1\times1\times1\times n_c^{[l]} nc[l]:1×1×1×nc[l]:第 l l l层的偏置维度
n H [ l − 1 ] × n W [ l − 1 ] × n c [ l − 1 ] n_{H}^{[l-1]}\times n_{W}^{[l-1]}\times n_c^{[l-1]} nH[l−1]×nW[l−1]×nc[l−1]:第 l l l层的输入维度
n H [ l ] × n W [ l ] × n c [ l ] n_{H}^{[l]}\times n_{W}^{[l]}\times n_c^{[l]} nH[l]×nW[l]×nc[l]:第 l l l层的输出维度
m × n H [ l ] × n W [ l ] × n c [ l ] m\times n_{H}^{[l]}\times n_{W}^{[l]}\times n_c^{[l]} m×nH[l]×nW[l]×nc[l]:第 l l l层【m个样本】的输出维度(深度学习中的向量化技术)
n H [ l ] = ⌊ n H [ l − 1 ] + 2 p [ l ] − f [ l ] s [ l ] + 1 ⌋ n_{H}^{[l]}=\lfloor{\frac{n_{H}^{[l-1]}+2p^{[l]}-f^{[l]}}{s^{[l]}}+1}\rfloor nH[l]=⌊s[l]nH[l−1]+2p[l]−f[l]+1⌋
n W [ l ] = ⌊ n W [ l − 1 ] + 2 p [ l ] − f [ l ] s [ l ] + 1 ⌋ n_{W}^{[l]}=\lfloor{\frac{n_{W}^{[l-1]}+2p^{[l]}-f^{[l]}}{s^{[l]}}+1}\rfloor nW[l]=⌊s[l]nW[l−1]+2p[l]−f[l]+1⌋
六、卷积神经网络作图像分类
第一次卷积:
第二次卷积:
第三次卷积:
对最后一次卷积结果展开成一列向量,logistic/softmax回归得到预测结果。
七、卷积神经网络中的典型层类型
- 卷积层 Convolution(CONV)
- 池化层 Pooling(POOL)
- 全连接层 Fully Connected(FC)
虽然只搭建卷积层可以实现卷积神经网络,但是神经网络架构师通常会用上池化层和全连接层搭建神经网络,这两层网络比卷积层更容易搭建。将这三者结合起来,能搭建更为强大的神经网络。
祝大家2021新年快乐!祝自己2021年收获满满,能达到自己的预期!
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)