图像识别之卷积讲解

本文详细阐述了卷积的概念,从连续空间的卷积定义出发,解释了卷积如何应用于图像处理中,即通过卷积核对图像进行操作,形成新的图像。讨论了卷积在图像识别中的意义,以及线性系统与卷积的关系,强调了线性移不变系统输出可通过输入与系统线性特征函数的卷积得到。

下面详细说明一下卷积的概念

先来说明一下连续空间的卷积定义

连续空间的卷积定义是f(x)与g(x)的卷积是f(t-x)g(x)在t从负无穷到正无穷 的积分值,t-x要在f(x)定义域内,所以看上去很大的积分实际上还是在一定范围内的。

实际的过程就是f(x)先做一个Y轴的反转,然后再沿X轴平移t就是f(t-x),然后再把g(x)拿来,两者乘积低的值再积分,(由于大多数模板都是对称的,所以模板不旋转)想象一下如果g(x)或者f(x)是个单位的阶跃函数,那么就是f(t-x)与g(x)相交部分的面积,这就是卷积了。

关于阶跃函数,参考百度百科

定义

编辑

普通函数

在数学中,如果实数域上的某个函数可以用半开区间上的指示函数的有限次线性组合来表示,那么这个函数就是阶跃函数。阶跃函数是有限段分段常数函数的组合。
阶跃函数是奇异函数,t<0时,函数值为0;t=0时,函数值为1/2,;t>0时,函数值为1[1]  。

广义函数

按广义函数理论,单位阶跃函数ε(t)的定义为:
 
即阶跃函数ε(t)作用与检验函数φ(t)的效果是赋予它一个数值,该值等于φ(t)在(0,∞)区间的定积分[1]  

把积分符号换成求和就是离散空间的卷积定义了,那么在图像中卷积是什么意思呢,就是图像是f(x),模板g(x),然后将模板g(x)在模板中移动,每到一个位置,就把f(x)与g(x)的定义域相交的元素进行乘机并且求和,得出新的图像一点,就是被卷积后的图像,模板又称为卷积核,卷积核做一个矩阵的形状。

卷积定义上是现行系统分析经常用到的,线性系统就是一个系统的输入和输出的关系是线性关系,就是说整个系统可以分解成N多的无关独立变化,整个系统就是这些变化的累加。

如 x1->y1, x2->y2; 那么A*x1 + B*x2 -> A*y1 + B*y2,这就是线性系统,表示一个线性系统可以用积分的形式,如Y = Sf(t,x)g(x)dt,S是积分的符号,f(t,x)表示的是A,B之类的线性系数。

看上去很像卷积,如果将f(t,x)=F(t-x)就成为了卷积了,这种变化实际上说明f(t,x)是一个线性移不变,就是说变量的差不变化的时候,那么函数的值不变化,实际上说明线性移不变系统的输出可以通过输入和表示系统线性特征的函数卷积得到。



### 图卷积网络(GCN)的工作原理 图卷积网络(Graph Convolutional Network, GCN)是一种专门用于处理图结构数据的神经网络模型。其核心思想是通过扩展传统的卷积操作到不规则的图域上,从而能够有效地提取节点特征并捕捉节点之间的关系。 #### 谱图卷积的基础 谱图卷积基于图信号处理理论,其中的关键组件之一是 **图拉普拉斯矩阵**[^1]。该矩阵描述了图中节点间的连接强度以及整个图的拓扑特性。通过对图拉普拉斯矩阵进行特征分解,可以定义频域上的卷积操作。然而,这种原始方法计算复杂度较高,因此通常采用近似技术来简化实现过程。 一种常见的优化方式是由 Chebyshev 多项式展开得到的一阶线性化形式,这种方法被广泛应用于实际场景中。例如,在论文《Semi-Supervised Classification with Graph Convolutional Networks》中提到的方法实际上是对一阶邻居版本的 ChebNet 的具体实现[^2]。 以下是 GCN 工作流程的核心要点: 1. **输入表示**: 输入是一个图 \( G=(V,E) \),其中 \( V \) 表示节点集合,\( E \) 是边集合;还有一个对应的邻接矩阵 \( A \in R^{n\times n} \) 和节点特征矩阵 \( X \in R^{n\times d} \)。 2. **标准化传播机制**: 使用规范化后的邻接矩阵 \( \tilde{A}=D^{-\frac{1}{2}}(A+I)D^{-\frac{1}{2}} \) 来更新节点特征向量。这里 \( D \) 是度矩阵,而 \( I \) 则代表单位矩阵。 3. **层间传递函数**: 假设当前隐藏层为 \( H^{(l)} \),则下一层可以通过如下公式获得: \[ H^{(l+1)}=\sigma(\tilde{A}H^{(l)}W^{(l)}) \] 其中 \( W^{(l)} \) 是可学习参数权重矩阵,\( \sigma() \) 可以是非线性的激活函数比如 ReLU。 4. **输出预测**: 经过多轮迭代之后,最终获取每个节点对应类别概率分布作为输出结果。 ### 实现教程 下面提供了一个简单的 PyTorch 版本 GCN 示例代码片段: ```python import torch import torch.nn as nn import torch.nn.functional as F class GCNLayer(nn.Module): def __init__(self, input_dim, output_dim): super(GCNLayer, self).__init__() self.linear = nn.Linear(input_dim, output_dim) def forward(self, x, adj_matrix): support = self.linear(x) output = torch.matmul(adj_matrix, support) return output class SimpleGCN(nn.Module): def __init__(self, input_dim, hidden_dim, output_dim): super(SimpleGCN, self).__init__() self.gcn1 = GCNLayer(input_dim, hidden_dim) self.gcn2 = GCNLayer(hidden_dim, output_dim) def forward(self, x, adj_matrix): h = F.relu(self.gcn1(x, adj_matrix)) out = self.gcn2(h, adj_matrix) return F.log_softmax(out, dim=1) ``` 此段代码展示了如何构建两层的基本 GCN 架构,并利用ReLU激活函数促进非线性表达能力。 ### 应用领域 - 社交媒体分析:挖掘社交网络中的社区划分或者影响力最大化等问题; - 推荐系统:增强个性化推荐效果,考虑物品之间关联性和用户偏好模式; - 生物信息学:蛋白质相互作用网路建模、药物分子性质预测等领域都有广泛应用价值。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值