def __init__()

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