stride 2 代表步长为2 ,V 是TF中的padding=“Valid” == pytorch中的padding=0 ,没有标 V 是TF中的padding=“Same” == pytorch中的padding=1 with zero padding(用0填充)。
需要注意的是,文中Conv s=2的padding为1;s=1的padding为0。
此外,我对图中结构进行了计算,经过不对称卷积(如IR-B模块,经过1X7,7X1的卷积按照原文特征图的大小会发生变化,但输出的结果表明这里的特征图大小并没有发生变化),它的H和W仍然不变,这里是因为它添加了0,保证特征图的大小不发生变化。




Reduction-A结构

② Inception-ResNet-V2网络结构(整体结构v1和v2相同,主要区别在于通道数):




这三个网络中的参数略有不同:

Inception-ResNet-v2网络的35×35→17×17和17×17→8×8图缩减模块A、B:

Inception-ResNet-v2网络的Reduction-A、B
Inception-ResNet v1 的计算成本和 Inception v3 的接近;Inception-ResNetv2 的计算成本和 Inception v4 的接近。它们有不同的 stem,两个网络都有模块 A、B、C 和缩减块结构。唯一的不同在于超参数设置。
③ 代码实现:
(1)Inception-Resnet-v1:
# 先定义3X3的卷积,用于代码复用
class conv3x3(nn.Module):
def __init__(self, in_planes, out_channels, stride=1, padding=0):
super(conv3x3, self).__init__()
self.conv3x3 = nn.Sequential(
nn.Conv2d(in_planes, out_channels, kernel_size=3, stride=stride, padding=padding),#卷积核为3x3
nn.BatchNorm2d(out_channels),#BN层,防止过拟合以及梯度爆炸
nn.ReLU()#激活函数
)
def forward(self, input):
return self.conv3x3(input)
class conv1x1(nn.Module):
def __init__(self, in_planes, out_channels, stride=1, padding=0):
super(conv1x1, self).__init__()
self.conv1x1 = nn.Sequential(
nn.Conv2d(in_planes, out_channels, kernel_size=1, stride=stride, padding=padding),#卷积核为1x1
nn.BatchNorm2d(out_channels),
nn.ReLU()
)
def forward(self, input):
return self.conv1x1(input)
St

最低0.47元/天 解锁文章
3795

被折叠的 条评论
为什么被折叠?



