in multiple_futures_prediction/model_ngsim.py [0:0]
def __init__(self, args: Dict) -> None:
super(mfpNet, self).__init__() #type: ignore
self.use_cuda = args['use_cuda']
self.encoder_size = args['encoder_size']
self.decoder_size = args['decoder_size']
self.out_length = args['fut_len_orig_hz']//args['subsampling']
self.dyn_embedding_size = args['dyn_embedding_size']
self.input_embedding_size = args['input_embedding_size']
self.nbr_atten_embedding_size = args['nbr_atten_embedding_size']
self.st_enc_hist_size = self.nbr_atten_embedding_size
self.st_enc_pos_size = args['dec_nbr_enc_size']
self.use_gru = args['use_gru']
self.bi_direc = args['bi_direc']
self.use_context = args['use_context']
self.modes = args['modes']
self.use_forcing = args['use_forcing'] # 1: Teacher forcing. 2:classmates forcing.
self.hidden_fac = 2 if args['use_gru'] else 1
self.bi_direc_fac = 2 if args['bi_direc'] else 1
self.dec_fac = 2 if args['bi_direc'] else 1
self.init_rbf_state_enc( in_dim=self.encoder_size*self.hidden_fac )
self.posi_enc_dim = self.st_enc_pos_size
self.posi_enc_ego_dim = 2
# Input embedding layer
self.ip_emb = torch.nn.Linear(2,self.input_embedding_size) #type: ignore
# Encoding RNN.
if not self.use_gru:
self.enc_lstm = torch.nn.LSTM(self.input_embedding_size,self.encoder_size,1) # type: ignore
else:
self.num_layers=2
self.enc_lstm = torch.nn.GRU(self.input_embedding_size,self.encoder_size, # type: ignore
num_layers=self.num_layers, bidirectional=False)
# Dynamics embeddings.
self.dyn_emb = torch.nn.Linear(self.encoder_size*self.hidden_fac, self.dyn_embedding_size) #type: ignore
context_feat_size = 64 if self.use_context else 0
self.dec_lstm = []
self.op = []
for k in range(self.modes):
if not self.use_gru:
self.dec_lstm.append( torch.nn.LSTM(self.nbr_atten_embedding_size + self.dyn_embedding_size + #type: ignore
context_feat_size+self.posi_enc_dim+self.posi_enc_ego_dim, self.decoder_size) )
else:
self.num_layers=2
self.dec_lstm.append( torch.nn.GRU(self.nbr_atten_embedding_size + self.dyn_embedding_size + context_feat_size+self.posi_enc_dim+self.posi_enc_ego_dim, # type: ignore
self.decoder_size, num_layers=self.num_layers, bidirectional=self.bi_direc ))
self.op.append( torch.nn.Linear(self.decoder_size*self.dec_fac, 5) ) #type: ignore
self.op[k] = self.op[k]
self.dec_lstm[k] = self.dec_lstm[k]
self.dec_lstm = torch.nn.ModuleList(self.dec_lstm) # type: ignore
self.op = torch.nn.ModuleList(self.op ) # type: ignore
self.op_modes = torch.nn.Linear(self.nbr_atten_embedding_size + self.dyn_embedding_size + context_feat_size, self.modes) #type: ignore
# Nonlinear activations.
self.leaky_relu = torch.nn.LeakyReLU(0.1) #type: ignore
self.relu = torch.nn.ReLU() #type: ignore
self.softmax = torch.nn.Softmax(dim=1) #type: ignore
if self.use_context:
self.context_conv = torch.nn.Conv2d(3, 16, kernel_size=3, stride=2) #type: ignore
self.context_conv2 = torch.nn.Conv2d(16, 16, kernel_size=3, stride=2) #type: ignore
self.context_maxpool = torch.nn.MaxPool2d(kernel_size=(4,2)) #type: ignore
self.context_conv3 = torch.nn.Conv2d(16, 16, kernel_size=3, stride=2) #type: ignore
self.context_fc = torch.nn.Linear(16*20*3, context_feat_size) #type: ignore