卷积神经网络中边缘检测矩阵的直觉

我刚开始学习深度学习,试图理解CNN是如何进行图像分类的

我已经看过了多个YouTube视频、博客和论文。他们大致都提到同样的事情:

  1. 添加滤波器以获取特征图
  2. 执行池化操作
  3. 使用RELU去除线性
  4. 发送到全连接网络。

虽然这些步骤都很好,但我实际上并不理解卷积的本质。例如,边缘检测。

例如:[[-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,否则结果图像将变得更亮或更暗。此外,在卷积神经网络中,滤波器是通过训练过程中的反向传播像超参数一样被学习的。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注