将初始化的latent tensor通过逆卷积转变任意volume size

 输入(batch_size, in_channel, H, W)

经过nn.ConvTranspose2d(in_channel, out_channel, kernel_size, stride, padding)

输出(batch_size, out_channel, (H-1)*stride + kernel_size - 2* padding)

下面的示例代码展示了如何从256的tensor变为,(32,512,512)大小的特征。

通常可以应用到人体的逆蒙皮权重的学习中。后续通过F.grid_sample来采样权重。

class Feature_plane(nn.Module):
    def __init__(self):
        super(Feature_plane, self).__init__()
        
        self.fc = nn.Sequential(
            nn.Linear(256, 1024),
            nn.ReLU(inplace=True)
        )
        
        self.conv = nn.Sequential(
            nn.ConvTranspose2d(1024, 512, kernel_size=4, stride=2, padding=0),
            nn.BatchNorm2d(512),
            nn.ReLU(inplace=True),
            nn.ConvTranspose2d(512, 256, kernel_size=4, stride=4, padding=0),
            nn.BatchNorm2d(256),
            nn.ReLU(inplace=True),
            nn.ConvTranspose2d(256, 128, kernel_size=4, stride=4, padding=0),
            nn.BatchNorm2d(128),
            nn.ReLU(inplace=True),
            nn.ConvTranspose2d(128, 64, kernel_size=4, stride=4, padding=0),
            nn.BatchNorm2d(64),
            nn.ReLU(inplace=True),
            nn.ConvTranspose2d(64, 32, kernel_size=4, stride=2, padding=0),
            nn.Tanh()
        )
    def forward(self, x):
        x = self.fc(x)
        # x = x.view(-1, 64, 4, 4)
        x = x.view(-1, 1024, 1, 1)
        x = self.conv(x)
        # print("x3",x.shape)
        # exit()
        return x

评论