GFPGAN源代码分析(五)
2021SC@SDUSC
一、分析的代码片段
1.代码展示
# downsample
in_channels = channels[f{first_out_size}]
self.conv_body_down = nn.ModuleList()
for i in range(self.log_size, 2, -1):
out_channels = channels[f{2**(i - 1)}]
self.conv_body_down.append(ResBlock(in_channels, out_channels, mode=down))
in_channels = out_channels
self.final_conv = nn.Conv2d(in_channels, channels[4], 3, 1, 1)
# upsample
in_channels = channels[4]
self.conv_body_up = nn.ModuleList()
for i in range(3, self.log_size + 1):
out_channels = channels[f{2**i}]
self.conv_body_up.append(ResBlock(in_channels, out_channels, mode=up))
in_channels = out_channels
# to RGB
self.toRGB = nn.ModuleList()
for i in range(3, self.log_size + 1):
self.toRGB.append(nn.Conv2d(channels[f{2**i}], 3, 1))
2.代码作用分析
输入图片的通道数
in_channels = channels[f{first_out_size}]
创建ModuleList容器
self.conv_body_down = nn.ModuleList()
i从self.log_size(9)->3 :7次循环
for i in range(self.log_size, 2, -1):
out_channels = channels[f{2 ** (i - 1)}]
#调用ResBlock残差网络做下采样,并将该module添加到设置的ModuleList
self.conv_body_down.append(ResBlock(in_channels, out_channels, mode=down))
#这一层的输出管道数作为下一层输入的管道数
in_channels = out_channels
二、具体应用
1.下采样
# 输入图片的通道数(实际为32)
in_channels = channels[f{first_out_size}]
#创建ModuleList容器
self.conv_body_down = nn.ModuleList()
# i从self.log_size(9)->3 :7次循环
for i in range(self.log_size, 2, -1):
out_channels = channels[f{2 ** (i - 1)}]
#调用ResBlock残差网络做下采样,并将该module添加到设置的ModuleList
self.conv_body_down.append(ResBlock(in_channels, out_channels, mode=down))
#这一层的输出管道数作为下一层输入的管道数
2.上采样
in_channels = channels[4]
self.conv_body_up = nn.ModuleList()
for i in range(3, self.log_size + 1):
out_channels = channels[f{2**i}]
self.conv_body_up.append(ResBlock(in_channels, out_channels, mode=up))
in_channels = out_channels
上一篇:
JS实现多线程数据分片下载
下一篇:
ubuntu彻底卸载Nvidia显卡驱动
