このチュートリアルでは、AutoML Vision を使用して、独自のトレーニング画像一式を含む新しいモデルを作成し、結果を評価して、テスト画像の分類を予測する方法を説明します。
このチュートリアルで使用するデータセットには、5 種類の花(ヒマワリ、チューリップ、デイジー、バラ、タンポポ)の画像が含まれています。このデータセットでカスタムモデルをトレーニングし、モデルのパフォーマンスを評価します。その後、カスタムモデルを使用して新しい画像を分類します。
前提条件
プロジェクトの環境を構成する
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the AutoML Vision APIs.
- Google Cloud CLI をインストールします。
- 手順に沿ってサービス アカウントを作成し、キーファイルをダウンロードします。
-
GOOGLE_APPLICATION_CREDENTIALS
環境変数を、サービス アカウントの作成時にダウンロードしたサービス アカウントの鍵ファイルのパスに設定します。例:export GOOGLE_APPLICATION_CREDENTIALS=KEY_FILE
-
次のコマンドを使用して、新しいサービス アカウントを AutoML 編集者の IAM ロールに追加します。PROJECT_ID は、実際の Google Cloud プロジェクトの名前に置き換えます。SERVICE_ACCOUNT_NAME は新しいサービス アカウントの名前に置き換えます。たとえば、
service-account1@myproject.iam.gserviceaccount.com
です。gcloud auth login gcloud projects add-iam-policy-binding PROJECT_ID \ --member="user:YOUR_USERID@YOUR_DOMAIN" \ --role="roles/automl.admin" gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:SERVICE_ACCOUNT_NAME \ --role="roles/automl.editor"
-
Google Cloud プロジェクトのリソースに、AutoML Vision サービス アカウントがアクセスできるようにします。
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:custom-vision@appspot.gserviceaccount.com" \ --role="roles/storage.admin"
- クライアント ライブラリをインストールします。
-
PROJECT_ID
およびREGION_NAME
環境変数を設定します。
PROJECT_ID は、Google Cloud プロジェクトの プロジェクト ID に置き換えます。現在、AutoML Vision にはロケーションとしてus-central1
を指定する必要があります。export PROJECT_ID="PROJECT_ID" export REGION_NAME="us-central1"
-
カスタムモデルのトレーニングに使用するドキュメントを保存する Cloud Storage バケットを作成します。
バケット名の形式は、$PROJECT_ID-vcm
にする必要があります。次のコマンドによって、$PROJECT_ID-vcm
という名前のus-central1
リージョンにストレージ バケットが作成されます。gcloud storage buckets create gs://PROJECT_ID-vcm/ --project=PROJECT_ID --location=us-central1
- BUCKET 変数を設定します。
export BUCKET=PROJECT_ID-vcm
-
gs://cloud-samples-data/img/flower_photos/
から一般公開されている花の画像データセットを Google Cloud Storage バケットにコピーします。
Cloud Shell セッションで、次のように入力します。gcloud storage cp gs://cloud-samples-data/ai-platform/flowers/ gs://BUCKET/img/ --recursive
ファイルのコピーには約 20 分かかります。
このコマンドは、元のファイル名とそのラベルのリストを含む
all_data.csv
ファイルもコピーします。 -
サンプル データセットには、各画像の場所とラベルを設定した CSV ファイルが含まれています(必要な形式については、トレーニング データの準備をご覧ください)。CSV ファイルを更新して、自分のバケット内のファイルを指すようにします。
gcloud storage cat gs://BUCKET/img/flowers/all_data.csv | sed "s:cloud-ml-data/img/flower_photos/:BUCKET/img/flowers/:" > all_data.csv
更新した CSV ファイルをバケット内にコピーします。gcloud storage cp all_data.csv gs://BUCKET/csv/
ソースコード ファイルの場所
ソースコードは下記の場所からダウンロードできます。ダウンロード後、ソースコードを AutoML Vision プロジェクト フォルダにコピーできます。
Python
このチュートリアルは、次の Python ファイルで構成されています。
vision_classification_create_dataset.py
- データセットを作成するための関数が含まれています。import_dataset.py
- データセットをインポートするための関数が含まれています。vision_classification_create_model.py
- モデルを作成するための関数が含まれています。list_model_evaluations.py
- モデル評価を一覧表示するための関数が含まれています。vision_classification_predict.py
- 予測に関連する関数が含まれています。delete_model.py
- モデルを削除するための関数が含まれています。
Java
このチュートリアルは、次の Java ファイルで構成されています。
VisionClassificationCreateDataset.java
- データセットを作成するための関数が含まれています。ImportDataset.java
- データセットをインポートするための関数が含まれています。VisionClassificationCreateModel.java
- モデルを作成するための関数が含まれています。ListModelEvaluations.java
- モデル評価を一覧表示するための関数が含まれています。VisionClassificationPredict.java
- 予測に関連する関数が含まれています。DeleteModel.java
- モデルを削除するための関数が含まれています。
Node.js
このチュートリアルは、次の Node.js プログラムで構成されています。
vision_classification_create_dataset.js
- データセットを作成するための関数が含まれています。import_dataset.js
- データセットをインポートするための関数が含まれています。vision_classification_create_model.js
- モデルを作成するための関数が含まれています。list_model_evaluations.js
- モデル評価を一覧表示するための関数が含まれています。vision_classification_predict.js
- 予測に関連する関数が含まれています。delete_model.js
- モデルを削除するための関数が含まれています。
アプリケーションの実行
ステップ 1: Flowers データセットを作成する
カスタムモデルを作成するには、まず空のデータセットを作成します。作成したデータセットには、最終的にそのモデルのトレーニング データが格納されます。データセットを作成する際に、カスタムモデルで行う分類のタイプを指定します。
- MULTICLASS は、分類された画像ごとに 1 つのラベルを割り当てます。
- MULTILABEL を使用すると、1 つの画像に複数のラベルを割り当てることができます。
このチュートリアルでは、MULTICLASS を指定した flowers
という名前のデータセットを作成します。
コードのコピー
Python
Java
Node.js
詳細については、AutoML Vision Node.js API のリファレンス ドキュメントをご覧ください。
AutoML Vision に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
リクエスト
create_dataset
関数を実行して、空のデータセットを作成します。次のコード行を変更する必要があります。
project_id
を実際の PROJECT_ID に設定します- データセット(
flowers
)のdisplay_name
を設定します MULTILABEL
を MULTICLASS に変更します。
Python
python3 vision_classification_create_dataset.py
Java
mvn compile exec:java -Dexec.mainClass="com.example.automl.VisionClassificationCreateDataset"
Node.js
node vision_classification_create_dataset.js
レスポンス
レスポンスには、新しく作成されたデータセットの詳細が格納されます。その詳細に、今後のリクエストでデータセットを参照するために使用するデータセット ID が含まれています。環境変数 DATASET_ID
を、レスポンスで返されたデータセット ID の値に設定することをおすすめします。
Dataset name: projects/216065747626/locations/us-central1/datasets/ICN7372141011130533778 Dataset id: ICN7372141011130533778 Dataset display name: flowers Image classification dataset specification: classification_type: MULTICLASS Dataset example count: 0 Dataset create time: seconds: 1530251987 nanos: 216586000
ステップ 2: データセットに画像にインポートする
次のステップでは、ターゲット ラベルを付けたトレーニング画像をデータセットに取り込みます。
import_data
関数インターフェースは入力として CSV ファイルを受け取ります。このファイルは、すべてのトレーニング画像の場所と各画像の適切なラベルを一覧表示したものです(必要な形式については、データの準備をご覧ください)。このチュートリアルでは、gs://$PROJECT_ID-vcm/csv/all_data.csv
にリストされた Cloud Storage バケットにコピーしたラベル付きの画像を使用します。
コードのコピー
Python
Java
Node.js
詳細については、AutoML Vision Node.js API のリファレンス ドキュメントをご覧ください。
AutoML Vision に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
リクエスト
import_data
関数を実行してトレーニング コンテンツをインポートします。前のステップのデータセット ID を変更し、次に all_data.csv
の URI を変更します。次のコード行を変更する必要があります。
project_id
を PROJECT_ID に設定します。- データセットの
dataset_id
を設定します(前のステップの出力から取得) (
gs://YOUR_PROJECT_ID-vcm/csv/all_data.csv
)の URI であるpath
を設定しますpython3 import_dataset.py {Python}
mvn compile exec:java -Dexec.mainClass="com.example.automl.ImportDataset" {Java}
node import_dataset.js {Node.js}
レスポンス
Processing import... Dataset imported.
ステップ 3: モデルを作成(トレーニング)する
ラベル付き画像からなるデータセットを作成したので、新しいモデルのトレーニングを開始できます。
コードのコピー
Python
Java
Node.js
詳細については、AutoML Vision Node.js API のリファレンス ドキュメントをご覧ください。
AutoML Vision に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
リクエスト
create_model
関数を呼び出して、モデルを作成します。データセット ID は前のステップのものです。次のコード行を変更する必要があります。
project_id
を PROJECT_ID に設定します。- データセットの
dataset_id
を設定します(前のステップの出力から取得) モデルに
display_name
を設定します(flowers_model
)python3 vision_classification_create_model.py {Python}
mvn compile exec:java -Dexec.mainClass="com.example.automl.VisionClassificationCreateModel" {Java}
node vision_classification_create_model.js {Node.js}
レスポンス
create_model
関数はトレーニング オペレーションを開始し、オペレーション名を出力します。トレーニングは非同期で行われ、完了するまでに時間がかかることがあります。オペレーション ID を使用すると、トレーニング ステータスを確認できます。トレーニングが完了したら、create_model
によってモデル ID が返されます。データセット ID の場合と同様に、返されたモデル ID に環境変数 MODEL_ID
を設定することもできます。
Training operation name: projects/216065747626/locations/us-central1/operations/ICN3007727620979824033 Training started... Model name: projects/216065747626/locations/us-central1/models/ICN7683346839371803263 Model id: ICN7683346839371803263 Model display name: flowers_model Image classification model metadata: Training budget: 1 Training cost: 1 Stop reason: Base model id: Model create time: seconds: 1529649600 nanos: 966000000 Model deployment state: deployed
ステップ 4: モデルを評価する
トレーニング完了後にモデルの準備状況を評価するには、モデルの適合率、再現率、F1 スコアを確認します。
display_evaluation
関数はモデル ID をパラメータとして取得します。
コードのコピー
Python
Java
Node.js
詳細については、AutoML Vision Node.js API のリファレンス ドキュメントをご覧ください。
AutoML Vision に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
リクエスト
次のリクエストを実行して、モデルの全体的な評価パフォーマンスを表示するリクエストを行います。次のコード行を変更する必要があります。
project_id
を PROJECT_ID に設定します。model_id
をモデル ID に設定します。python3 list_model_evaluations.py {Python}
mvn compile exec:java -Dexec.mainClass="com.example.automl.ListModelEvaluations" {Java}
node list_model_evaluations.js {Node.js}
レスポンス
適合率と再現率が低すぎる場合は、トレーニング データセットを強化してからモデルを再トレーニングできます。詳しくは、モデルの評価をご覧ください。
Precision and recall are based on a score threshold of 0.5 Model Precision: 96.3% Model Recall: 95.7% Model F1 score: 96.0% Model Precision@1: 96.33% Model Recall@1: 95.74% Model F1 score@1: 96.04%
ステップ 5: モデルを使用して予測を行う
カスタムモデルが品質基準を満たしている場合は、このモデルを使用して新しい花の画像を分類できます。
コードのコピー
Python
Java
Node.js
詳細については、AutoML Vision Node.js API のリファレンス ドキュメントをご覧ください。
AutoML Vision に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
リクエスト
predict
関数では、次のコード行を変更する必要があります。
project_id
を PROJECT_ID に設定します。model_id
をモデル ID に設定します。file_path
をダウンロードしたファイル(resources/test.png)に設定します。python3 vision_classification_predict.py {Python}
mvn compile exec:java -Dexec.mainClass="com.example.automl.VisionClassificationPredict" {Java}
node vision_classification_predict.js {Node.js}
レスポンス
関数から返される分類スコアは、指定された信頼しきい値 0.7 を基準に、画像がどれだけ正確に各カテゴリに一致したかを示します。
Prediction results: Predicted class name: dandelion Predicted class score: 0.9702693223953247
ステップ 6: モデルを削除する
サンプルモデルの使用が終わったら、モデルを完全に削除できます。削除したモデルは、予測に使用できなくなります。
コードのコピー
Python
Java
Node.js
詳細については、AutoML Vision Node.js API のリファレンス ドキュメントをご覧ください。
AutoML Vision に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
リクエスト
オペレーション タイプ delete_model
でリクエストを作成し、作成したモデルを削除します。次のコード行を変更する必要があります。
project_id
を PROJECT_ID に設定します。model_id
をモデル ID に設定します。python3 delete_model.py {Python}
mvn compile exec:java -Dexec.mainClass="com.example.automl.DeleteModel" {Java}
node delete_model.js {Node.js}
レスポンス
Model deleted.