当前位置: 首页 > article >正文

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.kler.cn/a/408344.html

相关文章:

  • 基于STM32的火灾报警装置的Proteus仿真
  • HTML实现 扫雷游戏
  • 神经网络中常用的激活函数(公式 + 函数图像)
  • 医学AI公开课·第一期|Machine LearningTransformers in Med AI
  • 10-单表查询
  • ElasticSearch7.x入门教程之集群安装(一)
  • 1123--collection接口,list接口,set接口
  • scau编译原理综合性实验
  • 【数据结构】链表重难点突破
  • CTF之密码学(键盘加密)
  • Linux(2)
  • 16.C++STL 3(string类的模拟,深浅拷贝问题)
  • 〔 MySQL 〕中三种重要的日志类型
  • Java网络编程 - cookiesession
  • Vulnhub靶场 Jangow: 1.0.1 练习
  • C语言超详细教程
  • 挂壁式空气净化器哪个品牌的质量好?排名top3优秀产品测评分析
  • 网络性能及IO性能测试工具
  • golang实现TCP服务器与客户端的断线自动重连功能
  • 优先算法 —— 双指针系列 - 复写零
  • 青训营刷题笔记17
  • [自动化]获取每次翻页后的页面 URL
  • Java核心特性解析:方法、Stream流、文件与IO详解
  • 每日OJ_牛客_合唱队形_DP_C++_Java
  • 数据库连接池(二)
  • Vue v-if 与 v-for 使用指南:优先级、注意事项及常见错误防范