当前位置: 首页 > article >正文

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

如是我闻: 离散卷积(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+0×0=0.5+20+0+0=20.5


位置 (2,1) 的计算

将卷积核滑动到图像的下一行(位置 ( 2 , 1 ) (2,1) (2,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

对齐子矩阵 = [ 0.25 0 0 40 ] \text{对齐子矩阵} = \begin{bmatrix} 0.25 & 0 \\ 0 & 40 \end{bmatrix} 对齐子矩阵=[0.250040]
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.25 + 0.5 × 0 + 0.25 × 0 + 0 × 40 = 0.25 + 0 + 0 + 0 = 0.25 1 \times 0.25 + 0.5 \times 0 + 0.25 \times 0 + 0 \times 40 = 0.25 + 0 + 0 + 0 = 0.25 1×0.25+0.5×0+0.25×0+0×40=0.25+0+0+0=0.25


位置 (2,2) 的计算

将卷积核滑动到图像的右下角(位置 ((2,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 0 40 0 ] \text{对齐子矩阵} = \begin{bmatrix} 0 & 0 \\ 40 & 0 \end{bmatrix} 对齐子矩阵=[04000]

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 + 0.5 × 0 + 0.25 × 40 + 0 × 0 = 0 + 0 + 10 + 0 = 10 1 \times 0 + 0.5 \times 0 + 0.25 \times 40 + 0 \times 0 = 0 + 0 + 10 + 0 = 10 1×0+0.5×0+0.25×40+0×0=0+0+10+0=10


4. 输出结果

将以上计算结果整理成一个输出矩阵:
输出 = [ 1.3125 20.5 0.25 10 ] \text{输出} = \begin{bmatrix} 1.3125 & 20.5 \\ 0.25 & 10 \end{bmatrix} 输出=[1.31250.2520.510]


5. 总的来说

  • 离散卷积的本质是通过卷积核提取图像的局部特征
  • 核心步骤:
    1. 将卷积核翻转;
    2. 按位置滑动;
    3. 在每个位置计算局部点积;
    4. 输出一个新的矩阵作为特征图。

以上


http://www.kler.cn/a/519029.html

相关文章:

  • 系统思考—问题分析
  • 网易Android开发面试题200道及参考答案 (下)
  • 字符串算法笔记
  • 视频多模态模型——视频版ViT
  • 【技巧】优雅的使用 pnpm+Monorepo 单体仓库构建一个高效、灵活的多项目架构
  • 如何解压rar格式文件?8种方法(Win/Mac/手机/网页端)
  • DBSCAN密度聚类
  • 批量创建ES索引
  • 【Rust自学】14.5. cargo工作空间(Workspace)
  • Commander 一款命令行自定义命令依赖
  • 国自然重点项目|代谢影像组学只能预测肺癌靶向耐药的关键技术与应用|基金申请·25-01-25
  • 10.片元
  • 第14章 7种单例设计模式的设计(Java高并发编程详解:多线程与系统设计)
  • ubuntu18.04安装nvm管理本机node和npm
  • macos的图标过大,这是因为有自己的设计规范
  • 【精选】基于数据挖掘的招聘信息分析与市场需求预测系统 职位分析、求职者趋势分析 职位匹配、人才趋势、市场需求分析数据挖掘技术 职位需求分析、人才市场趋势预测
  • Coze,Dify,FastGPT,对比
  • 计算机的错误计算(二百二十二)
  • BGP分解实验·11——路由聚合与条件性通告(3)
  • 再述 Dijkstra
  • 【Elasticsearch】聚合分析:度量聚合
  • 互动视频还是游戏?还是?世界模型
  • nginx部署前端项目
  • docker-compose篇---创建jupyter并可用sudo的创建方式
  • MySQL 基础学习(2): INSERT 操作
  • CLion入门2.0(优雅进行STM32和ESP32开发)(船新版本)