卷积核为1的一维卷积,等价于全连接,个人理解

文章探讨了在pointNet的语义分割代码中,为何使用一维卷积核为1的操作来替代论文中提到的MLP。作者发现,尽管形式不同,但这种卷积实际上对每个点执行了类似全连接的操作,即每个点的1088个特征都与卷积核进行了卷积,相当于MLP的全连接层。文章总结了这种卷积方式如何实现对大量点的全连接处理。

最近在看pointNet语义分割的代码,其中有一处令我很困惑,明明论文中使用的是MLP,但是为什么代码中使用的却是卷积核为1的一维卷积呢?难道二者是等价的吗?
在这里插入图片描述
在这里插入图片描述

这个问题困扰了我好久,网上也没有搜到类似的答案,后来自己才想到的,现总结如下:

以在这里插入图片描述
这个语句为例子,假设输入的点云数据的tensor是n(batch)×1088(通道,也叫特征)×4096(点云个数),那么在卷积核为1的卷积过程中发生了什么呢?我自己画了张图,对于每一个卷积核,卷积后都生成了1×4096的图层,一共512个图层,合在一起就是512×4096
在这里插入图片描述
这么看是没有MLP的,但是对于单个的点来说,每个点的1088个特征都和卷积核做了卷积操作,所以这对于单个点来说,其实是相当于MLP的全连接的。
在这里插入图片描述
所以这里是相当于使用卷积核为1的一维卷积操作,同时对n*4096个点做全连接操作。
个人理解,仅供参考。

--------------------------------------------------------------------------------------
3.1号补充:为什么不问问神奇的Chatgpt呢?
在这里插入图片描述

1×1卷积可以用于替代全连接层,其核心原理在于将全连接层的权重矩阵转化为1×1卷积核的形式进行操作。在传统全连接层中,每个神经元与上一层的所有神经节点相连,并通过线性加权和激活函数得到输出。而1×1卷积则可以通过调整通道数来实现类似的功能,同时保留空间维度的信息。 ### 计算方法 假设输入特征图的尺寸为 $ H \times W \times C_{in} $,其中 $ H $ 和 $ W $ 分别表示高度和宽度,$ C_{in} $ 表示输入通道数;输出特征图的通道数为 $ C_{out} $,即希望得到的神经元数量。 使用1×1卷积时,卷积核大小为 $ 1 \times 1 \times C_{in} \times C_{out} $,即每个输出通道对应一个 $ 1 \times 1 \times C_{in} $ 的卷积核。在计算过程中,每个输出位置的值是该位置在所有输入通道上的加权和,权重由对应的1×1卷积核参数决定。 具体步骤如下: - 输入张量形状:$ H \times W \times C_{in} $ - 卷积核形状:$ 1 \times 1 \times C_{in} \times C_{out} $ - 输出张量形状:$ H \times W \times C_{out} $ 在实际计算中,1×1卷积会遍历输入图像的每一个空间位置(即每一个 $ H \times W $ 点),并对每个点执行如下操作: $$ \text{output}[i,j,k] = \sum_{c=0}^{C_{in}-1} \text{input}[i,j,c] \cdot \text{weight}[0,0,c,k] + \text{bias}[k] $$ 其中 $ i, j $ 是空间坐标,$ k $ 是输出通道索引,$ c $ 是输入通道索引,`weight` 是卷积核参数,`bias` 是偏置项。 这种操作等价于将全连接层的权重矩阵拆分到每个空间位置,并通过卷积操作实现全局连接的效果。 ### 原理分析 1. **全连接层的局限性** 全连接层要求输入是一维向量,因此需要对多维数据进行 Flatten 操作。这种方式会导致空间信息丢失,并且参数数量庞大,容易引发过拟合问题[^1]。 2. **1×1卷积的优势** - **保持空间结构**:1×1卷积不需要 Flatten 操作,能够保留输入的空间维度,从而维持局部感受野信息。 - **减少参数数量**:相比全连接层,1×1卷积的参数数量显著减少。例如,对于 $ C_{in} $ 个输入通道和 $ C_{out} $ 个输出通道,1×1卷积的参数数量为 $ C_{in} \times C_{out} $,而全连接层的参数数量为 $ H \times W \times C_{in} \times C_{out} $。 - **灵活性**:1×1卷积可以在不同层级之间灵活调整通道数,适用于构建更复杂的网络模块(如 Inception 模块)。 3. **应用场景** 1×1卷积广泛应用于现代卷积神经网络中,尤其是在 GoogLeNet、ResNet 等模型中,用于控制通道数量并提升模型表达能力。此外,它还常用于将全连接层转换为卷积层,以支持任意尺寸输入的处理[^2]。 ### 示例代码 以下是一个简单的 PyTorch 实现,展示如何用1×1卷积替代全连接层: ```python import torch import torch.nn as nn # 定义1x1卷积层 conv1x1 = nn.Conv2d(in_channels=64, out_channels=10, kernel_size=1) # 模拟输入 (batch_size=1, channels=64, height=7, width=7) input_tensor = torch.randn(1, 64, 7, 7) # 执行1x1卷积 output_tensor = conv1x1(input_tensor) print(output_tensor.shape) # 输出: torch.Size([1, 10, 7, 7]) ``` 在这个例子中,1×1卷积将输入通道从64减少到10,相当于实现了全连接层的功能,但保留了空间维度。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值