Scaricare, pre-elaborare e caricare il set di dati ImageNet

Questo documento descrive come scaricare, pre-elaborare e caricare il set di dati ImageNet da utilizzare con l'architettura VM Cloud TPU.

ImageNet è un database di immagini. Le immagini nel database sono organizzate in una gerarchia, con ogni nodo della gerarchia rappresentato da centinaia e migliaia di immagini.

A causa delle dimensioni del database ImageNet, l'addestramento di un modello può richiedere molto tempo. Un'alternativa è utilizzare una versione dimostrativa del set di dati, denominata fake_imagenet. Questa versione dimostrativa consente di testare il modello, riducendo al contempo i requisiti di archiviazione e di tempo associati all'uso del database ImageNet completo.

Pre-elaborazione dell'intero set di dati ImageNet

Il set di dati ImageNet è composto da tre parti: dati di addestramento, dati di convalida ed etichette delle immagini.

I dati di addestramento contengono 1000 categorie e 1,2 milioni di immagini, confezionate per il download. I dati di convalida e test non sono contenuti nei dati di addestramento ImageNet (i duplicati sono stati rimossi).

I dati di convalida e test sono costituiti da 150.000 fotografie, raccolte da Flickr e da altri motori di ricerca, etichettate a mano con la presenza o l'assenza di 1000 categorie di oggetti. Le 1000 categorie di oggetti contengono sia nodi interni che nodi foglia di ImageNet, ma non si sovrappongono tra loro. Un sottoinsieme casuale di 50.000 immagini con etichette è stato rilasciato come dati di convalida insieme a un elenco delle 1000 categorie. Le immagini rimanenti vengono utilizzate per la valutazione e sono state pubblicate senza etichette.

Passaggi per pre-elaborare il set di dati ImageNet completo

La preparazione del set di dati ImageNet completo per l'utilizzo da parte di un modello di machine learning prevede cinque passaggi:

  1. Verifica di avere spazio nella destinazione del download.
  2. Configura le directory di destinazione.
  3. Registrati sul sito ImageNet e richiedi l'autorizzazione di download.
  4. Scarica il set di dati sul disco locale o sull'istanza VM.

  5. Esegui lo script di pre-elaborazione e caricamento.

Verifica i requisiti dello spazio

Che tu scarichi il set di dati sulla tua macchina locale o su un'istanza VM, hai bisogno di circa 300 GB di spazio disponibile nella destinazione del download.

L'allocazione predefinita del disco per una VM TPU è 100 GB. Poiché il download sulla VM TPU richiede 300 GB, se intendi scaricare sulla tua istanza VM TPU, dovrai aggiungere un disco permanente e con 200 GB di spazio aggiuntivo per completare il download. Su una VM TPU, puoi verificare lo spazio di archiviazione disponibile con il comando df -ha.

Quando aggiungi un disco permanente, assicurati di:

  • Imposta Durante l'eliminazione di un'istanza su Elimina disco per assicurarti che il disco venga eliminato quando elimini la VM.
  • Prendi nota del percorso del nuovo disco. Ad esempio: /mnt/disks/mnt-dir.

Configura le directory di destinazione

Sulla macchina locale o sull'istanza VM, configura la struttura di directory per archiviare i dati scaricati.

  1. Crea una directory, ad esempio imagenet, nella home directory nella destinazione del download (macchina locale o VM TPU).

    mkdir imagenet
    
  2. In questa directory, crea due directory secondarie: train e validation.

    mkdir imagenet/train
    mkdir imagenet/validation
    
  3. Esporta la directory imagenet come IMAGENET_HOME.

    export IMAGENET_HOME=~/imagenet
    

Registra e richiedi l'autorizzazione per scaricare il set di dati

Registrati sul sito web di Imagenet. Non puoi scaricare il set di dati finché ImageNet non conferma la tua registrazione e non ti invia un'email di conferma. Se non ricevi l'email di conferma entro un paio di giorni, contatta l'assistenza di ImageNet per capire perché la tua registrazione non è stata confermata. Una volta confermata la registrazione, puoi scaricare il set di dati. I tutorial Cloud TPU che utilizzano il set di dati ImageNet utilizzano le immagini della sfida ImageNet Large Scale Visual Recognition Challenge 2012 (ILSVRC2012).

Scarica il set di dati ImageNet

  1. Dal sito di download di LSRVC 2012, vai alla sezione Immagini nella pagina e fai clic con il tasto destro del mouse su "Addestramento delle immagini (attività 1 e 2)". L'URL per scaricare la parte più ampia del set di addestramento. Salva l'URL.

    Fai clic con il pulsante destro del mouse su "Immagini di addestramento (attività 3)" per ottenere l'URL per il secondo set di addestramento. Salva l'URL.

    Fai clic con il tasto destro del mouse su "Immagini di convalida (tutte le attività)" per ottenere l'URL del set di dati di convalida. Salva l'URL.

    Se scarichi i file ImageNet sulla tua macchina locale, devi copiare le directory sul tuo computer locale nella directory $IMAGENET_HOME corrispondente sulla tua istanza VM. La copia del set di dati ImageNet dall'host locale all'istanza VM richiede circa 13 ore.

    Prima di copiare il set di dati ImageNet nella VM TPU, devi identificare il nome dell'istanza VM TPU. Per farlo, connettiti alla VM TPU utilizzando SSH. Il nome dell'istanza VM viene visualizzato nel prompt dei comandi che segue il simbolo @.

    Utilizza il comando seguente per copiare i file in ~/imagenet sulla tua macchina locale in $IMAGENET_HOME sulla tua VM.

    gcloud compute scp --recurse $IMAGENET_HOME username@vm-instance-name:~/imagenet
    
  2. Da $IMAGENET_HOME, scarica i file "Immagini di addestramento (attività 1 e 2)" utilizzando l'URL salvato.

    Il file "Immagini di addestramento (Attività 1 e 2)" è il grande set di addestramento. È pari a 138 GB e, se esegui il download sulla VM TPU utilizzando Cloud Shell, il download richiede circa 40 ore. Se Cloud Shell perde la connessione alla VM, puoi anteporre nohup al comando o utilizzare screen.

    cd $IMAGENET_HOME \
    nohup wget https://image-net.org/data/ILSVRC/2012/ILSVRC2012_img_train.tar
    

    Sostituisci l'URL con quello che hai salvato in precedenza per "Immagini di addestramento (attività 1 e 2)", poiché l'URL potrebbe essere cambiato.

  3. Estrai le singole directory di addestramento nella directory $IMAGENET_HOME/train utilizzando il seguente comando. L'estrazione richiede da 1 a 3 ore.

    tar xf $IMAGENET_HOME/ILSVRC2012_img_train.tar -C $IMAGENET_HOME/train
    

    Estrai i singoli file tar di addestramento che si trovano nella directory $IMAGENET_HOME/train, come mostrato nello script seguente:

    cd `$IMAGENET_HOME/train`
    
    for f in *.tar; do
     d=`basename $f .tar`
     mkdir $d
     tar xf $f -C $d
    done
    

    Elimina i file tar dopo averli estratti per liberare spazio su disco.

  4. Da $IMAGENET_HOME, scarica i file "Immagini di addestramento (attività 3)" utilizzando l'URL salvato.

    Il file "Addestramento immagini (attività 3)" ha dimensioni pari a 728 MB e richiede solo pochi minuti per il download, quindi non è necessario prendere precauzioni contro la perdita della connessione Cloud Shell.

    wget https://image-net.org/data/ILSVRC/2012/ILSVRC2012_img_train_t3.tar
    

    Sostituisci l'URL con quello che hai salvato in precedenza per "Immagini di addestramento (attività 3)", perché potrebbe essere cambiato.

  5. Estrai le singole directory di addestramento nella directory $IMAGENET_HOME/train utilizzando il seguente comando.

    tar xf $IMAGENET_HOME/ILSVRC2012_img_train_t3.tar -C $IMAGENET_HOME/train
    

    Estrai i singoli file tar di addestramento che si trovano nella directory $IMAGENET_HOME/train, come mostrato nello script seguente:

    cd `$IMAGENET_HOME/train`
    
    for f in *.tar; do
     d=`basename $f .tar`
     mkdir $d
     tar xf $f -C $d
    done
    

    Elimina i file tar dopo averli estratti per liberare spazio su disco.

  6. Da $IMAGENET_HOME, scarica i file "Immagini di convalida (tutte le attività)" utilizzando l'URL salvato.

    Quando scarichi il file "Immagini di convalida (tutte le attività)", Cloud Shell potrebbe disconnettersi. Puoi utilizzare nohup o screen per impedire la disconnessione di Cloud Shell.

    wget https://image-net.org/data/ILSVRC/2012/ILSVRC2012_img_val.tar
    

    Sostituisci l'URL con quello che hai salvato in precedenza per "Immagini di convalida (tutte le attività)", perché l'URL potrebbe essere cambiato.

    Il download richiede circa 30 minuti.

  7. Estrai i singoli file di convalida nella directory $IMAGENET_HOME/validation utilizzando il seguente comando.

    tar xf $IMAGENET_HOME/ILSVRC2012_img_val.tar -C $IMAGENET_HOME/validation
    

    Se hai scaricato i file di convalida sulla macchina locale, devi copiare la directory $IMAGENET_HOME/validation sulla macchina locale nella directory $IMAGENET_HOME/validation sulla tua istanza VM. Questa operazione di copia richiede circa 30 minuti.

  8. Scarica il file delle etichette.

    wget -O $IMAGENET_HOME/synset_labels.txt \
    https://raw.githubusercontent.com/tensorflow/models/master/research/slim/datasets/imagenet_2012_validation_synset_labels.txt
    

    Se hai scaricato il file delle etichette sulla tua macchina locale, devi copiarlo nella directory $IMAGENET_HOME sulla macchina locale in $IMAGENET_HOME sulla tua istanza VM. Questa operazione di copia richiede alcuni secondi.

    I nomi delle sottodirectory di addestramento (ad esempio n03062245) sono "ID WordNet" (wnid). L'API ImageNet mostra la mappatura degli ID WordNet alle etichette di convalida associate nel file synset_labels.txt. In questo contesto, un sintetizzatore è un gruppo di immagini visivamente simile.

Elabora il set di dati Imagenet e, facoltativamente, caricalo su Cloud Storage

  1. Scarica lo script imagenet_to_gcs.py da GitHub:

    wget https://raw.githubusercontent.com/tensorflow/tpu/master/tools/datasets/imagenet_to_gcs.py
    
  2. Se stai caricando il set di dati in Cloud Storage, specifica la posizione del bucket di archiviazione per caricare il set di dati ImageNet:

    export STORAGE_BUCKET=gs://bucket-name
    
  3. Se carichi il set di dati sulla tua macchina locale o VM, specifica una directory di dati in cui contenere il set di dati:

    (vm)$ export DATA_DIR=$IMAGENET_HOME/dataset-directory
    
  4. Installa le seguenti librerie sulla tua macchina o in un ambiente virtuale:

    pip3 install google-cloud-storage
    pip3 install tensorflow
    
  5. Esegui lo script per pre-elaborare il set di dati non elaborato come TFRecords e caricalo in Cloud Storage utilizzando il seguente comando:

     python3 imagenet_to_gcs.py \
      --project=$PROJECT \
      --gcs_output_path=$STORAGE_BUCKET  \
      --raw_data_dir=$IMAGENET_HOME \
      --local_scratch_dir=$IMAGENET_HOME/tf_records
    

Lo script genera un insieme di directory (sia per l'addestramento che per la convalida) del modulo:

${DATA_DIR}/train-00000-of-01024
${DATA_DIR}/train-00001-of-01024
...
${DATA_DIR}/train-01023-of-01024

e

${DATA_DIR}/validation-00000-of-00128
${DATA_DIR}/validation-00001-of-00128
...
${DATA_DIR}/validation-00127-of-00128

Dopo che i dati sono stati caricati nel bucket Cloud, esegui il modello e imposta --data_dir=${DATA_DIR}.