Group Convolution(分组卷积)

分组卷积的优点:

  1. 减少参数数量

    在分组卷积中,每个分组只与一部分输入通道进行卷积运算,这意味着模型的参数数量会减少。例如,如果一个卷积层有8个输入通道和8个输出通道,且不使用分组,那么将有64个权重参数(8个输入通道 * 8个输出通道)。如果使用2组分组卷积,每个分组将只有4个输入通道和4个输出通道,因此每组只有16个权重参数,总共32个参数,减少了一半。
  2. 减少计算量

    由于参数数量的减少,分组卷积在前向传播和反向传播过程中的计算量也会减少。这可以加快训练和推理的速度,尤其是在资源受限的情况下。
  3. 提高并行度

    分组卷积可以提高计算的并行度,因为每个分组可以独立地进行计算。这使得分组卷积在多核处理器和GPU上更加高效。
  4. 节省内存

    减少参数和计算量也意味着节省了内存使用,这对于部署在内存受限的设备上的模型尤其重要。

简单来说运用分组卷积,可以减少参数数量由此可以提高训练速度。

实例:分组卷积计算需要将in_channel和out_channel除以groups

import torch
import torch.nn as nn# 创建一个分组卷积层 conv1
# in_channels=8 表示输入通道数为8
# out_channels=6 表示输出通道数为6(卷积核个数)
# kernel_size=1 表示卷积核的大小为1x1
# groups=2 表示将输入通道分成2组进行分组卷积
conv1 = nn.Conv2d(in_channels=8, out_channels=6, kernel_size=1, groups=2)# 创建一个非分组卷积层 conv2
# in_channels=8 表示输入通道数为8
# out_channels=6 表示输出通道数为6
# kernel_size=1 表示卷积核的大小为1x1
conv2 = nn.Conv2d(in_channels=8, out_channels=6, kernel_size=1)# 创建一个假的输入数据,形状为(batch_size, channels, height, width)
# 这里假设batch_size=1, channels=8, height=1, width=1
input = torch.randn(1, 8, 1, 1)# 执行分组卷积操作
output1 = conv1(input)# 执行非分组卷积操作
output2 = conv2(input)# 打印两个输出的形状
print(output1.shape)
print(output2.shape)

输出:

torch.Size([1, 16, 1, 1])
torch.Size([1, 16, 1, 1])

# 对比内部计算和参数数量
# 对于conv1(分组卷积):
# - 参数数量:由于分组卷积将输入通道分成2组,每组4个输入通道,每组有6个输出通道,
#   因此每组的参数数量为 4(输入通道)* 6(输出通道)* 1^2(卷积核大小)= 24。
#   总参数数量为 24 * 2(组)= 48。
# - 计算量:每个输入通道只与同一组内的卷积核进行计算,因此计算量减少。# 对于conv2(非分组卷积):
# - 参数数量:非分组卷积的参数数量为 8(输入通道)* 6(输出通道)* 1^2(卷积核大小)= #48。
# - 计算量:每个输入通道与所有输出通道的卷积核进行计算,因此计算量较大。
#虽然conv1和conv2的输出形状相同,但由于分组卷积减少了参数数量和计算量,它可以提高模型的训练速度和效率.

 

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

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

相关文章

leetcode 二叉树的最大深度

104. 二叉树的最大深度 已解答 简单 相关标签 相关企业 给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:3…

VMware ubuntu创建共享文件夹与Windows互传文件

1.如图1所示,点击虚拟机,点击设置; 图1 2.如图2所示,点击选项,点击共享文件夹,如图3所示,点击总是启用,点击添加; 图2 图3 3.如图4所示,出现命名共享文件夹…

matlab 实现混沌麻雀搜索算法的光伏MPPT控制仿真

1、内容简介 略 103-可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略

Unity3D 截图

使用 Unity3D 自带的截图接口,制作截图工具。 截图 有时候我们想对 Unity 的窗口进行截图,如果直接使用一些截图工具,很难截取到一张完整分辨率的图片(例如,我们想要截取一张 1920 * 1080 的图片)。 其实…

STM32F10x 定时器

使用定时器实现:B5 E5的开关 添加相关的.h路径文件 添加相关的.c配置文件 led.h文件 用于声明LED函数 #ifndef __LED_H //没有定义__LED_H #define __LED_H //就定义__LED_H #define LED1_ON GPIO_ResetBits(GPIOB,GPIO_Pin_5) #defi…

PMP好考吗,有多大的价值?

非常好考!PMP目前大陆地区的笔试是只有选择题的,运气好的话 蒙一个都能对,所以PMP的通过率高,这也是很多人考了吐槽PMP没用,是“水证”,但是每年考PMP 的人不减反增,大家可以想一下,…

css:项目

这是一个完整的网站制作的流程 美工会先制作一个原型图: 原型图写的不详细,就是体现一个网页大致的布局 然后美工再做一个psd样例图片 然后再交给程序员 项目 模块化开发:把代码的不同的样式封装起来,需要用到相同样式的标签就…

VsCode 插件推荐(个人常用)

VsCode 插件推荐(个人常用)

黑马程序员Java项目实战《苍穹外卖》Day01

苍穹外卖-day01 课程内容 软件开发整体介绍苍穹外卖项目介绍开发环境搭建导入接口文档Swagger 项目整体效果展示: ​ 管理端-外卖商家使用 ​ 用户端-点餐用户使用 当我们完成该项目的学习,可以培养以下能力: 1. 软件开发整体介绍 作为一…

Python双向链表、循环链表、栈

一、双向链表 1.作用 双向链表也叫双面链表。 对于单向链表而言。只能通过头节点或者第一个节点出发,单向的访问后继节点,每个节点只能记录其后继节点的信息(位置),不能向前遍历。 所以引入双向链表,双…

k8s网络服务

k8s 中向外界提供服务的几种方法port-forward、NodePort,以及 更加常用的提供服务的资源ingress。 1 kubectl port-forward service/redis 6379:6379 现在k8s中有一个pod运行在6379,本机访问映射到6379上,它可以针对部署,服务&…

eduSRC挖洞思路

声明 学习视频来自 B 站UP主泷羽sec,如涉及侵权马上删除文章。 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负。 ✍🏻作者简介:致…

Leetcode - 周赛424

目录 一,3354. 使数组元素等于零 二, 3355. 零数组变换 I 三,3356. 零数组变换 II 四,3357. 最小化相邻元素的最大差值 一,3354. 使数组元素等于零 本题实际上是一个前/后缀和的问题,就是判断前缀和与后…

Vue2中 vuex 的使用

1.安装 vuex 安装vuex与vue-router类似,vuex是一个独立存在的插件,如果脚手架初始化没有选 vuex,就需要额外安装。 yarn add vuex3 或者 npm i vuex3 233 Vue2 Vue-Router3 Vuex3 344 Vue3 Vue-Router4 Vuex4 2. 新建 store/index.j…

数据结构C语言描述5(图文结合)--队列,数组、链式、优先队列的实现

前言 这个专栏将会用纯C实现常用的数据结构和简单的算法;有C基础即可跟着学习,代码均可运行;准备考研的也可跟着写,个人感觉,如果时间充裕,手写一遍比看书、刷题管用很多,这也是本人采用纯C语言…

Windows修复SSL/TLS协议信息泄露漏洞(CVE-2016-2183) --亲测

漏洞说明: 打开链接:https://docs.microsoft.com/zh-cn/troubleshoot/windows-server/windows-security/restrict-cryptographic-algorithms-protocols-schannel 可以看到: 找到:应通过配置密码套件顺序来控制 TLS/SSL 密码 我们…

深度学习图像视觉 RKNN Toolkit2 部署 RK3588S边缘端 过程全记录

深度学习图像视觉 RKNN Toolkit2 部署 RK3588S边缘端 过程全记录 认识RKNN Toolkit2 工程文件学习路线: Anaconda Miniconda安装.condarc 文件配置镜像源自定义conda虚拟环境路径创建Conda虚拟环境 本地训练环境本地转换环境安装 RKNN-Toolkit2:添加 lin…

controller中的参数注解@Param @RequestParam和@RequestBody的不同

现在controller中有个方法:(LoginUserRequest是一个用户类对象) PostMapping("/test/phone")public Result validPhone(LoginUserRequest loginUserRequest) {return Result.success(loginUserRequest);}现在讨论Param("login…

Android按键点击事件三种实现方法

1. 在xml文件中为 Button 添加android:onclick属性 由于没有onclick这个函数,onclick下面会提示红色波浪线错误,然后单击一下"onclick"按住键盘上AltEnter键,选择在activity中生成函数 public void onclick(View view) {Toast.makeText(this,&…

全景图像(Panorama Image)向透视图像(Perspective Image)的跨视图转化(Cross-view)

一、概念讲解 全景图像到透视图像的转化是一个复杂的图像处理过程,它涉及到将一个360度的全景图像转换为一个具有透视效果的图像,这种图像更接近于人眼观察世界的方式。全景图像通常是一个矩形图像,它通过将球面图像映射到平面上得到&#xf…