Memulai algoritma deteksi objek gambar bawaan

Dengan algoritma bawaan di AI Platform Training, Anda dapat mengirimkan data pelatihan, memilih algoritme, dan membiarkan AI Platform Training menangani pra-pemrosesan dan pelatihan untuk Anda, tanpa perlu menulis kode apa pun untuk aplikasi pelatihan. Dengan algoritma gambar bawaan, Anda dapat berlatih di TPU dengan konfigurasi minimal. TensorFlowSavedModel yang dihasilkan kompatibel untuk disalurkan di CPU dan GPU.

Ringkasan

Dalam tutorial ini, Anda akan melatih model deteksi objek gambar tanpa menulis kode apa pun. Anda mengirimkan set data COCO ke Pelatihan AI Platform untuk pelatihan, lalu men-deploy model di Pelatihan AI Platform untuk mendapatkan prediksi. Model yang dihasilkan mengklasifikasikan objek umum dalam gambar adegan sehari-hari yang kompleks.

Sebelum memulai

Untuk menyelesaikan tutorial ini di command line, gunakan Cloud Shell atau lingkungan apa pun tempat Google Cloud CLI diinstal.

Selesaikan langkah-langkah berikut untuk menyiapkan akun GCP, mengaktifkan API yang diperlukan, serta menginstal dan mengaktifkan Google Cloud CLI:

  1. Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  2. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  3. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  4. Enable the AI Platform Training & Prediction and Compute Engine APIs.

    Enable the APIs

  5. Menginstal Google Cloud CLI.
  6. Untuk initialize gcloud CLI, jalankan perintah berikut:

    gcloud init
  7. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  8. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  9. Enable the AI Platform Training & Prediction and Compute Engine APIs.

    Enable the APIs

  10. Menginstal Google Cloud CLI.
  11. Untuk initialize gcloud CLI, jalankan perintah berikut:

    gcloud init

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.

Penyiapan

Kami telah mengubah set data COCO untuk digunakan dengan tutorial ini, dan menghostingnya di bucket Cloud Storage publik, gs://cloud-samples-data/ai-platform/built-in/image/coco/.

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. Halaman Buat tugas pelatihan baru akan ditampilkan.

  3. Pembuatan tugas pelatihan dibagi menjadi empat langkah. Langkah pertama adalah Algoritme pelatihan. Pilih image object detection, lalu klik Next.

Data pelatihan

  1. Di bagian Data pelatihan, pilih data pelatihan untuk set data sampel, yang dihosting di bucket Cloud Storage publik kami:

    1. Pilih Gunakan beberapa file yang disimpan di satu direktori Cloud Storage.

    2. Untuk Directory path, isi: "cloud-samples-data/ai-platform/built-in/image/coco/"

    3. Untuk Nama karakter pengganti, isi "train*" untuk memilih semua file pelatihan dalam direktori.

    4. Complete GCS path akan ditampilkan di bawah: "gs://cloud-samples-data/ai-platform/built-in/image/coco/train*"

  2. Di bagian Data validasi, pilih data validasi untuk set data sampel, yang dihosting di bucket Cloud Storage publik kami:

    1. Pilih Gunakan beberapa file yang disimpan di satu direktori Cloud Storage.

    2. Untuk Directory path, isi: "cloud-samples-data/ai-platform/built-in/image/coco/"

    3. Untuk Nama karakter pengganti, isi "val*" untuk memilih semua file validasi dalam direktori.

    4. Complete GCS path akan ditampilkan di bawah: "gs://cloud-samples-data/ai-platform/built-in/image/coco/val*"

  3. Tentukan Direktori output di bucket Cloud Storage Anda tempat Anda ingin AI Platform Training menyimpan model terlatih, checkpoint, dan output tugas pelatihan lainnya. Anda dapat mengisi jalur yang tepat di bucket, atau menggunakan tombol Browse untuk memilih jalur.

gcloud

Siapkan variabel lingkungan untuk project ID Anda, bucket Cloud Storage, jalur Cloud Storage ke data pelatihan, dan pilihan algoritme Anda.

Algoritma bawaan AI Platform Training berada di container Docker yang dihosting di Container Registry.

PROJECT_ID="YOUR_PROJECT_ID"
BUCKET_NAME="YOUR_BUCKET_NAME"
REGION="us-central1"

gcloud config set project $PROJECT_ID
gcloud config set compute/region $REGION

# Set paths to the training and validation data.
TRAINING_DATA_PATH="gs://cloud-samples-data/ai-platform/built-in/image/coco/train*"
VALIDATION_DATA_PATH="gs://cloud-samples-data/ai-platform/built-in/image/coco/val*"

# Specify the Docker container for your built-in algorithm selection.
IMAGE_URI="gcr.io/cloud-ml-algos/image_object_detection:latest"

Mengirim tugas pelatihan

Untuk mengirimkan tugas, Anda harus menentukan beberapa argumen pelatihan dasar dan beberapa argumen dasar yang terkait dengan algoritma deteksi objek gambar.

Argumen umum untuk tugas pelatihan:

Melatih argumen tugas
Argumen Deskripsi
job-id ID unik untuk tugas pelatihan Anda. Anda dapat menggunakannya untuk menemukan log tentang status tugas pelatihan setelah mengirimkannya.
job-dir Jalur Cloud Storage tempat AI Platform Training menyimpan file pelatihan setelah menyelesaikan tugas pelatihan yang berhasil.
scale-tier Menentukan jenis mesin untuk pelatihan. Gunakan BASIC untuk memilih konfigurasi untuk satu mesin saja.
master-image-uri URI Container Registry digunakan untuk menentukan container Docker yang akan digunakan untuk tugas pelatihan. Gunakan container untuk algoritme deteksi objek gambar bawaan yang ditentukan sebelumnya sebagai IMAGE_URI.
region Tentukan region yang tersedia untuk menjalankan tugas pelatihan Anda. Untuk tutorial ini, Anda dapat menggunakan wilayah us-central1.

Argumen khusus untuk algoritma deteksi objek gambar bawaan:

Argumen algoritme
Argumen Deskripsi
training_data_path Jalur ke pola jalur TFRecord yang digunakan untuk pelatihan.
validation_data_path Jalur ke pola jalur TFRecord yang digunakan untuk validasi.
pretrained_checkpoint_path Jalur checkpoint yang telah dilatih sebelumnya. Anda dapat menggunakan beberapa checkpoint yang dipublikasikan.
num_classes Jumlah kelas dalam data pelatihan/validasi.
max_steps Jumlah langkah yang akan dijalankan oleh tugas pelatihan.
train_batch_size Jumlah gambar yang akan digunakan per langkah pelatihan.
num_eval_images Jumlah total gambar yang digunakan untuk evaluasi.
Jika nilainya 0, semua gambar dalam validation_data_path akan digunakan untuk evaluasi.
learning_rate_decay_type Metode yang digunakan untuk melambatkan kecepatan pembelajaran selama pelatihan.
warmup_learning_rate Kecepatan pemelajaran di awal fase pemanasan.
warmup_steps Jumlah langkah yang akan dijalankan selama fase pemanasan, atau durasi fase pemanasan dalam langkah-langkah. Tugas pelatihan menggunakan warmup_learning_rate selama fase pemanasan. Saat fase pemanasan selesai, tugas pelatihan akan menggunakan initial_learning_rate.
initial_learning_rate Kecepatan pemelajaran awal setelah fase pemanasan selesai.
stepwise_learning_rate_steps Langkah-langkah untuk mengurangi/mengubah kecepatan pemelajaran untuk jenis peluruhan kecepatan pembelajaran bertahap.
Misalnya, 100.200 berarti kecepatan pemelajaran akan berubah (sehubungan dengan stepwise_learning_rate_levels) pada langkah 100 dan langkah 200. Perhatikan bahwa ini hanya akan diterapkan jika learning_rate_decay_type ditetapkan ke bertahap.
stepwise_learning_rate_levels Nilai kecepatan pembelajaran setiap langkah untuk jenis peluruhan kecepatan pembelajaran bertahap. Perhatikan bahwa ini hanya akan diterapkan jika learning_rate_decay_type ditetapkan ke bertahap.
image_size Ukuran gambar (lebar dan tinggi) yang digunakan untuk pelatihan.
optimizer_type Pengoptimal yang digunakan untuk pelatihan. ID harus berupa salah satu dari:
{momentum, adam, adadelta, adagrad, rmsprop}
optimizer_arguments Argumen untuk pengoptimal. Nilai ini adalah daftar pasangan "name=value" yang dipisahkan koma. Aplikasi harus kompatibel dengan optimizer_type. Contoh:
  • Untuk pengoptimal Momentum, pengoptimal ini menerima momentum=0.9. Lihat tf.train.MomentumOptimizer untuk mengetahui detail selengkapnya.
  • Untuk pengoptimal Adam, nilainya dapat berupa beta1=0.9,beta2=0.999. Lihat tf.train.AdamOptimizer untuk mengetahui detail selengkapnya.
  • Untuk pengoptimal RMSProp, nilainya dapat berupa decay=0.9,momentum=0.1,epsilon=1e-10. Lihat RMSPropOptimizer untuk mengetahui detail selengkapnya.
fpn_type Jenis Jaringan Piramida Fitur (FPN) multilevel. Harus salah satu dari {fpn, nasfpn}.
resnet_depth Kedalaman backbone ResNet. Harus salah satu dari {18,34,50,101,152,200}.
max_num_bboxes_in_training Jumlah maksimum kotak pembatas yang diusulkan yang akan digunakan untuk pelatihan.
max_num_bboxes_in_prediction Jumlah maksimum kotak pembatas yang diusulkan untuk digunakan dalam output prediksi.
bbox_aspect_ratios Skala ukuran anchor dasar yang merepresentasikan anchor rasio aspek yang ditambahkan di setiap tingkat. Angka menunjukkan rasio lebar terhadap tinggi. Misalnya, "1.0,2.0,0.5" menambahkan tiga anchor pada setiap tingkat skala.
nms_iou_threshold Ambang batas untuk menentukan apakah kotak pembatas tumpang-tindih sehubungan dengan IOU untuk penyembunyian non-maksimum.
nms_score_threshold Ambang batas untuk memutuskan kapan harus menghapus kotak pembatas berdasarkan skor.
focal_loss_alpha Nilai alfa loss fokal (parameter menyeimbangkan).
focal_loss_gamma Nilai gamma loss fokal (parameter pemfokus).
aug_scale_min Skala minimum yang diterapkan selama augmentasi gambar. Nilainya antara [0, 1.0].
aug_scale_max Skala maksimum yang diterapkan selama augmentasi gambar. Nilainya antara [1.0, inf].
aug_rand_hflip Boolean. Jika ditetapkan ke True, setelan ini akan meningkatkan pelatihan dengan balik horizontal acak.

Untuk mengetahui daftar mendetail dari semua flag algoritma deteksi objek gambar lainnya, lihat referensi deteksi objek gambar bawaan.

Konsol

Argumen algoritme

Di bagian pertama tab Argumen algoritma, isi nilai berikut:

  • Jumlah kelas: 91
  • Langkah maks: 15.000
  • Ukuran tumpukan kereta: 64
  • Jumlah gambar evaluasi: 5000

Di Bagian Model pada tab Argumen algoritma:

  1. Untuk Jalur checkpoint terlatih, isi gs://cloud-samples-data/ai-platform/built-in/image/pretrained_checkpoints/detection/.

  2. Biarkan semua kolom lain pada setelan defaultnya, lalu klik Next.

Setelan pekerjaan

Pada tab Job settings:

  1. Masukkan ID Tugas unik (seperti "object_detection_example").
  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. Untuk Master type, pilih complex_model_m.
    2. Untuk Worker type, pilih cloud_tpu. Secara default, jumlah pekerja adalah 1.

Klik Selesai untuk mengirim tugas pelatihan.

gcloud

  1. Siapkan semua argumen untuk tugas pelatihan dan algoritma, sebelum menggunakan gcloud untuk mengirim tugas:

    DATASET_NAME="coco"
    ALGORITHM="object_detection"
    MODEL_NAME="${DATASET_NAME}_${ALGORITHM}_model"
    
    # Give a unique name to your training job.
    DATE="$(date '+%Y%m%d_%H%M%S')"
    JOB_ID="${MODEL_NAME}_${DATE}"
    
    # Make sure you have access to this Cloud Storage bucket.
    JOB_DIR="gs://${BUCKET_NAME}/algorithms_training/${MODEL_NAME}/${DATE}"
    
  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=15000 \
      --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
    

Memahami direktori pekerjaan Anda

Setelah tugas pelatihan berhasil diselesaikan, AI Platform Training akan membuat model terlatih di bucket Cloud Storage Anda, beserta beberapa artefak lainnya. Anda dapat menemukan struktur direktori berikut dalam JOB_DIR:

  • model/ (direktori TersimpanModel yang juga berisi file deployment_config.yaml)
    • saved_model.pb
    • deployment_config.yaml
  • eval/
    • events.out.tfevents.[timestamp].cmle-training-[timestamp]
    • event.out.tfevents...
    • ...
  • variabel/
    • variables.data-00000-of-00001
    • variables.index

Direktori tugas juga berisi berbagai file checkpoint model.

Pastikan struktur direktori di JOB_DIR cocok dengan:

gsutil ls -a $JOB_DIR/*

Men-deploy model yang dilatih

AI Platform Training mengatur model terlatih Anda menggunakan resource model dan versi. Model Pelatihan AI Platform adalah container untuk versi model machine learning Anda.

Untuk men-deploy model, buat resource model di AI Platform Training, buat versi model tersebut, lalu gunakan model dan versi tersebut untuk meminta prediksi online.

Untuk mengetahui informasi lebih lanjut tentang cara men-deploy model ke Pelatihan AI Platform, lihat cara men-deploy model TensorFlow.

Konsol

  1. Di halaman Tugas, Anda dapat menemukan daftar semua tugas pelatihan Anda. Klik nama tugas pelatihan yang baru saja Anda kirimkan ("object_detection" atau nama tugas yang Anda gunakan).

  2. Di halaman Detail tugas, Anda dapat melihat progres umum dari tugas Anda, atau mengklik View logs untuk melihat progresnya secara lebih mendetail.

  3. Setelah tugas berhasil, tombol Deploy model akan muncul di bagian atas. Klik Deploy model.

  4. Pilih Deploy as new model, lalu masukkan nama model, seperti "algorithms_object_detection_model". Selanjutnya, klik Konfirmasi.

  5. Pada halaman Buat versi, masukkan nama versi, misalnya "v1", dan biarkan semua kolom lain dalam setelan defaultnya. Klik Save.

gcloud

Proses pelatihan dengan algoritma deteksi objek gambar bawaan menghasilkan file deployment_config.yaml, yang mempermudah deployment model Anda pada AI Platform Training untuk prediksi.

  1. Salin file ke direktori lokal Anda dan lihat isinya:

    gsutil cp $JOB_DIR/model/deployment_config.yaml .
    cat deployment_config.yaml
    

    File deployment_config.yaml Anda akan terlihat seperti berikut:

    deploymentUri: gs://BUCKET_NAME/algorithms_training/coco_object_detection/model
    framework: TENSORFLOW
    labels:
      global_step: '1000'
      job_id: coco_object_detection_20190227060114
    runtimeVersion: '1.14'
    
  2. Buat model dan versi dalam AI Platform Training:

    gcloud ai-platform models create $MODEL_NAME --regions $REGION
    
    # Create a model and a version using the file above.
    VERSION_NAME="v_${DATE}"
    
    gcloud ai-platform versions create $VERSION_NAME \
      --model $MODEL_NAME \
      --config deployment_config.yaml
    

    Pembuatan versi memerlukan waktu beberapa menit.

Mendapatkan prediksi online

Saat meminta prediksi, Anda harus memastikan bahwa data input diformat sebagai JSON.

  1. Download file artefak pelatihan:

    gsutil cp $JOB_DIR/artifacts/* .
    
  2. Siapkan input prediksi untuk satu gambar.

    Untuk mengirim permintaan prediksi online menggunakan Google Cloud CLI, seperti dalam contoh ini, tulis setiap instance ke baris dalam file JSON yang dibatasi baris baru.

    Jalankan perintah berikut di terminal Anda guna membuat input untuk satu instance yang dapat Anda kirim ke AI Platform Prediction:

    Skrip Python berikut mengenkode satu gambar menggunakan base64, memformatnya untuk prediksi, menambahkan kunci instance, dan menulis hasilnya ke file bernama prediction_instances.json:

    import json
    import base64
    import tensorflow as tf
    
    IMAGE_URI='gs://cloud-samples-data/ai-platform/built-in/image/tutorial_examples/coco_sample.jpeg'
    
    with tf.gfile.Open(IMAGE_URI, 'rb') as image_file:
      encoded_string = base64.b64encode(image_file.read()).decode('utf-8')
    
    image_bytes = {'b64': str(encoded_string)}
    instances = {'image_bytes': image_bytes, 'key': '1'}
    with open("prediction_instances.json","w") as f:
      f.write(json.dumps(instances))
    
  3. Kirim permintaan prediksi:

    gcloud ai-platform predict --model $MODEL_NAME \
     --version $VERSION_NAME \
     --json-instances prediction_instances.json
    

Untuk setiap objek yang terdeteksi dalam gambar, output prediksi mencakup class, skor, dan lokasi kotak pembatas.

Tentang data

Set data Common Objects in Context (COCO) Microsoft adalah set data deteksi, segmentasi, dan teks dalam skala besar.

Langkah selanjutnya