5.16结组作业
stgcn部分
import os import torch import numpy as np from .Models import TwoStreamSpatialTemporalGraph from .Utils import normalize_points_with_size, scale_pose class STGCN(object): """Two-Stream Spatial Temporal Graph Model Loader. Args: weight_file: (str) Path to trained weights file. device: (str) Device to load the model on 'cpu' or 'cuda'. """ def __init__(self, weight_file='./Models/TSSTG/tsstg-model.pth', device='cuda'): self.graph_args = {'strategy': 'spatial'} self.class_names = ['Standing', 'Walking', 'Sitting', 'Lying Down', 'Stand up', 'Sit down', 'Fall Down'] self.num_class = len(self.class_names) self.device = device self.model = TwoStreamSpatialTemporalGraph(self.graph_args, self.num_class).to(self.device) self.model.load_state_dict(torch.load(weight_file, map_location=torch.device(device))) self.model.eval() def predict(self, pts, image_size): """Predict actions from single person skeleton points and score in time sequence. Args: pts: (numpy array) points and score in shape `(t, v, c)` where t : inputs sequence (time steps)., v : number of graph node (body parts)., c : channel (x, y, score)., image_size: (tuple of int) width, height of image frame. Returns: (numpy array) Probability of each class actions. """ pts[:, :, :2] = normalize_points_with_size(pts[:, :, :2], image_size[0], image_size[1]) pts[:, :, :2] = scale_pose(pts[:, :, :2]) pts = np.concatenate((pts, np.expand_dims((pts[:, 1, :] + pts[:, 2, :]) / 2, 1)), axis=1) pts = torch.tensor(pts, dtype=torch.float32) pts = pts.permute(2, 0, 1)[None, :] mot = pts[:, :2, 1:, :] - pts[:, :2, :-1, :] mot = mot.to(self.device) pts = pts.to(self.device) out = self.model((pts, mot)) return out.detach().cpu().numpy()

浙公网安备 33010602011771号