Spaces:
Running
on
L40S
Running
on
L40S
import numpy as np | |
import torch.nn as nn | |
import torch | |
import torch.nn.functional as F | |
class ResnetEncoder(nn.Module): | |
def __init__(self, append_layers=None): | |
super(ResnetEncoder, self).__init__() | |
from . import resnet | |
# feature_size = 2048 | |
self.feature_dim = 2048 | |
self.encoder = resnet.load_ResNet50Model() # out: 2048 | |
# regressor | |
self.append_layers = append_layers | |
# for normalize input images | |
MEAN = [0.485, 0.456, 0.406] | |
STD = [0.229, 0.224, 0.225] | |
self.register_buffer('MEAN', torch.tensor(MEAN)[None, :, None, None]) | |
self.register_buffer('STD', torch.tensor(STD)[None, :, None, None]) | |
def forward(self, inputs): | |
''' inputs: [bz, 3, h, w], range: [0,1] | |
''' | |
inputs = (inputs - self.MEAN) / self.STD | |
features = self.encoder(inputs) | |
if self.append_layers: | |
features = self.last_op(features) | |
return features | |
class MLP(nn.Module): | |
def __init__(self, channels=[2048, 1024, 1], last_op=None): | |
super(MLP, self).__init__() | |
layers = [] | |
for l in range(0, len(channels) - 1): | |
layers.append(nn.Linear(channels[l], channels[l + 1])) | |
if l < len(channels) - 2: | |
layers.append(nn.ReLU()) | |
if last_op: | |
layers.append(last_op) | |
self.layers = nn.Sequential(*layers) | |
def forward(self, inputs): | |
outs = self.layers(inputs) | |
return outs | |
class HRNEncoder(nn.Module): | |
def __init__(self, append_layers=None): | |
super(HRNEncoder, self).__init__() | |
from . import hrnet | |
self.feature_dim = 2048 | |
self.encoder = hrnet.load_HRNet(pretrained=True) # out: 2048 | |
# regressor | |
self.append_layers = append_layers | |
# for normalize input images | |
MEAN = [0.485, 0.456, 0.406] | |
STD = [0.229, 0.224, 0.225] | |
self.register_buffer('MEAN', torch.tensor(MEAN)[None, :, None, None]) | |
self.register_buffer('STD', torch.tensor(STD)[None, :, None, None]) | |
def forward(self, inputs): | |
''' inputs: [bz, 3, h, w], range: [0,1] | |
''' | |
inputs = (inputs - self.MEAN) / self.STD | |
features = self.encoder(inputs)['concat'] | |
if self.append_layers: | |
features = self.last_op(features) | |
return features | |