Skip to content

Data Loading & Preprocessing

Diego Calanzone edited this page Jul 4, 2021 · 4 revisions

In questa fase i dataset generati (= raccolte di cartelle con files di simulazione per ogni area) vengono caricati in memoria per il preprocessing e il successivo training del modello generativo. Nella cartella utils/ sono raccolti gli oggetti principali utilizzati per il preprocessing.

The DataPartitions Object

Sulla base del modello di Custom Dataloader di Keras sono stati create due classi per la generazione del dataset, una di queste è DataPartitions. Parametri di inizializzazione:

  • past_frames: numero di frames del passato da considerare
  • future_frames: numero di frames futuri da generare
  • root: percorso root del dataset (contenente le cartelle per ogni area)
  • partial: facoltativo, quantità parziale [0,1] di dataset da considerare (per test più brevi) Metodi dell'oggetti generato:
  • get_areas(self): ritorna la lista dei nomi delle cartelle aree individuate
  • get_partitions(self): genera una lista di tuple, ciascuna per area, della forma: (area, x,y), dove x è la lista di frames di partenza per ogni sequenza; y è un dizionario con le coppie id_di_partenza-lista_indici_frames_futuri. Esempio:
# L'area 0-0-0-0 contiene 40 frames (0-39), si consideri l'ottava sequenza 
che ha quindi i frames passati 7-13 (6) e i frames futuri 14-16 (4). L'oggetto
partizione è descritto come segue: 
[
...
   (
     'mini-0-0-0-0',
     [
       ...
       "id-7",
       ...
     ],
     [
       ...
       "id-7": [14, 15, 16, 16]
       ...
     ]
   )
...
]
  • create_partitions(self): genera la lista di partizione descritte dal metodo precedente

The DataLoader Object

Questa classe converte le partizioni logiche di DataPartitions in oggetti numpy contenenti i dati reali. Parametri:

  • root: percorso root del dataset (contenente le cartelle per ogni area)
  • past_frames: numero di frames del passato da considerare
  • future_frames: numero di frames futuri da generare
  • input_dim: dimensione datapoint X (es: (partitions.past_frames, 256, 256, 3))
  • output_dim: dimensione datapoint Y (es: partitions.future_frames, 256, 256, 2))
  • batch_size
  • buffer_size: numero di frames da memorizzare in cache per velocizzare la lettura da disco (Second Chance Replacement Policy)
  • buffer_memory: tempo di memoria (n-esima chance)
  • downsampling: True/False, per applicare una riduzione 2x con filtro gaussiano 3x3

Il DataLoader object ammette i seguenti principali metodi:

  • __len__(): numero totale di batches Caricamento on-the-fly da disco (con cache, senza caricare tutto il dataset su RAM):
  • __getitem__(i): restituisce l'i-esimo batch Caricamento su RAM del dataset (con cache):
  • get_X(): restituisce il tensor di datapoints X allineati con gli elementi del tensor Y
  • get_Y(): restituisce il tensor di datapoints Y allineati con gli elementi del tensor X Per caricare quindi un dataset:
X = dataset.get_X()
Y = dataset.get_Y()

Con le seguenti shapes:

  • X: (n_batches, batch_size, past_frames, height, width, channels), i canali sono DEP, VELOCITY, BTM (VELOCITY è la somma vettoriale delle direzioni VVX e VVY), l'ordine è channel last.
  • Y: (n_batches, batch_size, future_frames, height, width, channels)

Clone this wiki locally