我刚开始学习深度学习,试图理解CNN是如何进行图像分类的
我已经看过了多个YouTube视频、博客和论文。他们大致都提到同样的事情:
- 添加滤波器以获取特征图
- 执行池化操作
- 使用RELU去除线性
- 发送到全连接网络。
虽然这些步骤都很好,但我实际上并不理解卷积的本质。例如,边缘检测。
例如:[[-1, 1], [-1,1]] 可以检测到垂直边缘。
这是怎么做到的?为什么?我们怎么确定这个矩阵能检测到垂直边缘?
同样,模糊/锐化用的矩阵,我们怎么知道它们确实能完成预期的任务?
我只是简单地相信别人的话吗?
请帮助我/我感到无助,因为我无法理解卷积以及矩阵是如何检测边缘或形状的
回答:
滤波器通过检测图像中像素强度值的变化来检测图像中的空间模式,如边缘。
快速回顾:就图像而言,高频图像是指像素强度变化很大的图像,而低频图像是指像素强度几乎均匀的图像。一个图像既有高频成分,也有低频成分。高频成分对应于物体的边缘,因为在边缘处像素值强度的变化率很高。
高通滤波器用于增强图像的高频部分。
让我们举个例子,假设你的图像的一部分像素值为[[10, 10, 0], [10, 10, 0], [10, 10, 0]],表示图像像素值向右减少,即图像从左侧的亮变为右侧的暗。这里使用的滤波器是[[1, 0, -1], [1, 0, -1], [1, 0, -1]]。
现在,我们对这两个矩阵进行卷积运算,得到输出[[10, 0, 0], [10, 0, 0], [10, 0, 0]]。最后,这些值相加得到像素值30,这表明了从左到右像素值的变化。同样,我们可以找出后续的像素值。
在这里,你会注意到像素值的变化率从左到右变化很大,因此检测到了垂直边缘。如果你使用了滤波器[[1, 1, 1], [0, 0, 0], [-1, -1, -1]],你将得到仅包含0的卷积输出,即没有水平边缘存在。同样,[[-1, 1], [-1, 1]] 检测到了垂直边缘。
你可以在这里查看更多内容,来自Andrew Ng的讲座。
编辑:通常,垂直边缘检测滤波器在左侧有亮像素,在右侧有暗像素(反之亦然)。滤波器的值总和应为0,否则结果图像将变得更亮或更暗。此外,在卷积神经网络中,滤波器是通过训练过程中的反向传播像超参数一样被学习的。