首先是Encoder部分,首先将通道数升至64,然后进行2次常规的尺寸减半,通道加倍
(N, 3, 256, 256)
【Conv 3->64 7x7 s=1 rp=3】(rp表示ReflectionPad2d)
【IN + ReLU】
(N, 64, 256, 256)
【Conv 64->128 3x3 s=2 p=1】
【IN + ReLU】
(N, 128, 128, 128)
【Conv 128->256 3x3 s=2 p=1】
【IN + ReLU】
(N, 256, 64, 64)
接下来是9个ResnetBlock
x:(N, 256, 64, 64)
【Conv 256->256 3x3 s=1 rp=1】
【IN + ReLU + Dropout(p=0)】
【Conv 256->256 3x3 s=1 rp=1】
【IN】
conv_block(x):(N, 256, 64, 64)
【add x:(N, 256, 64, 64)】
out:(N, 256, 64, 64)
最后是Decoder部分
(N, 256, 64, 64)
【ConvT 256->128 3x3 s=2 p=1 output_padding=1】
【IN + ReLU】
(N, 128, 128, 128)
【ConvT 128->64 3x3 s=2 p=1 output_padding=1】
【IN + ReLU】
(N, 64, 256, 256)
【Conv 64->3 7x7 s=1 rp=3】
【Tanh】
(N, 3, 256, 256)
如果选择opt.netG = 'mobile_resnet_9blocks'
,那么中间是9个MobileResnetBlock
x:(N, 256, 64, 64)
【ReflectionPad p=1】
【SepConv 256->256 3x3,1x1 s=1】
【IN + ReLU + Dropout(p=0)】
【ReflectionPad p=1】
【SepConv 256->256 3x3,1x1 s=1】
【IN】
conv_block(x):(N, 256, 64, 64)
【add x:(N, 256, 64, 64)】
out:(N, 256, 64, 64)
【SepConv 256->256 3x3,1x1 s=1】的详细结构如下
【Conv 256->256 3x3 s=1 groups=256】
【IN】
【Conv 256->256 1x1 s=1】
gan-compression
轻量级网络
Encoder部分
(N, 3, 256, 256)
【Conv 3->16 7x7 s=1 rp=3】(rp表示ReflectionPad2d)
【IN + ReLU】
(N, 16, 256, 256)
【Conv 16->32 3x3 s=2 p=1】
【IN + ReLU】
(N, 32, 128, 128)
【Conv 32->128 3x3 s=2 p=1】
【IN + ReLU】
(N, 128, 64, 64)
中间部分
x:(N, 128, 64, 64)
【ReflectionPad p=1】
【SepConv 128->64 3x3,1x1 s=1】
【IN + ReLU + Dropout(p=0)】
【ReflectionPad p=1】
【SepConv 64->128 3x3,1x1 s=1】
【IN】
conv_block(x):(N, 128, 64, 64)
【add x:(N, 128, 64, 64)】
out:(N, 128, 64, 64)
【SepConv 128->64 3x3,1x1 s=1】的详细结构如下
【Conv 128->128 3x3 s=1 groups=128】
【IN】
【Conv 64->64 1x1 s=1】
Decoder部分
(N, 128, 64, 64)
【ConvT 128->32 3x3 s=2 p=1 output_padding=1】
【IN + ReLU】
(N, 32, 128, 128)
【ConvT 32->16 3x3 s=2 p=1 output_padding=1】
【IN + ReLU】
(N, 16, 256, 256)
【Conv 16->3 7x7 s=1 rp=3】
【Tanh】
(N, 3, 256, 256)