Pelatihan menggunakan algoritma klasifikasi gambar bawaan

Pelatihan dengan algoritma bawaan di AI Platform Training memungkinkan Anda mengirimkan set data dan melatih model tanpa menulis kode pelatihan apa pun. Halaman ini menjelaskan cara kerja algoritma klasifikasi gambar bawaan, dan cara menggunakannya.

Ringkasan

Algoritma klasifikasi gambar bawaan menggunakan set data pelatihan dan validasi Anda untuk melatih model secara terus-menerus, lalu menghasilkan output SavedModel yang paling akurat yang dihasilkan selama tugas pelatihan. Anda juga dapat menggunakan penyesuaian hyperparameter untuk mencapai akurasi model terbaik. SavedModel yang diekspor dapat digunakan secara langsung untuk prediksi, baik secara lokal maupun di-deploy ke AI Platform Prediction untuk layanan produksi.

Batasan

Algoritme bawaan gambar mendukung pelatihan dengan satu CPU, GPU, atau TPU. SaveModel yang dihasilkan kompatibel dengan penayangan di CPU dan GPU.

Fitur berikut tidak didukung untuk pelatihan dengan algoritma klasifikasi gambar bawaan:

Jenis mesin yang didukung

Tingkat skala dan jenis mesin AI Platform Training berikut didukung:

  • Tingkat skala BASIC
  • Tingkat skala BASIC_TPU
  • Tingkat skala CUSTOM dengan salah satu jenis mesin Compute Engine yang didukung oleh AI Platform Training.
  • Tingkat skala CUSTOM dengan salah satu jenis mesin lama berikut:
    • standard
    • large_model
    • complex_model_s
    • complex_model_m
    • complex_model_l
    • standard_gpu
    • standard_p100
    • standard_v100
    • large_model_v100
    • complex_model_m_gpu
    • complex_model_l_gpu
    • complex_model_m_p100
    • complex_model_m_v100
    • complex_model_l_v100
    • TPU_V2 (8 core)

Memberi otorisasi Cloud TPU untuk mengakses project Anda

Memformat data input untuk pelatihan

Algoritma klasifikasi gambar bawaan mengharuskan data input Anda diformat sebagai tf.Examples, yang disimpan dalam file TFRecord. Struktur data tf.Example dan format file TFRecord dirancang untuk pembacaan data yang efisien dengan TensorFlow.

Format TFRecord adalah format sederhana untuk menyimpan urutan data biner. Dalam hal ini, semua data berisi representasi biner gambar. Setiap gambar, beserta label class-nya, direpresentasikan sebagai tf.Example. Anda dapat menyimpan banyak tf.Example ke satu file TFRecord. Anda juga dapat membuat shard set data besar di antara beberapa file TFRecord.

Pelajari TFRecord dan tf.Example lebih lanjut.

Mengonversi gambar ke TFRecords

TensorFlow menyediakan skrip yang dapat Anda gunakan untuk mengonversi gambar dari format JPEG ke TFRecord.

Anda dapat menggunakan skrip jika:

  • Anda menyimpan gambar di Cloud Storage.
  • Anda memiliki file CSV dengan jalur ke gambar di Cloud Storage, dan label yang sesuai. Contoh:

    gs://cloud-ml-data/img/flower_photos/daisy/754296579_30a9ae018c_n.jpg,daisy
    gs://cloud-ml-data/img/flower_photos/dandelion/18089878729_907ed2c7cd_m.jpg,dandelion
    
  • Anda menyimpan file CSV ini di Cloud Storage.

Contoh berikut menunjukkan cara menjalankan skrip:

  1. Download skrip:

    curl https://raw.githubusercontent.com/tensorflow/tpu/master/tools/datasets/jpeg_to_tf_record.py > ./jpeg_to_tf_record.py
    
  2. Tetapkan variabel untuk project ID dan nama bucket, jika Anda belum melakukannya:

    PROJECT_ID="YOUR_PROJECT_ID"
    BUCKET_NAME="YOUR_BUCKET_NAME"
    
  3. Buat daftar semua kemungkinan label untuk set data Anda dalam file sementara:

    cat << EOF > /tmp/labels.txt
    daisy
    dandelion
    roses
    sunflowers
    tulips
    EOF
    
  4. Jalankan skrip menggunakan data bunga dari bucket cloud-ml-data publik dan daftar label Anda:

    python -m jpeg_to_tf_record.py \
           --train_csv gs://cloud-ml-data/img/flower_photos/train_set.csv \
           --validation_csv gs://cloud-ml-data/img/flower_photos/eval_set.csv \
           --labels_file /tmp/labels.txt \
           --project_id $PROJECT_ID \
           --output_dir gs://$BUCKET_NAME/flowers_as_tf_record
    

Memeriksa izin bucket Cloud Storage

Untuk menyimpan data, gunakan bucket Cloud Storage di project Google Cloud yang sama dengan yang Anda gunakan untuk menjalankan tugas AI Platform Training. Jika tidak, berikan akses Pelatihan AI Platform ke bucket Cloud Storage tempat data Anda disimpan.

Format input yang diperlukan

Untuk melatih dengan algoritma klasifikasi gambar bawaan, data gambar Anda harus terstruktur sebagai tf.Example yang menyertakan kolom berikut:

  • image/encoded adalah string gambar mentah.

  • image/class/label adalah satu label bilangan bulat untuk gambar yang sesuai. Beberapa label per instance tidak didukung.

    Kumpulan label bilangan bulat yang digunakan untuk set data Anda harus berupa urutan berturut-turut yang dimulai dari 1. Misalnya, jika set data Anda memiliki lima class, setiap label harus berupa bilangan bulat dalam interval [1, 5].

Contoh:

{
    'image/encoded': '<encoded image data>',
    'image/class/label': 2
}

Mendapatkan SavedModel terbaik sebagai output

Saat tugas pelatihan selesai, AI Platform Training akan menulis SavedModel TensorFlow ke bucket Cloud Storage yang Anda tentukan sebagai jobDir saat mengirimkan tugas. SavedModel ditulis ke jobDir/model. Misalnya, jika Anda mengirimkan tugas ke gs://your-bucket-name/your-job-dir, AI Platform Training akan menulis SavedModel ke gs://your-bucket-name/your-job-dir/model.

Jika Anda mengaktifkan penyesuaian hyperparameter, AI Platform Training akan menampilkan SavedModel TensorFlow dengan akurasi tertinggi yang dicapai selama proses pelatihan. Misalnya, jika Anda mengirimkan tugas pelatihan dengan 2.500 langkah pelatihan, dan akurasinya tertinggi pada 2.000 langkah, Anda akan mendapatkan TensorFlow SavedModel yang disimpan dari titik tertentu tersebut.

Setiap uji coba AI Platform Training menulis SavedModel TensorFlow dengan akurasi tertinggi ke direktorinya sendiri dalam bucket Cloud Storage Anda. Misalnya, gs://your-bucket-name/your-job-dir/model/trial_{trial_id}.

Tanda tangan SavedModel output adalah:

signature_def['serving_default']:
  The given SavedModel SignatureDef contains the following input(s):
    inputs['image_bytes'] tensor_info:
        dtype: DT_STRING
        shape: (-1)
        name: Placeholder:0
    inputs['key'] tensor_info:
        dtype: DT_STRING
        shape: (-1)
        name: key:0
  The given SavedModel SignatureDef contains the following output(s):
    outputs['classes'] tensor_info:
        dtype: DT_INT64
        shape: (-1)
        name: ArgMax:0
    outputs['key'] tensor_info:
        dtype: DT_STRING
        shape: (-1)
        name: Identity:0
    outputs['probabilities'] tensor_info:
        dtype: DT_FLOAT
        shape: (-1, 1000)
        name: softmax_tensor:0
  Method name is: tensorflow/serving/predict

Input:

  • image_bytes: Byte gambar mentah (tidak didekode). Ini sama dengan image/encoded yang disimpan di tf.Example.
  • key: ID nilai string input prediksi. Nilai ini diteruskan ke key output. Dalam prediksi batch, hal ini membantu memetakan output prediksi ke input.

Output:

  • classes: Label class (bilangan bulat) yang diprediksi, yang merupakan label dengan probabilitas tertinggi.
  • key: Kunci output.
  • probabilities: probability (antara 0 dan 1) untuk setiap class (berkisar dari 0 hingga num_classes).

Berikut adalah contoh input dan output prediksi:

prediction_input: {
  'image_bytes': 'some_raw_image_bytes',
  'key': ['test_key'])
}

prediction_output: {
  'probabilities': [[0.1, 0.3, 0.6]],
  'classes': [2],
  'key': ['test_key'],
}

Contoh konfigurasi

Jika mengirimkan tugas menggunakan gcloud, Anda harus membuat file config.yaml untuk jenis mesin dan spesifikasi penyesuaian hyperparameter. Jika menggunakan konsol Google Cloud, Anda tidak perlu membuat file ini. Pelajari cara mengirimkan tugas pelatihan.

Contoh file config.yaml berikut menunjukkan cara mengalokasikan resource TPU untuk tugas pelatihan Anda:

cat << EOF > config.yaml
trainingInput:
  # Use a cluster with many workers and a few parameter servers.
  scaleTier: CUSTOM
  masterType: n1-highmem-16
  masterConfig:
    imageUri: gcr.io/cloud-ml-algos/image_classification:latest
  workerType:  cloud_tpu
  workerConfig:
   imageUri: gcr.io/cloud-ml-algos/image_classification:latest
   acceleratorConfig:
     type: TPU_V2
     count: 8
  workerCount: 1
EOF

Selanjutnya, gunakan file config.yaml untuk mengirim tugas pelatihan.

Konfigurasi penyesuaian hyperparameter

Untuk menggunakan penyesuaian hyperparameter, sertakan konfigurasi penyesuaian hyperparameter Anda dalam file config.yaml yang sama dengan konfigurasi mesin Anda.

Anda dapat menemukan penjelasan singkat tentang setiap hyperparameter dalam konsol Google Cloud, dan penjelasan yang lebih komprehensif di referensi untuk algoritma klasifikasi gambar bawaan.

Contoh file config.yaml berikut menunjukkan cara mengalokasikan resource TPU untuk tugas pelatihan Anda, dan menyertakan konfigurasi penyesuaian hyperparameter:

cat << EOF > config.yaml
trainingInput:
  # Use a cluster with many workers and a few parameter servers.
  scaleTier: CUSTOM
  masterType: n1-highmem-16
  masterConfig:
    imageUri: gcr.io/cloud-ml-algos/image_classification:latest
  workerType:  cloud_tpu
  workerConfig:
   imageUri: gcr.io/cloud-ml-algos/image_classification:latest
   tpuTfVersion: 1.14
   acceleratorConfig:
     type: TPU_V2
     count: 8
  workerCount: 1
  # The following are hyperparameter configs.
  hyperparameters:
   goal: MAXIMIZE
   hyperparameterMetricTag: top_1_accuracy
   maxTrials: 6
   maxParallelTrials: 3
   enableTrialEarlyStopping: True
   params:
   - parameterName: initial_learning_rate
     type: DOUBLE
     minValue: 0.001
     maxValue: 0.2
     scaleType: UNIT_LOG_SCALE
EOF

Mengirim tugas pelatihan klasifikasi gambar

Bagian ini menjelaskan cara mengirimkan tugas pelatihan menggunakan algoritma klasifikasi gambar bawaan.

Konsol

Memilih algoritma

  1. Buka halaman AI Platform Training Jobs di konsol Google Cloud:

    Halaman Lowongan AI Platform Training

  2. Klik tombol Tugas pelatihan baru. Dari opsi yang ditampilkan di bawah, klik Pelatihan algoritme bawaan.

  3. Di halaman Create a new training job, pilih image classification, lalu klik Next.

Memilih data pelatihan dan validasi

  1. Di kotak drop-down pada bagian Data pelatihan, tentukan apakah Anda menggunakan satu file atau beberapa file:

    • Untuk satu file, biarkan "Gunakan satu file di bucket GCS" dipilih.
    • Untuk beberapa file, pilih "Gunakan beberapa file yang disimpan di satu direktori Cloud Storage".
  2. Untuk Directory path, klik Browse. Di panel kanan, klik nama bucket tempat Anda mengupload data pelatihan, lalu buka file Anda.

    Jika Anda memilih beberapa file, tempatkan karakter pengganti di Nama karakter pengganti. "Jalur GCS lengkap" akan ditampilkan di bawah untuk membantu Anda mengonfirmasi bahwa jalurnya sudah benar.

  3. Di kotak drop-down pada bagian Data validasi, tentukan apakah Anda menggunakan satu file atau beberapa file:

    • Untuk satu file, biarkan "Gunakan satu file di bucket GCS" dipilih.
    • Untuk beberapa file, pilih "Gunakan beberapa file yang disimpan di satu direktori Cloud Storage".
  4. Untuk Directory path, klik Browse. Di panel kanan, klik nama bucket tempat Anda mengupload data pelatihan, lalu buka file Anda.

    Jika Anda memilih beberapa file, tempatkan karakter pengganti di Nama karakter pengganti. "Jalur GCS lengkap" akan ditampilkan di bawah untuk membantu Anda mengonfirmasi bahwa jalurnya sudah benar.

  5. Di Output directory, masukkan jalur ke bucket Cloud Storage tempat Anda ingin AI Platform Training menyimpan output dari tugas pelatihan Anda. Anda dapat mengisi jalur bucket Cloud Storage secara langsung, atau klik tombol Browse untuk memilihnya.

    Agar semuanya tetap teratur, buat direktori baru dalam bucket Cloud Storage Anda untuk tugas pelatihan ini. Anda dapat melakukannya dalam panel Jelajahi.

    Klik Berikutnya.

Menetapkan argumen algoritma

Setiap argumen khusus algoritma menampilkan nilai default untuk tugas pelatihan tanpa penyesuaian hyperparameter. Jika mengaktifkan penyesuaian hyperparameter pada argumen algoritma, Anda harus menentukan nilai minimum dan maksimumnya.

Untuk mempelajari lebih lanjut semua argumen algoritma, ikuti link di konsol Google Cloud dan lihat referensi klasifikasi gambar bawaan untuk mengetahui detail selengkapnya.

Mengirim tugas

Pada tab Setelan tugas:

  1. Masukkan ID Tugas yang unik.
  2. Masukkan region yang tersedia (seperti "us-central1").
  3. Untuk memilih jenis mesin, pilih "CUSTOM" untuk scale tier. Bagian untuk menampilkan Spesifikasi cluster kustom.
    1. Pilih jenis mesin yang tersedia untuk Jenis master.
    2. Jika Anda ingin menggunakan TPU, tetapkan Jenis pekerja ke cloud_tpu. Jumlah pekerja ditetapkan secara default ke 1.

Klik Selesai untuk mengirimkan tugas pelatihan.

gcloud

  1. Tetapkan variabel lingkungan untuk tugas Anda:

    PROJECT_ID="YOUR_PROJECT_ID"
    BUCKET_NAME="YOUR_BUCKET_NAME"
    
    # Specify the same region where your data is stored
    REGION="YOUR_REGION"
    
    gcloud config set project $PROJECT_ID
    gcloud config set compute/region $REGION
    
    # Set Cloud Storage paths to your training and validation data
    # Include a wildcard if you select multiple files.
    TRAINING_DATA_PATH="gs://${BUCKET_NAME}/YOUR_DATA_DIRECTORY/train-*.tfrecord"
    VALIDATION_DATA_PATH="gs://${BUCKET_NAME}/YOUR_DATA_DIRECTORY/eval-*.tfrecord"
    
    # Specify the Docker container for your built-in algorithm selection
    IMAGE_URI="gcr.io/cloud-ml-algos/image_classification:latest"
    
    # Variables for constructing descriptive names for JOB_ID and JOB_DIR
    DATASET_NAME="flowers"
    ALGORITHM="image_classification"
    MODEL_NAME="${DATASET_NAME}_${ALGORITHM}"
    DATE="$(date '+%Y%m%d_%H%M%S')"
    
    # Specify an ID for this job
    JOB_ID="${MODEL_NAME}_${DATE}"
    
    # Specify the directory where you want your training outputs to be stored
    JOB_DIR="gs://${BUCKET_NAME}/algorithm_training/${JOB_ID}"
    
  2. Kirim tugas:

    gcloud ai-platform jobs submit training $JOB_ID \
      --region=$REGION \
      --config=config.yaml \
      --master-image-uri=$IMAGE_URI \
      -- \
      --training_data_path=$TRAINING_DATA_PATH \
      --validation_data_path=$VALIDATION_DATA_PATH \
      --job-dir=$JOB_DIR \
      --max_steps=30000 \
      --train_batch_size=128 \
      --num_classes=5 \
      --num_eval_images=100 \
      --initial_learning_rate=0.128 \
      --warmup_steps=1000 \
      --model_type='efficientnet-b4'
  3. Setelah tugas berhasil dikirim, Anda dapat melihat log menggunakan perintah gcloud berikut:

    gcloud ai-platform jobs describe $JOB_ID
    gcloud ai-platform jobs stream-logs $JOB_ID
    

Langkah selanjutnya