深度学习|表示学习|卷积神经网络|离散卷积的操作详细|10

时间:2025-01-26 19:34:31

如是我闻: 离散卷积(Discrete Convolution)是CNN中一个非常重要的操作。它是图像处理和特征提取的核心,用来从输入图像中提取不同的信息(如边缘、纹理等)。

在这里插入图片描述

1. 公式解析

离散卷积公式如下:
( x ∗ k ) i j = ∑ p , q x i + p , j + q ⋅ k r − p , r − q (x * k)_{ij} = \sum_{p,q} x_{i+p, j+q} \cdot k_{r-p, r-q} (xk)ij=p,qxi+p,j+qkrp,rq

让我们来拆解它的含义:

(1) 输入
  • x x x:输入的图像,通常是一个二维矩阵。每个元素代表一个像素的值(灰度值或其他)。
  • k k k:卷积核(kernel),也是一个小矩阵,通常用于提取图像中的某些特征,比如边缘、角点等。
(2) 输出
  • ( x ∗ k ) i j (x * k)_{ij} (xk)ij:输出的卷积结果矩阵,对应图像 x x x 上某一点 ( i , j ) (i, j) (i,j)的卷积值。
  • 这个结果是通过将卷积核 k k k 放在图像 x x x 上滑动计算得到的。
(3) 核心计算
  • 公式的核心是:对于图像中的每个位置 ( i , j ) (i, j) (i,j),将卷积核 k k k 与图像对应区域的像素逐点相乘,然后求和。
  • p , q p, q p,q:用于枚举卷积核中的元素。
  • r r r:表示卷积核的中心点位置。

特别注意:公式中的 k r − p , r − q k_{r-p, r-q} krp,rq 表示对卷积核进行行和列的翻转,这是离散卷积的重要步骤。


2. 举例

让我们通过一个例子来理解公式的实际操作过程。

(1) 输入图像 x x x

假设图像 x x x 是一个 3 × 3 3 \times 3 3×3 的矩阵:
x = [ 1 0.5 40 0.25 0 0 0 0 40 ] x = \begin{bmatrix} 1 & 0.5 & 40 \\ 0.25 & 0 & 0 \\ 0 & 0 & 40 \end{bmatrix} x= 10.2500.50040040

(2) 卷积核 k k k

假设卷积核 (k) 是一个 2 × 2 2 \times 2 2×2 的矩阵:
k = [ 0 0.25 0.5 1 ] k = \begin{bmatrix} 0 & 0.25 \\ 0.5 & 1 \end{bmatrix} k=[00.50.251]

(3) 核的翻转

根据离散卷积的定义,需要将卷积核 k k k 翻转
k ~ = [ 1 0.5 0.25 0 ] \tilde{k} = \begin{bmatrix} 1 & 0.5 \\ 0.25 & 0 \end{bmatrix} k~=[10.250.50]

这一步的翻转操作是为了实现标准的卷积定义。翻转后再与图像做对齐计算。

(4) 卷积操作

将卷积核 k ~ \tilde{k} k~滑动到图像 x x x 上,逐点计算输出。我们会对每个位置的局部矩阵进行点积并求和:


3. 详细的计算步骤

假设卷积的输出是一个 2 × 2 2 \times 2 2×2 的矩阵,下面是每个位置的计算:

位置 (1,1) 的计算

将卷积核的左上角对齐图像的左上角(位置 ( 1 , 1 ) (1,1) (1,1)):

x = [ 1 0.5 40 0.25 0 0 0 0 40 ] x = \begin{bmatrix} 1 & 0.5 & 40 \\ 0.25 & 0 & 0 \\ 0 & 0 & 40 \end{bmatrix} x= 10.2500.50040040

对齐子矩阵 = [ 1 0.5 0.25 0 ] \text{对齐子矩阵} = \begin{bmatrix} 1 & 0.5 \\ 0.25 & 0 \end{bmatrix} 对齐子矩阵=[10.250.50]

k ~ = [ 1 0.5 0.25 0 ] \tilde{k} = \begin{bmatrix} 1 & 0.5 \\ 0.25 & 0 \end{bmatrix} k~=[10.250.50]

计算点积:
1 × 1 + 0.5 × 0.5 + 0.25 × 0.25 + 0 × 0 = 1 + 0.25 + 0.0625 + 0 = 1.3125 1 \times 1 + 0.5 \times 0.5 + 0.25 \times 0.25 + 0 \times 0 = 1 + 0.25 + 0.0625 + 0 = 1.3125 1×1+0.5×0.5+0.25×0.25+0×0=1+0.25+0.0625+0=1.3125


位置 (1,2) 的计算

将卷积核滑动到图像的右侧(位置 ((1,2))):
x = [ 1 0.5 40 0.25 0 0 0 0 40 ] x = \begin{bmatrix} 1 & 0.5 & 40 \\ 0.25 & 0 & 0 \\ 0 & 0 & 40 \end{bmatrix} x= 10.2500.50040040

对齐子矩阵 = [ 0.5 40 0 0 ] \text{对齐子矩阵} = \begin{bmatrix} 0.5 & 40 \\ 0 & 0 \end{bmatrix} 对齐子矩阵=[0.50400]

k ~ = [ 1 0.5 0.25 0 ] \tilde{k} = \begin{bmatrix} 1 & 0.5 \\ 0.25 & 0 \end{bmatrix} k~=[10.250.50]

计算点积:
1 × 0.5 + 0.5 × 40 + 0.25 × 0 + 0 × 0 = 0.5 + 20 + 0 + 0 = 20.5 1 \times 0.5 + 0.5 \times 40 + 0.25 \times 0 + 0 \times 0 = 0.5 + 20 + 0 + 0 = 20.5 1×0.5+0.5×40+0.25×0+