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

news2024/12/29 11:22:56

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]])

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2228924.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java:入门基础(1)

练习一:文字版格斗游戏 需求: ​ 格斗游戏,每个游戏角色的姓名,血量,都不相同,在选定人物的时候(new对象的时候),这些信息就应该被确定下来。 举例: ​ 程序运行之后…

计算机毕业设计 | springboot+vue电影院会员管理系统 影院后台管理(附源码)

1,项目背景 随着互联网时代的到来,同时计算机网络技术高速发展,网络管理运用也变得越来越广泛。因此,建立一个B/S结构的电影院会员管理系统;电影院会员管理系统的管理工作系统化、规范化,也会提高影院形象…

TypeScript(中)+算法(二)

文章目录 算法排序冒泡排序选择排序 TS类型声明类型推断类型总览js中的数据类型ts中的数据类型原始类型和包装对象原始类型包装对象自动装箱 常用类型与语法anyunknownnevervoidvoid 与 undefined总结 算法 排序 有十种排序算法,分别是:冒泡排序&#…

算法定制LiteAIServer视频智能分析软件的过亮、过暗及抖动检测应用场景

在现代社会中,视频监控系统扮演着举足轻重的角色,其视频质量直接关乎监控系统的可靠性与有效性。算法定制LiteAIServer通过引入抖动检测和过亮过暗检测功能,为视频监控系统的稳定性和用户体验带来了显著提升。 以下是对这两种功能的技术实现、…

【隐私计算篇】全同态加密应用场景案例(隐私云计算中的大模型推理、生物识别等)

1.题外话 最近因为奖项答辩,一直在忙材料准备,过程非常耗费时间和精力,很难有时间来分享。不过这段时间虽然很忙碌,但这期间有很多新的收获,特别是通过与领域内专家的深入交流和评审过程,对密码学和隐私计算…

elasticsearch 8.x 插件安装(三)之拼音插件

elasticsearch 8.x 插件安装(三)之拼音插件 elasticsearch插件安装合集 elasticsearch插件安装(一)之ik分词器安装(含MySQL更新) elasticsearch 8.x插件(二)之同义词安装如何解决…

mac-ubuntu虚拟机(扩容-共享-vmtools)

一、磁盘扩容 使用GParted工具对Linux磁盘空间进行扩展 https://blog.csdn.net/Time_Waxk/article/details/105675468 经过上面的方式后还不够,需要再进行下面的操作 lvextend 用于扩展逻辑卷的大小,-l 选项允许指定大小。resize2fs 用于调整文件系统的…

2024 年 11 个最佳开源网络爬虫和抓取工具

用于网络爬行的免费软件库、软件包和 SDK?或者它是您需要的网络抓取工具吗? 嘿,我们是 Apify 。您可以在 Apify 平台上构建、部署、共享和监控您的抓取工具和爬虫。 来看看我们吧。 如果您厌倦了专有网络抓取工具的限制和成本,或者厌倦了被单一供应商锁定,开源网络爬虫和…

Centos安装ZooKeeper教程(单机版)

本章教程介绍,如何在Centos7中,安装ZooKeeper 3.9.3版本。 一、什么是ZooKeeper ? Apache ZooKeeper 是一个分布式协调服务,用于大型分布式系统中的管理和协调。它为分布式应用提供了一个高性能的通信框架,简化了开发人员在构建复杂分布式系统的任务。ZooKeeper 能够解决一…

检索引擎Elasticsearch

一.为什么要用Elasticsearch 由于我们在运行我们的项目的时候通常都是将数据存到mysql或者sql serve等数据库中,在进行数据搜索时使用sql 语句 like进行模糊匹配查询,其一:虽然可以查到数据,但是它模糊匹配查询速度较慢&#xff0…

CentOS9 Stream 支持输入中文

CentOS9 Stream 支持输入中文 方法一:确保 gnome-control-center 和相关组件已更新方法二:手动添加输入法源配置方法三:配置 .xinputrc 文件方法四:检查语言包 进入centos9 stream后,点击右上角电源键,点击…

基于PHP的http字段查询与注册(V1)(持续迭代)

目录 版本说明: 实现环境(WAMP): 数据库链接 查询页面 php处理逻辑 字段添加 版本说明: 该查询功能以查询http首部字段为目的实现的字段属性、字段内容的查询,以及对新字段信息的数据注册。 v1实现…

无人机之集群控制方法篇

无人机的集群控制方法涉及多个技术和策略,以确保多架无人机能够协同、高效地执行任务。以下是一些主要的无人机集群控制方法: 一、编队控制方法 领航-跟随法(Leader-Follower) 通过设定一架无人机作为领航者(长机&am…

jenkins搭建及流水线配置

1.安装docker curl https://mirrors.aliyun.com/repo/Centos-7.repo >> CentOS-Base-Aliyun.repomv CentOS-Base-Aliyun.repo /etc/yum.repos.d/yum -y install yum-utils device-mapper-persistent-data lvm2yum-config-manager --add-repo http://mirrors.aliyun.com/…

Python+Playwright(Nuitka、Pyinstaller打包)

安装驱动 playwright install # 这个安装所有默认的浏览器 playwright install chromium # 一般只装这一个浏览器就够了,要是装另外两个浏览器,后面的参数名可以修改查看各个驱动的位置 playwright install --dry-run创建打包目录 在运行的包里面…

一篇文章理解CSS垂直布局方法

方法1&#xff1a;align-content: center 在 2024 年的 CSS 原生属性中允许使用 1 个 CSS 属性 align-content: center进行垂直居中。 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewpo…

《鸿蒙生态:机遇与挑战并行,创新引领未来》

《鸿蒙生态&#xff1a;机遇与挑战并行&#xff0c;创新引领未来》 一、鸿蒙生态崛起&#xff1a;机遇涌现&#xff08;一&#xff09;技术创新引领潮流&#xff08;二&#xff09;市场潜力巨大 二、抓住机遇的策略&#xff08;一&#xff09;开发者的黄金时代&#xff08;二&a…

Fakelocation 步道乐跑(Root真机篇)

前言:需要 Fakelocation&#xff0c;真机Root,步道乐跑&#xff0c;Dia&#xff0c;MT管理器系统需求 Fakelocation | MT管理器 | Dia | 环境模块 任务一 真机Root&#xff08;德尔塔&#xff0c;过momo&#xff0c;刷环境模块&#xff09; 任务二 前往Dia查看包名&#xff08…

docker离线安装达梦数据库

文章目录 下载达梦数据库docker镜像上传DM8镜像文件将DM8镜像导入到本地docker镜像仓库中查看本地docker镜像仓库是否存在DM8镜像带参数启动DM8docker启动DM8默认用户名/密码 下载达梦数据库docker镜像 达梦数据库官网 https://www.dameng.com/ 点击下载中心&#xff0c;选择D…

SD教程 ControlNet之OpenPose

ControlNet 是神经网络结构&#xff0c;用于控制预训练的大型扩散模型&#xff0c;以支持额外的输入条件。ControlNet 以端到端的方式学习任务特定的条件&#xff0c;即使训练数据集很小&#xff08;< 50k&#xff09;&#xff0c;学习也是稳健的。此外&#xff0c;训练一个…