在卷积神经网络(CNN)中为什么可以使用多个较小的卷积核替代一个较大的卷积核,以达到相同的感受野

在卷积神经网络(CNN)中为什么可以使用多个较小的卷积核替代一个较大的卷积核,以达到相同的感受野

flyfish

在卷积神经网络(CNN)中,可以使用多个较小的卷积核替代一个较大的卷积核,以达到相同的感受野。具体来说:

  • 两个3x3的卷积核堆叠可以替代一个5x5的卷积核。这样,每个输出单元都能够感受到一个5x5区域的输入信息。

  • 三个3x3的卷积核堆叠可以替代一个7x7的卷积核。这意味着,通过三层3x3卷积,最终的输出单元可以感受到一个7x7区域的输入信息。

  • 四个3x3的卷积核堆叠可以替代一个9x9的卷积核。通过四层3x3卷积,输出单元能够覆盖一个9x9区域的输入信息。

在这里插入图片描述
在这里插入图片描述

import numpy as np# 输入特征图
input_feature_map = np.array([[1, 2, 3, 0, 1],[4, 5, 6, 1, 2],[7, 8, 9, 2, 3],[1, 2, 3, 0, 1],[4, 5, 6, 1, 2]
])# 卷积核
kernel = np.array([[1, 0, -1],[1, 0, -1],[1, 0, -1]
])# 输出特征图的大小
output_height = input_feature_map.shape[0] - kernel.shape[0] + 1
output_width = input_feature_map.shape[1] - kernel.shape[1] + 1
output_feature_map = np.zeros((output_height, output_width))# 计算总计算量
total_computations = 0# 进行卷积操作
for i in range(output_height):for j in range(output_width):# 提取当前窗口的子矩阵current_window = input_feature_map[i:i+kernel.shape[0], j:j+kernel.shape[1]]# 进行逐元素乘法并求和output_feature_map[i, j] = np.sum(current_window * kernel)# 计算当前窗口的计算量total_computations += np.prod(kernel.shape)  # 3x3 次乘法print("输出特征图:")
print(output_feature_map)
print("总计算量 (乘法次数):", total_computations)

在进行卷积操作时,对于输入特征图大小 5 × 5 5 \times 5 5×5 和卷积核大小 3 × 3 3 \times 3 3×3,输出特征图的大小是 ( 5 − 3 + 1 ) × ( 5 − 3 + 1 ) = 3 × 3 (5 - 3 + 1) \times (5 - 3 + 1) = 3 \times 3 (53+1)×(53+1)=3×3。在每个输出位置,我们需要进行 3 × 3 = 9 3 \times 3 = 9 3×3=9 次乘法计算,总的计算量是 3 × 3 × 9 = 81 3 \times 3 \times 9 = 81 3×3×9=81 次乘法。

1 2 3 0 1       1 2 3      2 3 0      3 0 1
4 5 6 1 2       4 5 6      5 6 1      6 1 2
7 8 9 2 3       7 8 9      8 9 2      9 2 34 5 6 1 2       4 5 6      5 6 1      6 1 2
7 8 9 2 3       7 8 9      8 9 2      9 2 3
1 2 3 0 1       1 2 3      2 3 0      3 0 17 8 9 2 3       7 8 9      8 9 2      9 2 3
1 2 3 0 1       1 2 3      2 3 0      3 0 1
4 5 6 1 2       4 5 6      5 6 1      6 1 2

计算卷积操作的计算量

在计算卷积操作的总计算量时,可以使用以下公式:
总计算量 (乘法次数) = ( H − K + 1 ) × ( W − K + 1 ) × K × K × C i n × C o u t \text{总计算量 (乘法次数)} = (H - K + 1) \times (W - K + 1) \times K \times K \times C_{in} \times C_{out} 总计算量 (乘法次数)=(HK+1)×(WK+1)×K×K×Cin×Cout
其中:

  • H H H W W W 是输入特征图的高度和宽度。

  • K K K 是卷积核的大小(假设为方形,即 K × K K \times K K×K)。

  • C i n C_{in} Cin 是输入通道数。

  • C o u t C_{out} Cout 是输出通道数。

应用公式计算示例

对于一个 5x5 的输入特征图和 3x3 的卷积核,假设输入通道数和输出通道数都为 1:

  1. 输入特征图大小: H = 5 H = 5 H=5, W = 5 W = 5 W=5

  2. 卷积核大小: K = 3 K = 3 K=3

  3. 输入通道数: C i n = 1 C_{in} = 1 Cin=1

  4. 输出通道数: C o u t = 1 C_{out} = 1 Cout=1

将这些值代入公式中:
总计算量 (乘法次数) = ( 5 − 3 + 1 ) × ( 5 − 3 + 1 ) × 3 × 3 × 1 × 1 \text{总计算量 (乘法次数)} = (5 - 3 + 1) \times (5 - 3 + 1) \times 3 \times 3 \times 1 \times 1 总计算量 (乘法次数)=(53+1)×(53+1)×3×3×1×1

计算:
总计算量 (乘法次数) = 3 × 3 × 3 × 3 = 81 \text{总计算量 (乘法次数)} = 3 \times 3 \times 3 \times 3 = 81 总计算量 (乘法次数)=3×3×3×3=81

( H − K + 1 ) × ( W − K + 1 ) (H - K + 1) \times (W - K + 1) (HK+1)×(WK+1) 计算的是输出特征图的大小,这里是 3 × 3 3 \times 3 3×3
每个输出特征图的位置上,进行 K × K × C i n K \times K \times C_{in} K×K×Cin 次乘法计算,这里是 3 × 3 × 1 = 9 3 \times 3 \times 1 = 9 3×3×1=9 次乘法。
计算量是输出特征图的元素数量乘以每个元素的计算量,即 9 × 9 = 81 9 \times 9 = 81 9×9=81 次乘法。

例子

如果输入特征图是 28 × 28 28 \times 28 28×28,计算两个 3x3 卷积核堆叠和一个 5x5 卷积核的计算量,并比较它们。

情况 1:两个 3x3 卷积核堆叠

  1. 第一个 3x3 卷积核
  • 输入特征图大小: 28 × 28 28 \times 28 28×28

  • 输出特征图大小: ( 28 − 3 + 1 ) × ( 28 − 3 + 1 ) = 26 × 26 (28 - 3 + 1) \times (28 - 3 + 1) = 26 \times 26 (283+1)×(283+1)=26×26

  • 计算量: 26 × 26 × 3 × 3 × C i n × C m i d 26 \times 26 \times 3 \times 3 \times C_{in} \times C_{mid} 26×26×3×3×Cin×Cmid

  1. 第二个 3x3 卷积核
  • 输入特征图大小: 26 × 26 26 \times 26 26×26

  • 输出特征图大小: ( 26 − 3 + 1 ) × ( 26 − 3 + 1 ) = 24 × 24 (26 - 3 + 1) \times (26 - 3 + 1) = 24 \times 24 (263+1)×(263+1)=24×24

  • 计算量: 24 × 24 × 3 × 3 × C m i d × C o u t 24 \times 24 \times 3 \times 3 \times C_{mid} \times C_{out} 24×24×3×3×Cmid×Cout
    计算量 3 × 3 = 26 × 26 × 9 × C i n × C m i d + 24 × 24 × 9 × C m i d × C o u t \text{计算量}_{3\times3} = 26 \times 26 \times 9 \times C_{in} \times C_{mid} + 24 \times 24 \times 9 \times C_{mid} \times C_{out} 计算量3×3=26×26×9×Cin×Cmid+24×24×9×Cmid×Cout

情况 2:一个 5x5 卷积核

  • 输入特征图大小: 28 × 28 28 \times 28 28×28

  • 输出特征图大小: ( 28 − 5 + 1 ) × ( 28 − 5 + 1 ) = 24 × 24 (28 - 5 + 1) \times (28 - 5 + 1) = 24 \times 24 (285+1)×(285+1)=24×24

  • 计算量: 24 × 24 × 5 × 5 × C i n × C o u t 24 \times 24 \times 5 \times 5 \times C_{in} \times C_{out} 24×24×5×5×Cin×Cout

示例计算

假设输入和输出通道数都为 1:

  1. 第一个 3x3 卷积核
  • 输出特征图大小: 26 × 26 26 \times 26 26×26

  • 计算量: 26 × 26 × 9 × 1 × 1 = 6084 26 \times 26 \times 9 \times 1 \times 1 = 6084 26×26×9×1×1=6084

  1. 第二个 3x3 卷积核
  • 输出特征图大小: 24 × 24 24 \times 24 24×24

  • 计算量: 24 × 24 × 9 × 1 × 1 = 5184 24 \times 24 \times 9 \times 1 \times 1 = 5184 24×24×9×1×1=5184
    总计算量:
    计算量 3 x 3 = 6084 + 5184 = 11268 \text{计算量}_{3x3} = 6084 + 5184 = 11268 计算量3x3=6084+5184=11268

  1. 一个 5x5 卷积核
  • 输出特征图大小: 24 × 24 24 \times 24 24×24

  • 计算量: 24 × 24 × 25 × 1 × 1 = 14400 24 \times 24 \times 25 \times 1 \times 1 = 14400 24×24×25×1×1=14400

def compute_3x3_stack_computation(H, W, C_in, C_out):# 第一个 3x3 卷积核output_height1 = H - 3 + 1output_width1 = W - 3 + 1computation_3x3_1 = output_height1 * output_width1 * 3 * 3 * C_in * C_out# 第二个 3x3 卷积核output_height2 = output_height1 - 3 + 1output_width2 = output_width1 - 3 + 1computation_3x3_2 = output_height2 * output_width2 * 3 * 3 * C_out * C_outtotal_computation_3x3 = computation_3x3_1 + computation_3x3_2return total_computation_3x3def compute_5x5_computation(H, W, C_in, C_out):# 一个 5x5 卷积核output_height = H - 5 + 1output_width = W - 5 + 1computation_5x5 = output_height * output_width * 5 * 5 * C_in * C_outreturn computation_5x5# 示例参数
H, W, C_in, C_out = 28, 28, 1, 1# 计算
computation_3x3 = compute_3x3_stack_computation(H, W, C_in, C_out)
computation_5x5 = compute_5x5_computation(H, W, C_in, C_out)# 减少的计算量百分比
reduction_percentage = (1 - computation_3x3 / computation_5x5) * 100print("两个 3x3 卷积核堆叠的计算量:", computation_3x3)
print("一个 5x5 卷积核的计算量:", computation_5x5)
print("减少的计算量百分比:", reduction_percentage)

两个 3x3 卷积核堆叠的计算量: 11268
一个 5x5 卷积核的计算量: 14400
减少的计算量百分比: 21.750000000000004
参考论文《Rethinking the Inception Architecture for Computer Vision》

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

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

相关文章

交叉编译tslib库和上机测试

目录 一、tslib 介绍 二、tslib 框架分析 三、交叉编译、测试 tslib 1.安装工具链 tslib (1)设置交叉编译工具链 (2)进入tslib目录 (3)安装工具链 (4)确定工具链中头文件、库…

千亿级市场迎来新增量:中老年K歌需求高涨,解读线上+线下创新方向

干货抢先看 1. 我国KTV产业一度达到千亿规模,近年来随着线下娱乐方式多样化,KTV逐渐被年轻用户抛弃,中老年成为行业关键增量。 2. 数据显示,全国量贩式KTV中,60-70岁年龄段用户数同比增长29.6%,订单量同比…

【分布式系统】监控平台Zabbix介绍与部署(命令+截图版)

目录 一.Zabbix概述 1.为什么要做监控 2.zabbix 是什么 3.zabbix 监控原理 4.zabbix 6.0 新特性 5.zabbix 6.0 功能组件 Zabbix Server 数据库 Web 界面 Zabbix Agent Zabbix Proxy Java Gateway 补充 二.部署安装Zabbix 6.0 1.初始化环境 2.安装nginx跟php&am…

计算机网络网络层复习题2

一. 单选题(共22题,100分) 1. (单选题)如果 IPv4 数据报太大,会在传输中被分片,对分片后的数据报进行重组的是( )。 A. 中间路由器B. 核心路由器C. 下一跳路由器D. 目的主机 我的答案: D:目的…

图文控件TextImageView

图片文字组合控件,可以灵活的控制图片大小 class TextImageView : AppCompatTextView {private var mStartWidth: Int 0private var mStartHeight: Int 0private var mTopWidth: Int 0private var mTopHeight: Int 0private var mEndWidth: Int 0private var …

不懂PyQt5垂直布局?只需3分钟即可学会

PyQt5中实现垂直布局,主要使用QVBoxLayout类。该布局管理器将子控件垂直排列,并可以根据需要自动调整大小。使用QVBoxLayout可以方便地构建从上到下排列的界面元素。 import sys from PyQt5.QtWidgets import QApplication, QVBoxLayout, QWidget, QPus…

一个例子理解傅里叶变换的计算过程

假设我们有一个简单的信号,由两个不同频率的正弦波组成,我们希望通过傅里叶变换来分析其频谱。 示例信号 假设我们有一个信号 : 这个信号由两个频率成分组成:一个50 Hz的正弦波和一个120 Hz的正弦波,后者的振幅是前者…

昇思MindSpore学习入门-静态图像加速

使用静态图加速 背景介绍 AI编译框架分为两种运行模式,分别是动态图模式以及静态图模式。MindSpore默认情况下是以动态图模式运行,但也支持手工切换为静态图模式。两种运行模式的详细介绍如下: 动态图模式 动态图的特点是计算图的构建和计…

catia数控加工仿真铣平面粗加工

1,零件建模,毛坯建模 2 在毛坯上建立坐标系 3 添加资料刀具 4,双击对相关加工信息做设置 5 Roughing 加工设置 高亮红色区域是必选的,其他可以默认 6 完成加工仿真 7 加工余量

Upload-Labs靶场闯关

文章目录 Pass-01Pass-02Pass-03Pass-04Pass-05Pass-06Pass-07Pass-08Pass-09Pass-10Pass-11Pass-12Pass-13Pass-14Pass-15Pass-16Pass-17Pass-18Pass-19Pass-20 以下是文件上传绕过的各种思路,不过是鄙人做题记下来的一些思路笔记罢了。 GitHub靶场环境下载&#x…

如果只能选一款老挝语翻译工具,那么只保留《老挝语翻译通》App!一款支持老挝文OCR识别提取文字的翻译神器!

准备去探索老挝这个国家,语言不同怎么办?推荐使用《老挝语翻译通》App,一款专为老挝语学习者和旅行者设计的翻译和学习工具,让你轻松掌握老挝语,无需打字对着说话就能翻译的老挝语翻译通,一定能得到你的认可…

STM32第八课:Su-03t语音识别模块

文章目录 需求一、SU03T语音识别模块二、模块配置流程1.固件烧录2.配置串口和传输引脚3.中断函数4.double类型转换5 数据发送6.接收处理 三、该模块完整代码总结 需求 基于上次完成空气质量传感器,利用SU03T语音识别模块,实现空气质量的语音问答播报。 …

从零开始:如何设计一个现代化聊天系统

写在前面: 此博客内容已经同步到我的博客网站,如需要获得更优的阅读体验请前往https://mainjaylai.github.io/Blog/blog/system/chat-system 在当今数字化时代,聊天系统已成为我们日常生活和工作中不可或缺的一部分。从个人交流到团队协作,从客户服务到社交网络,聊天应用…

HY Lisp 读取宏(reader macro)学习

在学习HY lisp语言的时候HY编程快速入门实践课第三章 HY宏入门-CSDN博客,学习到了读取宏(reader macro),尝试将其概念弄明白。 首先,读取宏是Lisp语言中都有的一种概念,所以可以通过任意一种Lisp语言的文档…

免费可视化工具如何提升智慧物流管理效率

在现代智慧物流中,免费可视化工具正扮演着越来越重要的角色。这些工具通过数据的可视化展示,使物流管理更加高效、透明和智能化。免费可视化工具可以将复杂的物流数据转换为直观的图表和图形,帮助管理者实时监控和分析物流运作情况&#xff0…

九浅一深Jemalloc5.3.0 -- ⑥浅*boot

目前市面上有不少分析Jemalloc老版本的博文,但最新版本5.3.0却少之又少。而且5.3.0的架构与5之前的版本有较大不同,本着“与时俱进”、“由浅入深”的宗旨,我将逐步分析最新release版本Jemalloc5.3.0的实现。 另外,单讲实现代码是…

第二证券:可转债基础知识?想玩可转债一定要搞懂的交易规则!

可转债,全称是“可转化公司债券”,是上市公司为了融资,向社会公众所发行的一种债券,具有股票和债券的双重特点,投资者可以选择按照发行时约定的价格将债券转化成公司一般股票,也可作为债券持有到期后收取本…

Load Tensor to local Nvidia GPU

0. 安装Nvidia驱动 ubuntu24.04的安装非常简单,在安装界面,选择为"图形化和其他硬件安装驱动",重启后即有原版Nvidia驱动(如图Nvidia X xxx) 1.确定电脑上是否有NvidiaGPU且安装好Nvidia驱动 import torch print(torch.version…

机器学习 C++ 的opencv实现SVM图像二分类的训练 (二)【附源码】

本节讲机器学习 C 的opencv实现SVM图像二分类的训练&#xff0c;下节讲测试&#xff1a; 数据集合data内容如下&#xff1a; 下载地址为&#xff1a;https://download.csdn.net/download/hgaohr1021/89506900 #include <stdio.h> #include <time.h> #include…

【Python机器学习系列】建立决策树模型预测小麦品种(案例+源码)

这是我的第314篇原创文章。 一、引言 对于表格数据&#xff0c;一套完整的机器学习建模流程如下&#xff1a; 针对不同的数据集&#xff0c;有些步骤不适用&#xff0c;其中橘红色框为必要步骤&#xff0c;欢迎大家关注翻看我之前的一些相关文章。前面我介绍了机器学习模型的二…