首页 > 其他分享 >深度学习:卷积神经网络中的im2col

深度学习:卷积神经网络中的im2col

时间:2024-11-03 20:18:44浏览次数:6  
标签:10 26 27 22 im2col 卷积 神经网络 输入

im2col 是一种在卷积神经网络(CNN)中常用的技术,用于将输入图像数据转换为适合卷积操作的矩阵形式。通过这种转换,卷积操作可以被高效地实现为矩阵乘法,从而加速计算。
在传统的卷积操作中,卷积核(滤波器)在输入图像上滑动,逐个计算每个位置的卷积结果。这种操作在计算上非常耗时,尤其是在处理大图像和大卷积核时。im2col 技术通过将输入图像数据重新排列成矩阵形式,使得卷积操作可以利用高效的矩阵乘法来实现

通过一个具体的例子来理解:

  • 输入数据为:

I = np.array([
[
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
[13, 14, 15, 16]
],
[
[17, 18, 19, 20],
[21, 22, 23, 24],
[25, 26, 27, 28],
[29, 30, 31, 32]
],
[
[33, 34, 35, 36],
[37, 38, 39, 40],
[41, 42, 43, 44],
[45, 46, 47, 48]
] ]

  • 卷积核为:

K = np.array([
[
[1, 0, -1],
[2, 0, -2],
[1, 0, -1]
],
[
[1, 0, -1],
[2, 0, -2],
[1, 0, -1]
],
[
[1, 0, -1],
[2, 0, -2],
[1, 0, -1]
] ])

阅读书籍说是img2col会将输入数据中应用滤波器的区域(3维方块)横向展开为1列。
在这里插入图片描述在本例中输入数据中应用滤波器的区域为:

[[[1, 2, 3], [5, 6, 7], [9, 10, 11]], [[17, 18, 19], [21, 22, 23],
[25, 26, 27]], [[33, 34, 35], [37, 38, 39], [41, 42, 43]]]

[[[2, 3, 4], [6, 7, 8], [10, 11, 12]], [[18, 19, 20], [22, 23, 24],
[26, 27, 28]], [[34, 35, 36], [38, 39, 40], [42, 43, 44]]]

[[[5, 6, 7], [9, 10, 11], [13, 14, 15]], [[21, 22, 23], [25, 26, 27],
[29, 30, 31]], [[37, 38, 39], [41, 42, 43], [45, 46, 47]]]

[[[6, 7, 8], [10, 11, 12], [14, 15, 16]], [[22, 23, 24], [26, 27,
28], [30, 31, 32]], [[38, 39, 40], [42, 43, 44], [46, 47, 48]]]

按我个人理解是img2col会将输入数据转换为 4*27 的矩阵即
第一行为 1,2,3,5,6,7,9,10,11,17,18,19,21,22,23,25,26,27,33,34,35,37,38,39,41,42,43 即第一次卷积运算所涉及到的输入数据
第二行为 2,3,4,6,7,8,10,11,12,18,19,20,22,23,24,26,27,28,34,35,36,38,39,40,42,43,44 即第二次卷积运算所涉及到的输入数据
第三行,第四行类似就不列举出来了

x2 = np.random.rand(1, 3, 4, 4)
col2 = im2col(x2, 3, 3, stride=1, pad=0)
print(col2.shape)

结果为:

(4, 27)

若是批大小为10,即保存10倍的数据

x2 = np.random.rand(10, 3, 4, 4)
col2 = im2col(x2, 3, 3, stride=1, pad=0)
print(col2.shape)

结果为:

(40, 27)

为什么我会认为是那么展开的呢?
是因为后续书中给出滤波器(卷积核)的展开代码为col_K = K.reshape(FN,-1).T (FN为滤波器的数量,通过在reshape时指定为-1,reshape函数会自动计算-1维度上的元素个数,以使多维数组的元素个数前后一致。比如,(10, 3, 5, 5)形状的数组的元素个数共有750个,指定reshape(10,-1)后,就会转换成(10, 75)形状的数组)
本例对K进行运行:

col_K = K.reshape(1,-1).T
col_K

可得:

array([[ 1],
[ 0],
[-1],
[ 2],
[ 0],
[-2],
[ 1],
[ 0],
[-1],
[ 1],
[ 0],
[-1],
[ 2],
[ 0],
[-2],
[ 1],
[ 0],
[-1],
[ 1],
[ 0],
[-1],
[ 2],
[ 0],
[-2],
[ 1],
[ 0],
[-1]])

​而im2col作用是将输入图像数据转换为适合卷积操作的矩阵形式,故我认为是按上述转换方法展开输入数据(和不展开运算结果一样),这样之后便可将展开后的输入数据与展开后的卷积核进行矩阵乘法(后续还需要将输出大小转换为合适的形状),使得卷积操作可以被高效地实现为矩阵乘法。

标签:10,26,27,22,im2col,卷积,神经网络,输入
From: https://blog.csdn.net/m0_49786943/article/details/143402288

相关文章

  • 【论文复现】神经网络的公式推导与代码实现
    ......
  • 利用前馈神经网络(FNN)进行气温预测任务
    一、前馈神经网络前馈神经网络(FeedforwardNeuralNetworks,FNN)是人工神经网络中的一种,它的信息流动是单向的,从输入层到隐藏层,再到输入层,没有反向的连接。其中,隐藏层可以有多个,用于处理输入层的数据,且每一个隐藏层通常配合一个非线性的激活函数来进行训练。前馈神经网络的架构......
  • 理解卷积神经网络
    人工智能 (AI)世界正在快速发展,AI越来越多地支持以前无法实现或难以实现的应用。什么是卷积神经网络?神经网络是一种系统,或者说是神经元的结构,它使人工智能能够更好地理解数据,从而解决复杂的问题。虽然网络类型多种多样,但本系列文章将仅关注卷积神经网络(CNN)。CNN的主要应......
  • 深入剖析卷积神经网络中的卷积核
    深入剖析卷积神经网络中的卷积核前言一、卷积核的数学基础代码示例:简单的2D卷积操作二、卷积核的类型与作用1.边缘检测卷积核代码示例:Sobel算子2.模糊与平滑卷积核代码示例:高斯滤波器三、卷积核的实际应用四、卷积核的初始化与学习五、卷积核的挑战与优化六、卷积......
  • 神经网络中间层输出
    测试中间层输出importtorchimportnumpyasnpfromPILimportImagefromtorchvisionimporttransforms,modelsimportmatplotlib.cmfromtorchinfoimportsummaryimportcopyimportcv2importmatplotlib.pyplotaspltdevice='cuda'iftorch.cuda.is_......
  • 常用的神经网络实现
    VGG16fromtorchimportnnclassVGG(nn.Module):"""一共6个版本,最常用VGG16VGG采用五组卷积,三个全连接,最后用Softmax分类VGG显著特点:每次经过池化层maxpool后特征图尺寸减小一倍,,通道数增加一倍(最后一个池化层除外)"""def__init__(self,num_class......
  • 神经网络工具nn
    实现神经网络torch将张量转换为torch.cuda.TensorFloat并在GPU上进行计算torch.autograd构建计算图并自动获取梯度torch.nn具有共享层和损失函数的神经网络库torch.optim通用优化算法神经网络基本结构网络层:神经网络的基本模型网络模型:层构成的网络损失函数:参数学习的......
  • ResNet 残差神经网络
    文章目录一、什么是ResNet?二、残差结构(ResidualStructure)三、BatchNormalization(BN----批归一化)一、什么是ResNet?ResNet网络是在2015年由微软实验室中的何凯明等几位大神提出,斩获当年ImageNet竞赛中分类任务第一名,目标检测第一名。获得COCO数据集中目标检测第......
  • 适用FPGA的小型神经网络:加速边缘智能的新篇章
    在人工智能(AI)技术日新月异的今天,神经网络作为其核心驱动力,正逐步渗透到各个行业与领域。然而,传统的神经网络模型往往受限于计算资源和功耗,难以在边缘设备上实现高效运行。现场可编程门阵列(FPGA)作为一种高性能、低功耗的硬件加速器,为小型神经网络的部署提供了理想的平台。本文将深......
  • 关于图神经网络框架Pytorch_geometric实战应用,并给出详细代码实现过程
    大家好,我是微学AI,今天给大家介绍一下关于图神经网络框架Pytorch_geometric实战应用,并给出详细代码实现过程,本文展示了如何利用该框架进行图神经网络的搭建与训练。文章涵盖了从数据预处理、模型构建、参数调优到模型评估等各个环节,旨在帮助读者深入理解并掌握Pytorch_geome......