恩蓝号

keras 空洞卷积,keras数据集

分组卷积在pytorch中比较容易实现,只需要在卷积的时候设置group参数即可
比如设置分组数为2

conv_group = nn.Conv2d(C_in,C_out,kernel_size=3,stride=3,padding=1,groups = 2)

但是,tensorflow中目前还没有分组卷积,只能自己手动编写分组卷积函数。
在编写程序之前大家要先理解分组卷积的形式,也就是对特征图在通道上进行划分,例如设置group=3,对输入特征图通道划分成三组,输出特征图也要划分成3组,再对三组输入输出特征图分别进行卷积。
实现过程如下:
1.获取输入特征图和输出特征图通道数,再结合分组数进行划分
2.对输入特征图的每一组进行单独卷积
3.将每组卷积后的结果进行通道上的拼接
代码如下:

def group_conv(x, filters, kernel, stride, groups): channel_axis = 1 if K.image_data_format() == 'channels_first' else -1 in_channels = K.int_shape(x)[channel_axis]#计算输入特征图的通道数 nb_ig = in_channels // groups#对输入特征图通道进行分组 nb_og = filters // groups#对输出特征图通道进行分组 gc_list = [] for i in range(groups): if channel_axis == -1: x_group = Lambda(lambda z: z[:, :, :, i * nb_ig: (i + 1) * nb_ig])(x) else: x_group = Lambda(lambda z: z[:, i * nb_ig: (i + 1) * nb_ig, :, :])(x) gc_list.append(Conv2D(filters=nb_og, kernel_size=kernel, strides=stride, padding='same', use_bias=False)(x_group))#对每组特征图进行单独卷积 return Concatenate(axis=channel_axis)(gc_list)#在通道上进行特征图的拼接

免责声明:文章源自网络,版权归原作者所有,如有侵犯联系删除。

当前位置:首页 > 编程知识 » 2023-03-03 12:08:14

猜你喜欢


fcn 反卷积

最近在研究图像分割方面的内容,图像分割是对图像进行像素进行分类。在这里提到分类,首先想到了 使用深度学习的方法进行分类操作的。 在这里以前...