|
|
|
|
|
""" |
|
Motion extractor(M), which directly predicts the canonical keypoints, head pose and expression deformation of the input image |
|
""" |
|
|
|
from torch import nn |
|
import torch |
|
|
|
from .convnextv2 import convnextv2_tiny |
|
from .util import filter_state_dict |
|
|
|
model_dict = { |
|
'convnextv2_tiny': convnextv2_tiny, |
|
} |
|
|
|
|
|
class MotionExtractor(nn.Module): |
|
def __init__(self, **kwargs): |
|
super(MotionExtractor, self).__init__() |
|
|
|
|
|
backbone = kwargs.get('backbone', 'convnextv2_tiny') |
|
self.detector = model_dict.get(backbone)(**kwargs) |
|
|
|
def load_pretrained(self, init_path: str): |
|
if init_path not in (None, ''): |
|
state_dict = torch.load(init_path, map_location=lambda storage, loc: storage)['model'] |
|
state_dict = filter_state_dict(state_dict, remove_name='head') |
|
ret = self.detector.load_state_dict(state_dict, strict=False) |
|
print(f'Load pretrained model from {init_path}, ret: {ret}') |
|
|
|
def forward(self, x): |
|
out = self.detector(x) |
|
return out |
|
|