Pelatihan menggunakan algoritma deteksi objek gambar bawaan

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

Ringkasan

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

Batasan

Algoritma bawaan gambar mendukung pelatihan dengan CPU tunggal, GPU, atau TPU. SaveModel yang dihasilkan kompatibel dengan penyaluran di CPU dan GPU.

Fitur berikut tidak didukung untuk pelatihan dengan algoritma deteksi objek gambar bawaan:

Jenis mesin yang didukung

Tingkat skala dan jenis mesin Pelatihan AI Platform 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)

Otorisasi Cloud TPU untuk mengakses project Anda

Ikuti langkah-langkah berikut untuk memberi otorisasi nama akun layanan Cloud TPU yang terkait dengan project Google Cloud Anda:

  1. Dapatkan nama akun layanan Cloud TPU dengan memanggil projects.getConfig. Contoh:

    PROJECT_ID=PROJECT_ID
    
    curl -H "Authorization: Bearer $(gcloud auth print-access-token)"  \
        https://ml.googleapis.com/v1/projects/$PROJECT_ID:getConfig
    
  2. Simpan nilai kolom serviceAccountProject dan tpuServiceAccount yang ditampilkan oleh API.

  3. Lakukan inisialisasi akun layanan Cloud TPU:

    curl -H "Authorization: Bearer $(gcloud auth print-access-token)"  \
      -H "Content-Type: application/json" -d '{}'  \
      https://serviceusage.googleapis.com/v1beta1/projects/<serviceAccountProject>/services/tpu.googleapis.com:generateServiceIdentity
    

Sekarang, tambahkan akun layanan Cloud TPU sebagai anggota di project Anda, dengan peran Cloud ML Service Agent. Selesaikan langkah-langkah berikut di Konsol Google Cloud atau menggunakan perintah gcloud:

Konsol

  1. Login ke Google Cloud Console dan pilih project tempat Anda menggunakan TPU.
  2. Pilih IAM & Admin > IAM.
  3. Klik tombol Add untuk menambahkan anggota ke project.
  4. Masukkan akun layanan TPU di kotak teks Anggota.
  5. Klik daftar dropdown Peran.
  6. Aktifkan peran Cloud ML Service Agent (Service Agents > Cloud ML Service Agent).

gcloud

  1. Tetapkan variabel lingkungan yang berisi project ID Anda dan akun layanan Cloud TPU:

    PROJECT_ID=PROJECT_ID
    SVC_ACCOUNT=your-tpu-sa-123@your-tpu-sa.google.com.iam.gserviceaccount.com
    
  2. Berikan peran ml.serviceAgent ke akun layanan Cloud TPU:

    gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member serviceAccount:$SVC_ACCOUNT --role roles/ml.serviceAgent
    

Untuk mengetahui detail selengkapnya tentang memberikan peran ke akun layanan, lihat dokumentasi IAM.

Memformat data input untuk pelatihan

Algoritma deteksi objek 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 catatan biner. Dalam hal ini, semua kumpulan data berisi representasi biner dari gambar. Setiap gambar, beserta label class-nya, direpresentasikan sebagai tf.Example. Anda dapat menyimpan banyak tf.Example ke satu file TFRecord. Anda juga dapat melakukan sharding set data berukuran besar di antara beberapa file TFRecord.

Pelajari TFRecord dan tf.Example lebih lanjut.

Mengonversi gambar Anda ke TFRecords

Untuk mengonversi gambar ke format yang diperlukan untuk mendapatkan prediksi, ikuti panduan TensorFlow Model Garden dalam menyiapkan input untuk deteksi objek.

Memeriksa izin bucket Cloud Storage

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

Format input yang diperlukan

Untuk berlatih dengan algoritma deteksi objek gambar bawaan, data gambar Anda harus distrukturkan sebagai tf.Example yang menyertakan kolom berikut:

  • image/encoded adalah gambar mentah yang dienkode sebagai string.

  • image/object/class/label adalah daftar label bilangan bulat untuk gambar yang terkait (satu label per kotak).

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

  • image/object/bbox/xmin adalah daftar koordinat x kiri yang dinormalkan untuk gambar yang sesuai (satu koordinat per kotak). Setiap koordinat harus berada dalam interval [0, 1].

  • image/object/bbox/xmax adalah daftar koordinat x kanan yang dinormalkan untuk gambar yang sesuai (satu koordinat per kotak). Setiap koordinat harus berada dalam interval [0, 1].

  • image/object/bbox/ymin adalah daftar koordinat y atas yang dinormalkan untuk gambar yang sesuai (satu koordinat per kotak). Setiap koordinat harus berada dalam interval [0, 1].

  • image/object/bbox/ymax adalah daftar koordinat y bawah yang dinormalkan untuk gambar yang sesuai (satu koordinat per kotak). Setiap koordinat harus berada dalam interval [0, 1].

Contoh berikut menunjukkan struktur tf.Example untuk gambar yang berisi dua kotak pembatas. Kotak pertama memiliki label 1, pojok kiri atasnya berada pada koordinat (0.1, 0.4) yang dinormalisasi, dan sudut kanan bawahnya berada pada koordinat yang dinormalkan (0.5, 0.8). Kotak kedua memiliki label 2, pojok kiri atas berada pada koordinat (0.3, 0.5) yang dinormalisasi, dan sudut kanan bawahnya berada pada koordinat (0.4, 0.7) yang dinormalkan.

{
    'image/encoded': '<encoded image data>',
    'image/object/class/label': [1, 2],
    'image/object/bbox/xmin': [0.1, 0.3],
    'image/object/bbox/xmax': [0.5, 0.4],
    'image/object/bbox/ymin': [0.4, 0.5],
    'image/object/bbox/ymax': [0.8, 0.7]
}

Format tf.Example ini mengikuti format yang sama dengan yang digunakan di skrip deteksi objek TFRecord.

Mendapatkan SaveModel terbaik sebagai output

Setelah tugas pelatihan selesai, Pelatihan AI Platform menulis TensorFlow TersimpanModel ke bucket Cloud Storage yang Anda tentukan sebagai jobDir saat mengirimkan tugas. SaveModel 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, Pelatihan AI Platform akan menampilkan TensorFlow SavedModel dengan akurasi tertinggi yang dicapai selama proses pelatihan. Misalnya, jika Anda mengirimkan tugas pelatihan dengan 2.500 langkah pelatihan, dan akurasinya mencapai tertinggi pada 2.000 langkah, Anda akan mendapatkan TensorFlowSavedModel yang disimpan dari titik tertentu tersebut.

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

Tanda tangan outputSavedModel adalah:

signature_def['serving_default']:
  The given SavedModel SignatureDef contains the following input(s):
    inputs['encoded_image'] tensor_info:
        dtype: DT_STRING
        shape: (-1)
        name: encoded_image_string_tensor:0
    inputs['key'] tensor_info:
        dtype: DT_STRING
        shape: (-1)
        name: key:0
  The given SavedModel SignatureDef contains the following output(s):
    outputs['detection_boxes'] tensor_info:
        dtype: DT_FLOAT
        shape: (-1, 100, 4)
        name: detection_boxes:0
    outputs['detection_classes'] tensor_info:
        dtype: DT_FLOAT
        shape: (-1, 100)
        name: detection_classes:0
    outputs['detection_scores'] tensor_info:
        dtype: DT_FLOAT
        shape: (-1, 100)
        name: detection_scores:0
    outputs['key'] tensor_info:
        dtype: DT_STRING
        shape: (-1)
        name: Identity:0
    outputs['num_detections'] tensor_info:
        dtype: DT_FLOAT
        shape: (-1)
        name: num_detections:0
  Method name is: tensorflow/serving/predict

Input:

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

Output:

  • num_detections: Jumlah kotak pembatas yang terdeteksi.
  • detection_boxes: Daftar koordinat relatif (nilai dalam [0,1]) ([ymin, xmin, ymax, xmax]) dari kotak pembatas deteksi.
  • detection_classes: Daftar label class (bilangan bulat) yang diprediksi untuk setiap kotak deteksi di detection_boxes.
  • detection_scores: Daftar scores untuk setiap kotak deteksi di detection_boxes.
  • key: Tombol output.

Berikut adalah contoh output prediksi:

{u'detection_classes': [1.0, 3.0, 3.0, ...],
u'key': u'test_key',
u'num_detections': 100.0,
u'detection_scores': [0.24401935935020447, 0.19375669956207275, 0.18359294533729553, ...]]}

Contoh konfigurasi

Jika mengirimkan tugas menggunakan gcloud, Anda harus membuat file config.yaml untuk spesifikasi jenis mesin dan 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:
  scaleTier: CUSTOM
  masterType: n1-standard-16
  masterConfig:
    imageUri: gcr.io/cloud-ml-algos/image_object_detection:latest
    acceleratorConfig:
      type: NVIDIA_TESLA_P100
      count: 1
  workerType:  cloud_tpu
  workerConfig:
    imageUri: gcr.io/cloud-ml-algos/image_object_detection:latest
    tpuTfVersion: 1.14
    acceleratorConfig:
      type: TPU_V2
      count: 8
  workerCount: 1
EOF

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

Konfigurasi penyesuaian hyperparameter

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

Anda dapat menemukan penjelasan singkat tentang setiap hyperparameter dalam Google Cloud Console, dan penjelasan yang lebih komprehensif di referensi untuk algoritma deteksi objek 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-standard-16
  masterConfig:
    imageUri: gcr.io/cloud-ml-algos/image_object_detection:latest
    acceleratorConfig:
      type: NVIDIA_TESLA_P100
      count: 1
  workerType:  cloud_tpu
  workerConfig:
    imageUri: gcr.io/cloud-ml-algos/image_object_detection:latest
    acceleratorConfig:
      type: TPU_V2
      count: 8
  workerCount: 1
  # The following are hyperparameter configs.
  hyperparameters:
   goal: MAXIMIZE
   hyperparameterMetricTag: "AP"
   maxTrials: 6
   maxParallelTrials: 3
   enableTrialEarlyStopping: True
   params:
   - parameterName: initial_learning_rate
     type: DOUBLE
     minValue: 0.001
     maxValue: 0.1
     scaleType: UNIT_LOG_SCALE
EOF

Mengirim tugas pelatihan deteksi objek gambar

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

Konsol

Pilih algoritma Anda

  1. Buka halaman Tugas Pelatihan AI Platform di Konsol Google Cloud:

    Halaman Tugas Pelatihan AI Platform

  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 object detection, lalu klik Next.

Memilih data pelatihan dan validasi Anda

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

    • Untuk satu file, biarkan "Use single file in a GCS bucket" dipilih.
    • Untuk beberapa file, pilih "Gunakan beberapa file yang disimpan di satu direktori Cloud Storage".
  2. Untuk Jalur direktori, klik Jelajahi. 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. "Complete GCS path" akan ditampilkan di bawah untuk membantu Anda mengonfirmasi bahwa jalur tersebut sudah benar.

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

    • Untuk satu file, biarkan "Use single file in a GCS bucket" dipilih.
    • Untuk beberapa file, pilih "Gunakan beberapa file yang disimpan di satu direktori Cloud Storage".
  4. Untuk Jalur direktori, klik Jelajahi. 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. "Complete GCS path" akan ditampilkan di bawah untuk membantu Anda mengonfirmasi bahwa jalur tersebut sudah benar.

  5. Di Direktori Output, 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 mengklik tombol Browse untuk memilihnya.

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

    Klik Next.

Menetapkan argumen algoritma

Setiap argumen khusus algoritme 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 semua argumen algoritma lebih lanjut, buka link di Konsol Google Cloud dan lihat referensi deteksi objek gambar bawaan untuk mengetahui detail lebih lanjut.

Mengirimkan tugas

Pada tab Job settings:

  1. Masukkan ID Pekerjaan yang unik.
  2. Masukkan region yang tersedia (seperti "us-central1").
  3. Untuk memilih jenis mesin, pilih "KHUSUS" untuk tingkat skala. Bagian untuk menyediakan tampilan Spesifikasi cluster kustom Anda.
    1. Pilih jenis mesin yang tersedia untuk Master type.
    2. Jika Anda ingin menggunakan TPU, tetapkan Jenis pekerja ke cloud_tpu. Jumlah pekerja ditetapkan secara default ke 1.

Klik Selesai untuk mengirim 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_object_detection:latest"
    
    # Variables for constructing descriptive names for JOB_ID and JOB_DIR
    DATASET_NAME="coco"
    ALGORITHM="object_detection"
    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 \
      --job-dir=$JOB_DIR \
      -- \
      --training_data_path=$TRAINING_DATA_PATH \
      --validation_data_path=$VALIDATION_DATA_PATH \
      --train_batch_size=64 \
      --num_eval_images=500 \
      --train_steps_per_eval=2000 \
      --max_steps=22500 \
      --num_classes=90 \
      --warmup_steps=500 \
      --initial_learning_rate=0.08 \
      --fpn_type="nasfpn" \
      --aug_scale_min=0.8 \
      --aug_scale_max=1.2
    

  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