nn.Conv2d中groups参数的理解 python

因为需要把yolo网络改成mobilenet,涉及到卷积层的group参数,所以来好好理解一下。

Convolution 层的参数中有一个group参数,其意思是将对应的输入通道与输出通道数进行分组, 默认值为1, 也就是说默认输出输入的所有通道各为一组。 比如输入数据大小为90x100x100x32,通道数32,要经过一个3x3x48的卷积,group默认是1,就是全连接的卷积层。

如果group是2,那么对应要将输入的32个通道分成2个16的通道,将输出的48个通道分成2个24的通道。对输出的2个24的通道,第一个24通道与输入的第一个16通道进行全卷积,第二个24通道与输入的第二个16通道进行全卷积。

极端情况下,输入输出通道数相同,比如为24,group大小也为24,那么每个输出卷积核,只与输入的对应的通道进行卷积。

https://blog.csdn.net/gzj2013/article/details/84884353

比如input_size = [1,6,1,1],   如果你令conv = nn.Conv2d(in_channels=6, out_channels=6, kernel_size=1, stride=1, dilation: 空洞卷积; padding=0, groups=?, bias=False),则当groups=1时,即为默认的卷积层,则conv.weight.data.size为[6,6,1,1],实际上共有6 * 6=36个参数;若group=3时,则每组计算只有out_channel/groups = 2个channel参与,故每一组卷积层的参数大小为[6,2,1,1],每一组共有6 * 2=12个参数,相当于每一组被重复用了3次(即group)次,最后再concat.

https://blog.csdn.net/u010216120/article/details/83545213

groups 决定了将原输入分为几组,而每组channel重用几次,由out_channels/groups计算得到,这也说明了为什么需要 groups能供被 out_channelsin_channels整除。

https://www.aiuai.cn/aifarm618.html

你可能感兴趣的:(python)