caffe group参数理解

本文详细解析了Caffe框架中Convolution层的group参数作用。通过分组限制卷积层之间的连接,减少计算复杂度。介绍了输入输出通道如何分组,并探讨了不同group设置下的计算方式。

caffe Convolution层的convolution_param参数字典中有一个group参数,其意思是将对应的输入通道与输出通道数进行分组,比如输入数据大小为
90x100x100x32 90是数据批大小 100x100是图像数据shape,32是通道数,要经过一个3x3x48的卷积,group默认是1,就是全连接的卷积层,
如果group是2,那么对应要将输入的32个通道分成2个16的通道,将输出的48个通道分成2个24的通道。对输出的2个24的通道,第一个24通道与输入的第一个16通道进行全卷积,第二个24通道与输入的第二个16通道进行全卷积。极端情况下,输入输出通道数相同,比如为24,group大小也为24,那么每个输出卷积核,只与输入的对应的通道进行卷积。


         caffe官网原话是:
group (g) [default 1]: If g > 1, we restrict the connectivity of each filter to a subset of the input. Specifically, the input and output channels are separated into g groups, and the i-th output group channels will be only connected to the i-th input group channels.



查看评论
4楼  小魔大树哥前天 13:58发表 [回复]
你好,请问24通道卷积与16通道feature map卷积,每个通道遍历16个map?
3楼  geek_kys2017-10-25 17:05发表 [回复]
请问楼主,分成几个group后,是按照group1,group2,...这样串行的计算以后再把结果传到下一层,还是这几个group是并行计算后,再把结果传到下一层
Re:  跬步达千里2017-10-27 08:46发表 [回复]
回复geek_kys:串行和并行看你怎么计算,用cpu就是串行计算后将结果综合,并行计算也是gpu计算后将计算结果进行综合
2楼  aiweier03052017-08-11 17:34发表 [回复]
楼主你好,谢谢你的分享。
我可以这么理解么,
对于输入的一个feature_map和输出的feature_map 原本输出的特征图都是有原来的所有通道做全连接(加权)得到的,现在group后只与input_dim/group个有关,这样理解对么
Re:  跬步达千里2017-08-16 08:48发表 [回复]
回复aiweier0305:你好,输出也要进行group,group后output_dim/group的feature map只与对应的input_dim/group的feature map相连
Re:  aiweier03052017-08-29 16:17发表 [回复]
回复跬步达千里:嗯,是这个理解,多谢了
1楼  另类的程序员2017-06-22 10:25发表 [回复]
楼主说法有错误。输入数据大小为90*100*100*32,卷积核的第三维必须与输入数据的通道数保持一致,所以不可能经过3*3*48的卷积。如果按楼主所说,group为2时,对输出的2个24的通道,第一个24通道与输入的第一个16通道如何做卷积?
Re:  跬步达千里2017-06-22 11:41发表 [回复]
回复另类的程序员:是你理解有错误,就这种情况,那就是一个普通的卷积,第一个输出的24通道与第一个输入的16通道进行卷积.想象这样一个普通的卷积,输入通道数是16,输出通道数是24,group就是默认为1,如果按照你的想法,所有的卷积输入通道数还必须和输入通道数相等了
Re:  另类的程序员2017-07-26 15:49发表 [回复]
好吧,楼主应该是对的,我想成了分离通道卷积,搞混了!

Caffe中的卷积层是深度学习网络里的关键组成部分,在图像分类、分割和生成等任务中起着重要作用[^1]。 从功能上看,卷积层主要用于对输入数据进行卷积操作,通过一系列卷积核在输入数据上滑动,进行逐元素相乘并求和,从而提取出输入数据的特征。比如在图像领域,这些特征可能是边缘、纹理等信息。 在Caffe的架构中,Layer类是基本单元,卷积层属于众多层类中的一种,每个层完成一类特定的计算,卷积层负责的就是卷积操作[^2][^3]。网络中各层之间通过Blob数据结构传输数据,无论是输入数据还是卷积核的权重参数,都以Blob的形式存储和传递,卷积层接收输入的Blob数据,通过卷积运算后输出新的Blob数据,这样一层一层地传递,最终完成整个网络的计算过程[^2][^3]。 从代码角度,以`BaseConvolutionLayer`类中的`backward_cpu_gemm`函数为例,展示了卷积层在CPU上进行反向传播时的矩阵乘法操作,该函数通过调用`caffe_cpu_gemm`函数完成具体的矩阵运算,并且根据是否为1x1卷积进行不同的处理,体现了卷积层在计算上的复杂性和灵活性[^5]。 ```cpp void BaseConvolutionLayer<Dtype>::backward_cpu_gemm(const Dtype* output, const Dtype* weights, Dtype* input) { Dtype* col_buff = col_buffer_.mutable_cpu_data(); if (is_1x1_) { col_buff = input; } for (int g = 0; g < group_; ++g) { caffe_cpu_gemm<Dtype>(CblasTrans, CblasNoTrans, kernel_dim_, conv_out_spatial_dim_, conv_out_channels_ / group_, (Dtype)1., weights + weight_offset_ * g, output + output_offset_ * g, (Dtype)0., col_buff + col_offset_ * g); } if (!is_1x1_) { conv_col2im_cpu(col_buff, input); } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值