一、卷积(convolution)
卷积操作就是使用卷积核从左往右、从上往下依次扫描输入的原始矩阵,得到一个降维后的特征矩阵。
使用
f
∗
f
f*f
f∗f维的卷积核对
n
∗
n
n*n
n∗n的原始矩阵与进行卷积操作,会得到
(
n
∗
f
−
1
)
∗
(
n
∗
f
−
1
)
(n*f-1)*(n*f-1)
(n∗f−1)∗(n∗f−1)维的特征矩阵。
缺点:
1.每次卷积后会降低数据的维数,多次卷积后特征矩阵就过于小了。
2.矩阵的角落元素只会参与一次运算,而中间的元素会参与多次运算,相当于丢掉了边缘位置的许多信息。
即输出缩小和边缘信息丢失问题。为了解决这些问题,提出了padding操作。
二、填充(padding)
填充指在原始矩阵的外围填充p层0元素,设f为卷积核的维数,则当
p
=
(
f
−
1
)
/
2
p=(f-1)/2
p=(f−1)/2时,卷积后的特征矩阵将等于原始矩阵维数。
常用的padding有:
1.valid padding:
p
=
0
p=0
p=0,即不填充;
2.same padding:
p
=
(
f
−
1
)
/
2
p=(f-1)/2
p=(f−1)/2,即原始矩阵维数=特征矩阵维数;
以下是same padding的原理:
设原始矩阵为
n
∗
n
n*n
n∗n维,卷积核为
f
∗
f
f*f
f∗f维,则填充
p
p
p层后,
特征矩阵维数
=
n
+
2
p
−
f
+
1
=n+2p-f+1
=n+2p−f+1;
由
n
+
2
p
−
f
+
1
=
n
n+2p-f+1=n
n+2p−f+1=n,得:
p
=
(
f
−
1
)
/
2
p=(f-1)/2
p=(f−1)/2,所以卷积核的维数一般是奇数,因为偶数维的卷积核无法进行对称填充。
三、带步幅的卷积(strided convolution)
带步幅进行卷积操作时,每次移动的步长不是
1
1
1而是设定的
s
s
s,则维度计算为:
特
征
矩
阵
维
度
=
⌊
n
+
2
p
−
f
s
⌋
+
1
特征矩阵维度=\left \lfloor \frac{n+2p-f}{s}\right \rfloor+1
特征矩阵维度=⌊sn+2p−f⌋+1
其中
n
n
n为原始矩阵维度,
p
p
p为填充层数,
f
f
f为卷积核维数,
s
s
s为步长,
⌊
⌋
\left \lfloor \right \rfloor
⌊⌋为向下取整。
四、池化
进行池化操作是为了保持某种不变性(平移、旋转、伸缩)的同时降低数据维度。
池化操作包括最大池化和平均池化,其超参数为过滤器大小
f
f
f和步长
s
s
s。其操作方式与卷积相似,这里的过滤器相当于卷积核。
1.最大池化:用过滤器以步长
s
s
s扫描原始矩阵,每次取过滤器覆盖范围内的最大值作为结果。
作用:实现下采样,降低维度,去除冗余信息而保留关键特征,表现在图像上是会保留更多的纹理信息。
2.平均池化:用过滤器以步长s扫描原始矩阵,每次取过滤器范围内的平均值作为结果。
作用:实现下采样,降低维度,整合一个区域的信息,表现在图像上是会保留更多的背景信息。
五、应用示例:边缘检测
分为横向边缘检测和纵向边缘检测,其原理是通过构造一个特定的卷积核对原始图片进行卷积操作后得到一个特征图,这个特征图恰好能反映图像的边缘。
常见的边缘检测卷积核有:
纵向检测filter
∣
1
0
−
1
1
0
−
1
1
0
−
1
∣
\begin{vmatrix} 1 & 0 & -1 \\ 1 & 0 & -1 \\ 1 & 0 & -1 \\ \end{vmatrix}
∣∣∣∣∣∣111000−1−1−1∣∣∣∣∣∣
sobel filter
∣
1
0
−
1
1
0
−
1
1
0
−
1
∣
\begin{vmatrix} 1 & 0 & -1 \\ 1 & 0 & -1 \\ 1 & 0 & -1 \\ \end{vmatrix}
∣∣∣∣∣∣111000−1−1−1∣∣∣∣∣∣
当前最常见的方式是使用深度学习获得一个边缘检测算子,可以达到从不同角度进行边缘检测的效果。