PyTorch自动驾驶视觉感知算法实战
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.2.1 什么是卷积运算

假设神经网络的任务是要识别出图片中的直线,将图片用图1-6所示左侧二维矩阵的形式来表达,图中高亮的两条标识为1的直线容易识别出来。如果把二维的图片整平成右侧的一维向量,直线上的像素会零散地分布在向量的各个位置,再要去识别出直线,就很困难。这是因为直线是基于相邻像素在二维空间的几何连续性形成的,而整平之后,这种连续性就被破坏了,识别难度将大大增加。

• 图1-6 整平操作

为了保持二维输入的几何连续性,卷积神经网络选择使用二维的卷积核(Kernel)作为权重。前文说到的MLP网络,每一个输入都会和不同的权重值相乘,故MLP的网络层也被称之为全连接层(Fully Connected Layer)。而卷积神经网络的卷积核是重复使用的,卷积的计算过程如图1-7所示。

• 图1-7 卷积运算

图1-7中深色的3×3矩阵就是卷积核,浅色的5×5矩阵则是输入图像。卷积核与其覆盖的图像区域求点积,便得到了卷积核中心所在像素的输出特征。现在来计算图中深色卷积核所在的位置的卷积:可以看到卷积核第一行没有和任何像素重叠,这种情况总是发生在图像的边缘。一般的做法是将露出来的卷积核权重值与0相乘,所以这种做法也称零填充(Zero Padding),很容易计算出图中卷积核位置的特征是2。同一个卷积核一行一行地扫描过每一个像素并计算出特征,最终就能得到一个特征图(Feature Map)。读者可以自行计算一下作为练习,看看结果是不是和右边的输出特征图一致。

读者可能注意到了,整个计算过程中从头到尾都在重复使用同一个卷积核,这就是卷积运算的“权值共享”特性。卷积的运算效率很高,例如,这幅5×5的输入图像,整平之后输入到一个全连接层进行点积运算,需要25个权重值,进行25×25次乘法运算,最后得到一个特征;而使用卷积运算,只需要9个权重值,进行9×25次乘法运算,最终能得到一个和原图分辨率一致的特征图。