Convolution operation and Grouped Convolution

filter is not the kernel,but the kernels.that's mean a filter include one or two or more kernels.that's depend the input feature map and the output feature maps. for example, if we have an image, the shape of image is (32,32), has 3 channels,that's RGB.so the input feature maps is (1,3,32,32).the format of input feature maps is (batch_size,in_channels,H_in,W_in),the output feature maps is(batch_size,out_channels,H_out,W_out),there is a formulation for out_H,out_W.

p is padding,default is 0. s is stride,default is 1.

so, we get the the Height and Width of output feature map,but how about the output channels?how do we get the output channels from the input channels.Or,In other words,what's the convolution operation?

first,i'll give the conclusion and explain it later.

so the weight size is (filters, kernels of filter,H_k,W_k),the format of weight vector is (C_out,C_in,H_k,W_k)

that's mean we have C_out filters, and each filter has C_in kernels.if you don't understand, look through this link,it will tell you the specific operations.

as we go deeper into the convolution this dimension of channels increases very rapidly thus increases complexity. The spatial dimensions(means height and weight) have some degree of effect on the complexity but in deeper layers, they are not really the cause of concern. Thus in bigger neural networks, the filter groups will dominate.so,the grouped convolution was proposed,you can access to this link for more details.

you can try this code for validation.

python 复制代码
import torch.nn as nn
import torch

# 假设输入特征图的大小为 (batch_size, in_channels, H, W)
batch_size = 1
in_channels = 4
out_channels = 2
H = 6
W = 6

# 定义1x1卷积层,输入通道数为in_channels,输出通道数为out_channels
conv = nn.Conv2d(in_channels, out_channels, kernel_size=1, stride=1, padding=0)

# 对输入特征图进行1x1卷积操作
x = torch.randn(batch_size, in_channels, H, W)
y = conv(x)

# 输入特征图的大小为 (batch_size, in_channels, H, W)
print(x.shape)  # torch.Size([1, 4, 6, 6])
# 输出特征图的大小为 (batch_size, out_channels, H, W)
print(y.size())   # torch.Size([1, 2, 6, 6])
# 获取卷积核的尺寸 (out_channels, in_channels // groups, *kernel_size)
weight_size = conv.weight.size()
print('卷积核的尺寸为:', weight_size)  # torch.Size([2, 4, 1, 1])
相关推荐
渡我白衣1 小时前
C++:链接的两难 —— ODR中的强与弱符号机制
开发语言·c++·人工智能·深度学习·网络协议·算法·机器学习
翔云 OCR API2 小时前
基于深度学习与OCR研发的报关单识别接口技术解析
人工智能·深度学习·ocr
3Bronze1Pyramid3 小时前
深度学习参数优化
人工智能·深度学习
小彭律师4 小时前
QCES项目Windows平台运行指南
深度学习·金融·科研·科研记录
九章云极AladdinEdu5 小时前
神经符号系统架构:结合深度学习与符号推理的混合智能
人工智能·深度学习·知识图谱补全·神经符号系统·可微分推理·符号规则引擎·混合智能
夫唯不争,故无尤也5 小时前
三大AI部署框架对比:本地权重与多模型协作实战
人工智能·python·深度学习
be_humble5 小时前
GPU机器-显卡占用
pytorch·python·深度学习
WWZZ20256 小时前
快速上手大模型:深度学习4(实践:多层感知机)
人工智能·深度学习·计算机视觉·机器人·大模型·slam·具身智能
大明者省8 小时前
案例分析交叉熵和交叉验证区别和联系
人工智能·深度学习·神经网络·计算机视觉·cnn
会笑的小熊15 小时前
论文阅读笔记——自注意力机制
深度学习·计算机视觉·自然语言处理