モデルのトレーニング - Amazon Lookout for Vision

モデルのトレーニング

データセットを作成して画像にラベル付けしたら、モデルをトレーニングできます。トレーニングプロセスの一環として、テストデータセットが使用されます。単一データセットプロジェクトがある場合、データセット内の画像は、トレーニングプロセスの一部として、テストデータセットとトレーニングデータセットに自動的に分割されます。プロジェクトにトレーニングデータセットとテストデータセットがある場合は、データセットを個別にトレーニングおよびテストするために使用されます。

トレーニングが完了したら、モデルのパフォーマンスを評価し、必要な改善を行うことができます。詳細については「Amazon Lookout for Vision モデルの改善」を参照してください。

モデルをトレーニングするために、Amazon Lookout for Vision はソーストレーニングとテスト画像のコピーを作成します。デフォルトでは、コピーされた画像は AWS が所有および管理するキーで暗号化されます。独自の AWS Key Management Service (KMS) キーを使用することもできます。詳細については、「AWS Key Management Service の概念」を参照してください。ソース画像には影響がありません。

モデルには、タグという形でメタデータを付与することができます。詳細については「モデルのタグ付け」を参照してください。

モデルをトレーニングするたびに、モデルの新しいバージョンが作成されます。モデルのバージョンが不要になった場合には、それを削除することができます。詳細については「モデルの削除」を参照してください。

モデルを正常にトレーニングするのにかかる時間に対して課金されます。詳細については、「トレーニング時間」を参照してください。

プロジェクト内の既存のモデルを表示するには、「モデルの表示」に進んでください。

注記

データセットの作成」または「データセットへの画像の追加」を完了したばかりの場合、コンソールにはモデルダッシュボードが表示されるはずです。手順 1~4 を行う必要はありません。

モデルのトレーニング (コンソール)

次の手続きでは、 コンソールを使用したモデルのトレーニング方法を示します。

モデルをトレーニングするには (コンソール)
  1. https://console.aws.amazon.com/lookoutvision/ で Amazon Lookout for Vision コンソールを開きます。

  2. In the left navigation pane, choose Projects.

  3. プロジェクト」 ページで、トレーニングしたいモデルを含むプロジェクトを選択します。

  4. On the project details page, choose Train model. The Train model button is available if you have enough labeled images to train the model. ボタンがない場合は、十分なラベル付き画像が揃うまで画像を追加してください。

  5. (オプション) 独自の AWS KMS 暗号化キーを使用する場合は、次の手順を実行します。

    1. In Image data encryption choose Customize encryption settings (advanced).

    2. encryption.aws_kms_key に、キーの Amazon リソースネーム (ARN) を入力するか、既存のAWS KMSキーを選択します。To create a new key, choose Create an AWS IMS key.

  6. (オプション) モデルにタグを追加する場合は、次の操作を行います。

    1. In the Tags section, choose Add new tag.

    2. 次のように入力します。

      1. The name of the key in Key.

      2. The value of the key in Value.

    3. タグをさらに追加するには、手順 6a と 6b を繰り返します。

    4. (Optional) If you want to remove a tag, choose Remove next to the tag that you want to remove. 以前に保存したタグを削除する場合、変更を保存するとそのタグが削除されます。

  7. Choose Train model.

  8. In the Do you want to train your model? dialog box, choose Train model.

  9. In the Models view, you can see that training has started and you can check the current status by viewing the Status column for the model version. モデルのトレーニングは、完了までに時間がかかります。

  10. トレーニングが終了したら、そのパフォーマンスを評価できます。詳細については「Amazon Lookout for Vision モデルの改善」を参照してください。

モデルをトレーニングする (SDK)

モデルのトレーニング、テスト、評価を開始するには、CreateModel オペレーションを使用します。Amazon Lookout for Vision は、プロジェクトに関連付けられたトレーニングおよびテストデータセットを使用してモデルをトレーニングします。詳細については「プロジェクトの作成 (SDK)」を参照してください。

CreateModel を呼び出すたびに、モデルの新しいバージョンが作成されます。CreateModel からの応答には、モデルのバージョンが含まれます。

モデルトレーニングが成功するごとに課金されます。ClientToken 入力パラメータを使用することで、ユーザーによる不要なモデルトレーニングの繰り返しによる課金を防止することができます。ClientToken は冪等の入力パラメータで、CreateModel が特定のパラメータセットに対して一度だけ完了するようにします。― 同じ ClientToken 値で CreateModel を繰り返し呼び出すと、トレーニングが繰り返されないようにします。ClientToken に値を指定しない場合では、使用している AWS SDK によって値が挿入されます。これにより、ネットワークエラー後の再試行が複数のトレーニングジョブを開始することを防ぎますが、ご自身のユースケースに合わせて独自の値を用意する必要があります。詳細については、「CreateModel」を参照してください。

トレーニングが完了するまで少し時間がかかります。現在の状態を確認するには、DescribeModel を呼び出し、プロジェクト名(CreateProject への呼び出しで指定)とモデルのバージョンを渡します。status フィールドは、モデルトレーニングの現在のステータスを示します。サンプルコードについては、「モデルの表示 (SDK)」を参照してください。

トレーニングが成功すれば、モデルを評価できます。詳細については「Amazon Lookout for Vision モデルの改善」を参照してください。

プロジェクトで作成したモデルを表示するには、ListModels を呼び出します。サンプルコードについては、「モデルの表示」を参照してください。

モデル (SDK) をトレーニングするには
  1. まだの場合は、AWS CLI と AWS SDK をインストールして構成します。詳細については「ステップ 4: AWS CLI と AWS SDK をセットアップする」を参照してください。

  2. 次のサンプルコードを使用して、モデルをトレーニングします。

    CLI

    以下の値を変更します:

    • project-name を、作成したいモデルを含むプロジェクト名に。

    • output-config を、トレーニング結果を保存したい場所に。以下の値を置き換えます:

      • output bucket を、Amazon Lookout for Vision がトレーニング結果を保存する Amazon S3 バケットの名前に。

      • output folder を、トレーニング結果を保存したいフォルダの名前に。

      • Key を、タグキーの名前に。

      • Value を、tag_key と関連する値に。

    aws lookoutvision create-model --project-name "project name"\ --output-config '{ "S3Location": { "Bucket": "output bucket", "Prefix": "output folder" } }'\ --tags '[{"Key":"Key","Value":"Value"}]' \ --profile lookoutvision-access
    Python

    このコードは「AWS Documentation SDK 例 GitHub リポジトリ」から引用されたものです。詳しい例はこちらで参照できます。

    @staticmethod def create_model( lookoutvision_client, project_name, training_results, tag_key=None, tag_key_value=None, ): """ Creates a version of a Lookout for Vision model. :param lookoutvision_client: A Boto3 Lookout for Vision client. :param project_name: The name of the project in which you want to create a model. :param training_results: The Amazon S3 location where training results are stored. :param tag_key: The key for a tag to add to the model. :param tag_key_value - A value associated with the tag_key. return: The model status and version. """ try: logger.info("Training model...") output_bucket, output_folder = training_results.replace("s3://", "").split( "/", 1 ) output_config = { "S3Location": {"Bucket": output_bucket, "Prefix": output_folder} } tags = [] if tag_key is not None: tags = [{"Key": tag_key, "Value": tag_key_value}] response = lookoutvision_client.create_model( ProjectName=project_name, OutputConfig=output_config, Tags=tags ) logger.info("ARN: %s", response["ModelMetadata"]["ModelArn"]) logger.info("Version: %s", response["ModelMetadata"]["ModelVersion"]) logger.info("Started training...") print("Training started. Training might take several hours to complete.") # Wait until training completes. finished = False status = "UNKNOWN" while finished is False: model_description = lookoutvision_client.describe_model( ProjectName=project_name, ModelVersion=response["ModelMetadata"]["ModelVersion"], ) status = model_description["ModelDescription"]["Status"] if status == "TRAINING": logger.info("Model training in progress...") time.sleep(600) continue if status == "TRAINED": logger.info("Model was successfully trained.") else: logger.info( "Model training failed: %s ", model_description["ModelDescription"]["StatusMessage"], ) finished = True except ClientError: logger.exception("Couldn't train model.") raise else: return status, response["ModelMetadata"]["ModelVersion"]
    Java V2

    このコードは「AWS Documentation SDK 例 GitHub リポジトリ」から引用されたものです。詳しい例はこちらで参照できます。

    /** * Creates an Amazon Lookout for Vision model. The function returns after model * training completes. Model training can take multiple hours to complete. * You are charged for the amount of time it takes to successfully train a model. * Returns after Lookout for Vision creates the dataset. * * @param lfvClient An Amazon Lookout for Vision client. * @param projectName The name of the project in which you want to create a * model. * @param description A description for the model. * @param bucket The S3 bucket in which Lookout for Vision stores the * training results. * @param folder The location of the training results within the S3 * bucket. * @return ModelDescription The description of the created model. */ public static ModelDescription createModel(LookoutVisionClient lfvClient, String projectName, String description, String bucket, String folder) throws LookoutVisionException, InterruptedException { logger.log(Level.INFO, "Creating model for project: {0}.", new Object[] { projectName }); // Setup input parameters. S3Location s3Location = S3Location.builder() .bucket(bucket) .prefix(folder) .build(); OutputConfig config = OutputConfig.builder() .s3Location(s3Location) .build(); CreateModelRequest createModelRequest = CreateModelRequest.builder() .projectName(projectName) .description(description) .outputConfig(config) .build(); // Create and train the model. CreateModelResponse response = lfvClient.createModel(createModelRequest); String modelVersion = response.modelMetadata().modelVersion(); boolean finished = false; DescribeModelResponse descriptionResponse = null; // Wait until training finishes or fails. do { DescribeModelRequest describeModelRequest = DescribeModelRequest.builder() .projectName(projectName) .modelVersion(modelVersion) .build(); descriptionResponse = lfvClient.describeModel(describeModelRequest); switch (descriptionResponse.modelDescription().status()) { case TRAINED: logger.log(Level.INFO, "Model training completed for project {0} version {1}.", new Object[] { projectName, modelVersion }); finished = true; break; case TRAINING: logger.log(Level.INFO, "Model training in progress for project {0} version {1}.", new Object[] { projectName, modelVersion }); TimeUnit.SECONDS.sleep(60); break; case TRAINING_FAILED: logger.log(Level.SEVERE, "Model training failed for for project {0} version {1}.", new Object[] { projectName, modelVersion }); finished = true; break; default: logger.log(Level.SEVERE, "Unexpected error when training model project {0} version {1}: {2}.", new Object[] { projectName, modelVersion, descriptionResponse.modelDescription() .status() }); finished = true; break; } } while (!finished); return descriptionResponse.modelDescription(); }
  3. トレーニングが終了したら、そのパフォーマンスを評価できます。詳細については「Amazon Lookout for Vision モデルの改善」を参照してください。