Mendownload, melakukan pra-pemrosesan, dan mengupload set data ImageNet

Dokumen ini menjelaskan cara mendownload, melakukan pra-pemrosesan, dan mengupload set data ImageNet untuk digunakan dengan arsitektur VM Cloud TPU.

ImageNet adalah database gambar. Gambar dalam database disusun dalam hierarki, dengan setiap node hierarki digambarkan oleh ratusan dan ribuan gambar.

Ukuran database ImageNet berarti dapat memerlukan waktu yang cukup lama untuk melatih model. Alternatifnya adalah menggunakan versi demonstrasi set data, yang disebut fake_imagenet. Versi demonstrasi ini memungkinkan Anda menguji model, sekaligus mengurangi persyaratan penyimpanan dan waktu yang terkait dengan penggunaan database ImageNet lengkap.

Melakukan pra-pemrosesan set data ImageNet lengkap

Set data ImageNet terdiri dari tiga bagian, data pelatihan, data validasi, dan label gambar.

Data pelatihan berisi 1.000 kategori dan 1,2 juta gambar, yang dikemas untuk didownload. Data validasi dan pengujian tidak terdapat dalam data pelatihan ImageNet (duplikat telah dihapus).

Data validasi dan pengujian terdiri dari 150.000 foto, yang dikumpulkan dari Flickr dan mesin telusur lainnya, yang diberi label secara manual dengan keberadaan atau tidak adanya 1.000 kategori objek. 1.000 kategori objek berisi node internal dan node daun ImageNet, tetapi tidak tumpang-tindih satu sama lain. Subset acak dari 50.000 gambar dengan label telah dirilis sebagai data validasi bersama dengan daftar 1.000 kategori. Gambar yang tersisa digunakan untuk evaluasi dan telah dirilis tanpa label.

Langkah-langkah untuk melakukan pra-pemrosesan set data ImageNet lengkap

Ada lima langkah untuk menyiapkan set data ImageNet lengkap agar dapat digunakan oleh model machine learning:

  1. Pastikan Anda memiliki ruang di target download.
  2. Siapkan direktori target.
  3. Daftar di situs ImageNet dan minta izin download permission.
  4. Unduh set data ke disk lokal atau instance VM.

  5. Jalankan skrip pra-pemrosesan dan upload.

Memverifikasi persyaratan ruang

Baik Anda mendownload set data ke komputer lokal maupun ke instance VM, Anda memerlukan sekitar 300 GiB ruang yang tersedia di target download.

Alokasi disk default untuk VM TPU adalah 10 GB. Karena download ke VM TPU Anda memerlukan 300 GiB, jika Anda akan mendownload ke instance VM TPU, Anda harus menambahkan volume penyimpanan blok yang tahan lama dengan ruang tambahan untuk menyelesaikan download atau meningkatkan ukuran disk booting di TPU. Di VM TPU, Anda dapat memeriksa penyimpanan yang tersedia dengan perintah df -ha. Untuk mengetahui informasi selengkapnya tentang mengubah ukuran disk, lihat Mengubah ukuran dan performa yang disediakan dari volume Hyperdisk dan Mengubah ukuran volume Persistent Disk.

Saat menambahkan penyimpanan blok yang tahan lama, pastikan untuk mencatat direktori tempat Anda memasang disk. Misalnya: /mnt/disks/mnt-dir.

Menyiapkan direktori target

Di komputer lokal atau instance VM, siapkan struktur direktori untuk menyimpan data yang didownload.

  1. Ubah ke direktori tempat Anda ingin mendownload data. Jika Anda menggunakan persistent disk, ganti DATASET_ROOT_DIR dengan direktori tempat disk Anda dipasang, misalnya, /mnt/disks/mnt-dir:

    cd DATASET_ROOT_DIR
  2. Buat direktori, misalnya, imagenet, di target download (komputer lokal atau VM TPU).

    mkdir imagenet
    
  3. Di direktori ini, buat dua subdirektori: train dan validation.

    mkdir imagenet/train
    mkdir imagenet/validation
    
  4. Ekspor direktori imagenet sebagai IMAGENET_HOME.

    export IMAGENET_HOME=DATASET_ROOT_DIR/imagenet
    sudo chown ${USER} ${IMAGENET_HOME}

Mendaftar dan meminta izin untuk mendownload set data

Daftar di situs ImageNet. Anda tidak dapat mendownload set data hingga ImageNet mengonfirmasi pendaftaran Anda dan mengirimkan email konfirmasi. Jika Anda tidak menerima email konfirmasi dalam beberapa hari, hubungi dukungan ImageNet untuk mengetahui alasan pendaftaran Anda belum dikonfirmasi. Setelah pendaftaran Anda dikonfirmasi, Anda dapat mendownload set data. Tutorial Cloud TPU yang menggunakan set data ImageNet menggunakan gambar dari ImageNet Large Scale Visual Recognition Challenge 2012 (ILSVRC2012).

Mendownload set data ImageNet

  1. Dari situs download LSRVC 2012, buka bagian Gambar di halaman dan klik kanan "Gambar pelatihan (Tugas 1 & 2)". URL untuk mendownload bagian terbesar dari set pelatihan. Simpan URL.

    Klik kanan "Gambar pelatihan (Tugas 3)" untuk mendapatkan URL set pelatihan kedua. Simpan URL.

    Klik kanan "Gambar validasi (semua tugas)" untuk mendapatkan URL set data validasi. Simpan URL.

    Jika Anda mendownload file ImageNet ke komputer lokal, Anda harus menyalin direktori di komputer lokal ke direktori $IMAGENET_HOME yang sesuai di instance VM. Menyalin set data ImageNet dari host lokal ke instance VM memerlukan waktu sekitar 13 jam.

    Sebelum menyalin set data ImageNet ke VM TPU, Anda harus mengidentifikasi nama instance VM TPU. Untuk melakukannya, hubungkan ke VM TPU menggunakan SSH. Nama instance VM ditampilkan di command prompt setelah simbol @.

    Gunakan perintah berikut untuk menyalin file di bagian ~/imagenet di komputer lokal ke $IMAGENET_HOME di VM.

    gcloud compute scp --recurse $IMAGENET_HOME USERNAME@VM_INSTANCE_NAME:~/imagenet
  2. Dari $IMAGENET_HOME, download file "Gambar pelatihan (Tugas 1 & 2)" menggunakan URL yang disimpan.

    File "Gambar pelatihan (Tugas 1 & 2)" adalah set pelatihan besar. Ukurannya 138 GiB, dan jika Anda mendownload ke VM TPU menggunakan Cloud Shell, download akan memerlukan waktu sekitar 40 jam. Jika Cloud Shell kehilangan koneksinya ke VM, Anda dapat menambahkan nohup ke perintah atau menggunakan layar.

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

    Ganti URL dengan URL yang sebelumnya Anda simpan untuk "Gambar pelatihan (Tugas 1 & 2)", karena URL mungkin telah berubah.

  3. Ekstrak direktori pelatihan individual ke direktori $IMAGENET_HOME/train menggunakan perintah berikut. Ekstraksi memerlukan waktu antara 1 hingga 3 jam.

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

    Ekstrak file tar pelatihan individual yang terletak di direktori $IMAGENET_HOME/train, seperti yang ditunjukkan dalam skrip berikut:

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

    Hapus file tar setelah Anda mengekstraknya untuk mengosongkan ruang disk.

  4. Dari $IMAGENET_HOME, download file "Gambar pelatihan (Tugas 3)" menggunakan URL yang disimpan.

    File "Gambar pelatihan (Tugas 3)" berukuran 728 MB dan hanya memerlukan waktu beberapa menit untuk didownload, sehingga Anda tidak perlu mengambil tindakan pencegahan agar tidak kehilangan koneksi Cloud Shell.

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

    Ganti URL dengan URL yang sebelumnya Anda simpan untuk "Gambar pelatihan (Tugas 3)", karena URL mungkin telah berubah.

  5. Ekstrak direktori pelatihan individual ke direktori $IMAGENET_HOME/train menggunakan perintah berikut.

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

    Ekstrak file tar pelatihan individual yang terletak di direktori $IMAGENET_HOME/train, seperti yang ditunjukkan dalam skrip berikut:

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

    Hapus file tar setelah Anda mengekstraknya untuk mengosongkan ruang disk.

  6. Dari $IMAGENET_HOME, download file "Gambar validasi (semua tugas)" menggunakan URL yang disimpan.

    Saat mendownload file "Gambar validasi (semua tugas)", Cloud Shell Anda mungkin terputus. Anda dapat menggunakan nohup atau layar untuk mencegah Cloud Shell terputus.

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

    Ganti URL dengan URL yang sebelumnya Anda simpan untuk "Gambar validasi (semua tugas)", karena URL mungkin telah berubah.

    Download ini memerlukan waktu sekitar 30 menit.

  7. Ekstrak file validasi individual ke direktori $IMAGENET_HOME/validation menggunakan perintah berikut.

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

    Jika Anda mendownload file validasi ke komputer lokal, Anda harus menyalin direktori $IMAGENET_HOME/validation di komputer lokal ke direktori $IMAGENET_HOME/validation di instance VM. Operasi penyalinan ini memerlukan waktu sekitar 30 menit.

  8. Download file label.

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

    Jika Anda mendownload file label ke komputer lokal, Anda harus menyalinnya ke direktori $IMAGENET_HOME di komputer lokal ke $IMAGENET_HOME di instance VM. Operasi penyalinan ini memerlukan waktu beberapa detik.

    Nama subdirektori pelatihan (misalnya, n03062245) adalah "ID WordNet" (wnid). ImageNet API menampilkan pemetaan ID WordNet ke label validasi terkait dalam file synset_labels.txt. Synset dalam konteks ini adalah grup gambar yang mirip secara visual.

Memproses set data Imagenet dan, secara opsional, mengupload ke Cloud Storage

  1. Download skrip imagenet_to_gcs.py dari GitHub:

    wget https://raw.githubusercontent.com/tensorflow/tpu/master/tools/datasets/imagenet_to_gcs.py
  2. Jika Anda mengupload set data ke Cloud Storage:

    1. Gunakan bucket yang ada atau buat bucket baru dengan mengikuti petunjuk di Membuat bucket.

    2. Tentukan lokasi bucket penyimpanan untuk mengupload set data ImageNet:

      export STORAGE_BUCKET=gs://BUCKET_NAME
  3. Jika Anda mengupload set data ke komputer lokal atau VM, tentukan direktori data untuk menyimpan set data:

    (vm)$ export DATA_DIR=$IMAGENET_HOME/DATASET_DIRECTORY
  4. Instal library berikut di komputer Anda atau di lingkungan virtual:

    pip3 install google-cloud-storage
    pip3 install tensorflow
    
  5. Jalankan skrip untuk melakukan pra-pemrosesan set data mentah sebagai TFRecords dan menguploadnya ke Cloud Storage menggunakan perintah berikut:

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

Skrip ini menghasilkan sekumpulan direktori (untuk pelatihan dan validasi) dalam bentuk:

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

dan

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

Setelah data diupload ke bucket Cloud, jalankan model dan tetapkan --data_dir=${DATA_DIR}.