Scarica, pre-elabora e carica il set di dati ImageNet
Questo documento descrive come scaricare, pre-elaborare e caricare ImageNet da utilizzare con l'architettura VM di Cloud TPU.
ImageNet è un database di immagini. Le immagini nel database sono organizzate in nella gerarchia, ogni nodo della gerarchia è rappresentato da centinaia e migliaia di in formato Docker.Le dimensioni del database ImageNet fanno sì che l'addestramento di un modello possa richiedere molto tempo. Un'alternativa è utilizzare una versione di dimostrazione del set di dati, denominata fake_imagenet. Questa versione di dimostrazione ti consente di testare il modello, riducendo al contempo i requisiti di spazio di archiviazione e tempo associati all'utilizzo del database ImageNet completo.
Pre-elaborazione del set di dati ImageNet completo
Il set di dati ImageNet è composto da tre parti: dati di addestramento, dati di convalida e etichette delle immagini.
I dati di addestramento contengono 1000 categorie e 1,2 milioni di immagini, pacchettizzate per il download. I dati di convalida e test non sono contenuti all'interno di ImageNet di addestramento (i duplicati sono stati rimossi).
I dati di convalida e di test sono costituiti da 150.000 fotografie raccolte da Flickr e altri motori di ricerca, etichettate manualmente 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. È stato creato un sottoinsieme casuale di 50.000 immagini con etichette pubblicati come dati di convalida insieme a un elenco di 1000 categorie. La le immagini rimanenti vengono utilizzate per la valutazione e sono state rilasciate senza etichette.
Procedura per pre-elaborare il set di dati ImageNet completo
Per preparare il set di dati ImageNet completo per l'utilizzo da parte di un modello di machine learning, sono necessari cinque passaggi:
- Verifica di avere spazio nella destinazione dei download.
- Configura le directory di destinazione.
- Registrati sul sito di ImageNet e richiedi il download autorizzazione.
Verifica i requisiti di spazio
Indipendentemente dal fatto 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 sulla destinazione di download.
L'allocazione predefinita del disco per una VM TPU è di 100 GB. Dal download sul tuo
La VM TPU richiede 300 GB. Se effettuerai il download 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 controllare
lo spazio di archiviazione disponibile con il comando df -ha
.
Quando aggiungi un disco permanente, assicurati di:
- Imposta Quando si elimina un'istanza su Elimina disco per assicurarti che il disco sia quando elimini la VM.
- Prendi nota del percorso del nuovo disco. Ad esempio:
/mnt/disks/mnt-dir
.
Configura le directory di destinazione
Sulla tua macchina locale o sull'istanza VM, configura la struttura di directory per archiviare i dati scaricati.
Crea una directory, ad esempio
imagenet
, nella tua home directory su la destinazione del download (macchina locale o VM TPU).mkdir imagenet
In questa directory, crea due directory secondarie:
train
evalidation
.mkdir imagenet/train mkdir imagenet/validation
Esporta la directory
imagenet
comeIMAGENET_HOME
.export IMAGENET_HOME=~/imagenet
Registra e richiedi l'autorizzazione per scaricare il set di dati
Registrati sul sito web di ImageNet. Impossibile scaricare fino a quando ImageNet non conferma la registrazione e ti invia un l'email di conferma. Se non ricevi l'email di conferma entro un paio di giorni, contatta l'assistenza di ImageNet per scoprire perché le tue la registrazione non è stata confermata. Una volta confermata la registrazione, puoi scaricare il set di dati. I tutorial di Cloud TPU che utilizzano il set di dati ImageNet utilizzano le immagini della ImageNet Large Scale Visual Recognition Challenge 2012 (ILSVRC2012).
Scarica il set di dati ImageNet
Nel sito di download di LSRVC 2012, vai alla sezione Immagini della pagina e fai clic con il tasto destro del mouse su "Immagini di addestramento (attività 1 e 2)". L'URL per scaricare la maggior parte del set di addestramento. Salva l'URL.
Fai clic con il tasto destro del mouse su "Immagini di addestramento (attività 3)" per ottenere l'URL del secondo insieme 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 sulla tua macchina locale nella directory
$IMAGENET_HOME
corrispondente sull'istanza VM. Copia del set di dati ImageNet dall'host locale alla tua 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 tramite SSH. Il nome dell'istanza VM viene mostrato nel prompt dei comandi dopo
@
.Utilizza il seguente comando per copiare i file in ~/imagenet sul tuo dalla macchina virtuale a
$IMAGENET_HOME
sulla VM.gcloud compute scp --recurse $IMAGENET_HOME username@vm-instance-name:~/imagenet
Da
$IMAGENET_HOME
, scarica le "Immagini di addestramento (attività 1 e 2)" file utilizzando l'URL salvato.Il file "Immagini di addestramento (Attività 1 e 2)" è il set di addestramento di grandi dimensioni. È 138 GB, inoltre, se esegui il download sulla VM TPU utilizzando Cloud Shell, il download richiede circa 40 ore. Se Cloud Shell perde alla VM, puoi anteporre
nohup
al comando o utilizzare schermo.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.
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.
Da
$IMAGENET_HOME
, scarica i file "Immagini di addestramento (attività 3)" utilizzando l'URL salvato.La sezione "Immagini di addestramento (attività 3)" è di 728 MB e richiede pochi minuti per il download, in modo da non dover prendere precauzioni per evitare di perdere della connessione a 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)", in quanto potrebbe essere cambiato.
Estrai le singole directory di addestramento in
$IMAGENET_HOME/train
utilizzando il comando seguente.tar xf $IMAGENET_HOME/ILSVRC2012_img_train_t3.tar -C $IMAGENET_HOME/train
Estrai i singoli file tar di addestramento 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.
Da
$IMAGENET_HOME
, scarica i file "Immagini di convalida (tutte le attività)" utilizzando l'URL salvato.Quando scarichi "Immagini di convalida (tutte le attività)" il tuo 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 salvato in precedenza per "Immagini di convalida" (tutte le attività)", poiché l'URL potrebbe essere cambiato.
Il download richiede circa 30 minuti.
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 tua macchina locale, devi copiare la directory
$IMAGENET_HOME/validation
sulla tua macchina locale nella directory$IMAGENET_HOME/validation
dell'istanza VM. Questa copia richiede circa 30 minuti.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 sul tuo computer locale, dovrai copiarlo alla directory
$IMAGENET_HOME
sulla macchina locale per$IMAGENET_HOME
sulla tua istanza VM. Questa operazione di copia richiede alcuni secondi.I nomi delle sottodirectory di addestramento (ad es. n03062245) sono "ID WordNet" (wnid). L'API ImageNet mostra la mappatura degli ID WordNet alle etichette di convalida associate in il file
synset_labels.txt
. In questo contesto, un sinonimo è un gruppo di immagini visivamente simili.
Elabora il set di dati ImageNet e, facoltativamente, caricalo su Cloud Storage
Scarica lo script
imagenet_to_gcs.py
da GitHub:wget https://raw.githubusercontent.com/tensorflow/tpu/master/tools/datasets/imagenet_to_gcs.py
Se carichi il set di dati su Cloud Storage, specifica la posizione del bucket di archiviazione per caricare il set di dati ImageNet:
export STORAGE_BUCKET=gs://bucket-name
Se carichi il set di dati sulla tua macchina locale o sulla VM, specifica una directory di dati per contenerlo:
(vm)$ export DATA_DIR=$IMAGENET_HOME/dataset-directory
Installa le librerie seguenti sulla macchina o in un ambiente virtuale:
pip3 install google-cloud-storage pip3 install tensorflow
Esegui lo script per pre-elaborare il set di dati non elaborato come TFRecord e caricarlo su 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) il 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 aver caricato i dati nel bucket Cloud, esegui il modello e imposta
--data_dir=${DATA_DIR}
.