Mendownload, memproses sebelumnya, dan mengupload set data ImageNet

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

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

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

Pra-pemrosesan seluruh set data ImageNet

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 dimuat 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 dengan adanya atau tidaknya 1.000 kategori objek. Kategori objek 1.000 berisi node internal dan node daun ImageNet, tetapi tidak tumpang-tindih satu sama lain. Subset acak berisi 50.000 gambar dengan label telah dirilis sebagai data validasi beserta daftar 1.000 kategori tersebut. Gambar yang tersisa akan digunakan untuk evaluasi dan telah dirilis tanpa label.

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

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

  1. Pastikan ada ruang penyimpanan pada target download.
  2. Menyiapkan direktori target.
  3. Daftar di situs ImageNet dan minta izin download.
  4. Download set data ke disk lokal atau instance VM.

  5. Jalankan skrip pra-pemrosesan dan upload.

Memverifikasi persyaratan ruang

Baik mendownload set data ke komputer lokal atau ke instance VM, Anda memerlukan sekitar 300 GB ruang yang tersedia pada target download.

Alokasi disk default untuk VM TPU adalah 100 GB. Karena download ke VM TPU Anda memerlukan kapasitas 300 GB, jika akan mendownload ke instance VM TPU, Anda harus menambahkan persistent disk dan memiliki ruang tambahan sebesar 200 GB untuk menyelesaikan download. Di VM TPU, Anda dapat memeriksa penyimpanan yang tersedia dengan perintah df -ha.

Saat menambahkan persistent disk, pastikan untuk:

  • Tetapkan Saat menghapus instance ke Hapus disk untuk memastikan bahwa disk telah dihapus saat Anda menghapus VM.
  • Catat jalur ke disk baru Anda. Misalnya: /mnt/disks/mnt-dir.

Menyiapkan direktori target

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

  1. Buat direktori, misalnya, imagenet, di bagian direktori utama Anda pada target download (mesin lokal atau VM TPU).

    mkdir imagenet
    
  2. Pada direktori ini, buat dua sub direktori: train dan validation.

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

    export IMAGENET_HOME=~/imagenet

Mendaftar dan meminta izin untuk mendownload set data

Daftar di situs Imagenet. Anda tidak dapat mendownload set data hingga ImageNet mengonfirmasi pendaftaran dan mengirimkan email konfirmasi. Jika Anda tidak mendapatkan email konfirmasi dalam beberapa hari, hubungi dukungan ImageNet untuk mengetahui alasan pendaftaran Anda belum dikonfirmasi. Setelah pendaftaran dikonfirmasi, Anda dapat mengunduh {i>dataset<i}. Tutorial Cloud TPU yang menggunakan set data ImageNet menggunakan gambar dari Tantangan Pengenalan Visual Skala Besar ImageNet 2012 (ILSVRC2012).

Mengunduh {i>dataset<i} ImageNet

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

    Klik kanan "Pelatihan image (Tugas 3)" guna mendapatkan URL untuk set pelatihan kedua. Simpan URL.

    Klik kanan "Validation images (all task)" guna mendapatkan URL untuk set data validasi. Simpan URL.

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

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

    Gunakan perintah berikut untuk menyalin file pada ~/imagenet di mesin lokal Anda 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 yang besar. Ukuran ini 138 GB, dan jika Anda mendownload ke VM TPU menggunakan Cloud Shell, download memerlukan waktu sekitar 40 jam. Jika Cloud Shell kehilangan koneksinya ke VM, Anda dapat menambahkan nohup ke perintah atau menggunakan screen.

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

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

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

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

    Ekstrak file tar pelatihan individual yang berada 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 {i>tar<i} setelah Anda mengekstraknya untuk mengosongkan ruang {i>disk<i}.

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

    File "Pelatihan image (Tugas 3)" berukuran 728 MB dan hanya memerlukan waktu beberapa menit untuk didownload. Jadi, Anda tidak perlu melakukan 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 Anda simpan sebelumnya untuk "Gambar pelatihan (Tugas 3)", karena URL mungkin telah berubah.

  5. Ekstrak setiap direktori pelatihan 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 berada 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 {i>tar<i} setelah Anda mengekstraknya untuk mengosongkan ruang {i>disk<i}.

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

    Saat mendownload file "Validasi image (semua tugas)", Cloud Shell Anda dapat terputus. Anda dapat menggunakan nohup atau layar agar koneksi Cloud Shell tidak terputus.

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

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

    Download ini memerlukan waktu sekitar 30 menit.

  7. Ekstrak setiap file validasi 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 mesin lokal, Anda harus menyalin direktori $IMAGENET_HOME/validation di mesin lokal Anda ke direktori $IMAGENET_HOME/validation pada instance VM Anda. 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 sudah 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 menunjukkan pemetaan ID WordNet ke label validasi terkaitnya di file synset_labels.txt. Sinset dalam konteks ini adalah kelompok gambar yang mirip secara visual.

Memproses set data Imagenet dan, secara opsional, menguploadnya 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, tentukan lokasi bucket penyimpanan untuk mengupload set data ImageNet:

    export STORAGE_BUCKET=gs://bucket-name
  3. Jika Anda mengupload set data ke mesin 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 pada set data mentah sebagai TFRecords, lalu upload 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 serangkaian 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 Anda dan tetapkan --data_dir=${DATA_DIR}.