Pas encore de compte ?
Modele SocialGAN
evaluate_model.py
Testé sous Anaconda et Python 3.7
import argparse import os import torch from attrdict import AttrDict from sgan.data.loader import data_loader from sgan.models import TrajectoryGenerator from sgan.losses import displacement_error, final_displacement_error from sgan.utils import relative_to_abs, get_dset_path parser = argparse.ArgumentParser() parser.add_argument('--model_path', type=str) parser.add_argument('--num_samples', default=20, type=int) parser.add_argument('--dset_type', default='test', type=str) def get_generator(checkpoint): args = AttrDict(checkpoint['args']) generator = TrajectoryGenerator( obs_len=args.obs_len, pred_len=args.pred_len, embedding_dim=args.embedding_dim, encoder_h_dim=args.encoder_h_dim_g, decoder_h_dim=args.decoder_h_dim_g, mlp_dim=args.mlp_dim, num_layers=args.num_layers, noise_dim=args.noise_dim, noise_type=args.noise_type, noise_mix_type=args.noise_mix_type, pooling_type=args.pooling_type, pool_every_timestep=args.pool_every_timestep, dropout=args.dropout, bottleneck_dim=args.bottleneck_dim, neighborhood_size=args.neighborhood_size, grid_size=args.grid_size, batch_norm=args.batch_norm) generator.load_state_dict(checkpoint['g_state']) generator.cuda() generator.train() return generator def evaluate_helper(error, seq_start_end): sum_ = 0 error = torch.stack(error, dim=1) for (start, end) in seq_start_end: start = start.item() end = end.item() _error = error[start:end] _error = torch.sum(_error, dim=0) _error = torch.min(_error) sum_ += _error return sum_ def evaluate(args, loader, generator, num_samples): ade_outer, fde_outer = [], [] total_traj = 0 with torch.no_grad(): for batch in loader: batch = [tensor.cuda() for tensor in batch] (obs_traj, pred_traj_gt, obs_traj_rel, pred_traj_gt_rel, non_linear_ped, loss_mask, seq_start_end) = batch ade, fde = [], [] total_traj += pred_traj_gt.size(1) for _ in range(num_samples): pred_traj_fake_rel = generator( obs_traj, obs_traj_rel, seq_start_end ) pred_traj_fake = relative_to_abs( pred_traj_fake_rel, obs_traj[-1] ) ade.append(displacement_error( pred_traj_fake, pred_traj_gt, mode='raw' )) fde.append(final_displacement_error( pred_traj_fake[-1], pred_traj_gt[-1], mode='raw' )) ade_sum = evaluate_helper(ade, seq_start_end) fde_sum = evaluate_helper(fde, seq_start_end) ade_outer.append(ade_sum) fde_outer.append(fde_sum) ade = sum(ade_outer) / (total_traj * args.pred_len) fde = sum(fde_outer) / (total_traj) return ade, fde def main(args): if os.path.isdir(args.model_path): filenames = os.listdir(args.model_path) filenames.sort() paths = [ os.path.join(args.model_path, file_) for file_ in filenames ] else: paths = [args.model_path] for path in paths: checkpoint = torch.load(path) generator = get_generator(checkpoint) _args = AttrDict(checkpoint['args']) path = get_dset_path(_args.dataset_name, args.dset_type) _, loader = data_loader(_args, path) ade, fde = evaluate(_args, loader, generator, args.num_samples) print('Dataset: {}, Pred Len: {}, ADE: {:.2f}, FDE: {:.2f}'.format( _args.dataset_name, _args.pred_len, ade, fde)) if __name__ == '__main__': args = parser.parse_args() main(args)
sgan
Copyright (c) 2018 Agrim Gupta, Justin Johnson
python scripts/evaluate_model.py --model_path models/sgan-models
Dataset: eth, Pred Len: 12, ADE: 0.70, FDE: 1.26
Dataset: eth, Pred Len: 8, ADE: 0.58, FDE: 1.15
Dataset: hotel, Pred Len: 12, ADE: 0.48, FDE: 1.03
Dataset: hotel, Pred Len: 8, ADE: 0.36, FDE: 0.71
Dataset: univ, Pred Len: 12, ADE: 0.56, FDE: 1.18
Dataset: univ, Pred Len: 8, ADE: 0.33, FDE: 0.70
Dataset: zara1, Pred Len: 12, ADE: 0.33, FDE: 0.68
Dataset: zara1, Pred Len: 8, ADE: 0.21, FDE: 0.42
Dataset: zara2, Pred Len: 12, ADE: 0.31, FDE: 0.65
Dataset: zara2, Pred Len: 8, ADE: 0.21, FDE: 0.42
Le mouvement humain est interpersonnel, multimodal et suit les conventions sociales.
Dans cet article, ils abordent ce problème en combinant des outils de prédiction de séquence et des réseaux antagonistes génératifs dans lequel un modèle séquence à séquence récurrent observe les historiques de mouvement et prédit le comportement futur en utilisant un nouveau mécanisme de mise en commun pour agréger les informations entre les personnes.
Ci-dessous, ils montrent des exemples de prédictions socialement acceptables faites par le modèle dans des scénarios complexes.
Chaque personne est désignée par une couleur différente. On note la trajectoire observée par des points et la trajectoire prédite par des étoiles.
Bienvenu, je m’appelle Eric Soupet et je suis l'administrateur du site elodees.com. elodees.com est un état de l'art de l'Intelligence Artificielle et se veut collaboratif, vous pouvez dès à présent proposer du contenu tels que des articles, des événements, des tutoriels, ... alors n'hésitez pas !
Crédit des images de la plate-forme : Pixabay - Pixabay License | Pexels - Pexels License