mango_clfd / models /pose_encoder.py
alihamzajutt's picture
Check new
4302c60
Raw
History Blame Contribute Delete
1.63 kB
"""
@author: Yanzuo Lu
@author: oliveryanzuolu@gmail.com
"""
import torch.nn as nn
from diffusers.models.resnet import ResnetBlock2D, Downsample2D
class PoseEncoder(nn.Module):
def __init__(self, downscale_factor, pose_channels, in_channels, channels):
super().__init__()
self.unshuffle = nn.PixelUnshuffle(downscale_factor)
self.conv_in = nn.Conv2d(int(pose_channels * (downscale_factor ** 2)), in_channels, kernel_size=1)
resnets = []
downsamplers = []
for i in range(len(channels)):
in_channels = in_channels if i == 0 else channels[i - 1]
out_channels = channels[i]
resnets.append(ResnetBlock2D(
in_channels=in_channels,
out_channels=out_channels,
temb_channels=None, # no time embed
))
downsamplers.append(Downsample2D(
out_channels,
use_conv=False,
out_channels=out_channels,
padding=1,
name="op"
) if i != len(channels) - 1 else nn.Identity())
self.resnets = nn.ModuleList(resnets)
self.downsamplers = nn.ModuleList(downsamplers)
def forward(self, hidden_states):
features = []
hidden_states = self.unshuffle(hidden_states)
hidden_states = self.conv_in(hidden_states)
for resnet, downsampler in zip(self.resnets, self.downsamplers):
hidden_states = resnet(hidden_states, temb=None)
features.append(hidden_states)
hidden_states = downsampler(hidden_states)
return features