import sys import torch import torch._utils import torch.nn as nn import torch.utils.data import torch.utils.data.distributed from SPPE.src.models.FastPose import createModel from SPPE.src.utils.img import flip, shuffleLR try: torch._utils._rebuild_tensor_v2 except AttributeError: def _rebuild_tensor_v2(storage, storage_offset, size, stride, requires_grad, backward_hooks): tensor = torch._utils._rebuild_tensor(storage, storage_offset, size, stride) tensor.requires_grad = requires_grad tensor._backward_hooks = backward_hooks return tensor torch._utils._rebuild_tensor_v2 = _rebuild_tensor_v2 class InferenNet(nn.Module): def __init__(self, kernel_size, dataset): super(InferenNet, self).__init__() model = createModel() print('Loading pose model from {}'.format('joints_detectors/Alphapose/models/sppe/duc_se.pth')) sys.stdout.flush() model.load_state_dict(torch.load('joints_detectors/Alphapose/models/sppe/duc_se.pth', map_location=torch.device('cpu'))) model.eval() self.pyranet = model self.dataset = dataset def forward(self, x): out = self.pyranet(x) out = out.narrow(1, 0, 17) flip_out = self.pyranet(flip(x)) flip_out = flip_out.narrow(1, 0, 17) flip_out = flip(shuffleLR( flip_out, self.dataset)) out = (flip_out + out) / 2 return out class InferenNet_fast(nn.Module): def __init__(self, kernel_size, dataset): super(InferenNet_fast, self).__init__() model = createModel() print('Loading pose model from {}'.format('models/sppe/duc_se.pth')) model.load_state_dict(torch.load('models/sppe/duc_se.pth', map_location=torch.device('cpu'))) model.eval() self.pyranet = model self.dataset = dataset def forward(self, x): out = self.pyranet(x) out = out.narrow(1, 0, 17) return out