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

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

モデルのトレーニング

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

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

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

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

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

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

プロジェクト内の既存のモデルを表示するには、モデルの表示

注記

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

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

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

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

  2. 左側のナビゲーションペインで、[Projects] (プロジェクト) を選択します。

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

  4. プロジェクトの詳細ページで、[Train model] (モデルのトレーニング) を選択します。モデルを訓練するのに十分なラベル付けされた画像がある場合、[Train model] (モデルのトレーニング) ボタンが利用できます。ボタンがない場合は、十分なラベル付き画像が揃うまで [add more images] (画像を追加) してください。

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

    1. [Image data encryption] (画像データの暗号化) で [Customize encryption settings (advanced)] (暗号化設定のカスタマイズ (アドバンスト)) を選択します。

    2. encryption.aws_kms_key に、キーの Amazon リソースネーム (ARN) を入力するか、既存のAWS KMSキーを選択します。新しいキーを作成するには、[Create an AWS IMS key] (AWS IMS キーを作成する) を選択します。

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

    1. [Tags] (タグ) セクションで [Add new tag] (新しいタグを追加する) を選択します。

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

      1. [Key] (キー) の中のキーの名前。

      2. [Value] (値) の中のキーの値。

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

    4. (オプション) タグを削除したい場合は、削除したいタグの横にある[Remove] (削除) を選びます。以前に保存したタグを削除する場合、変更を保存するとそのタグが削除されます。

  7. [Train model] (モデルのトレーニング) を選択します。

  8. [Do you want to train your model?] (モデルをトレーニングしますか?) ダイアログボックスで、[Train model] (モデルのトレーニング) を選択します。

  9. [Models] (モデル) ビューでは、トレーニングが開始されたことが確認でき、モデルバージョンの Status カラムを表示することで現在の状態を確認することができます。モデルのトレーニングは、完了までに時間がかかります。

  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. まだの場合は、 以下のことを実行してください。

    1. Amazon Lookout for Vision にアクセスするためのアクセス許可を持つ IAM ユーザーを作成または更新します。詳細については、「ステップ 3: アクセス許可の設定」を参照してください。

    2. AWS CLI と AWS SDK をインストールして設定します。詳細については、「ステップ 5: AWS CLI と AWS SDK をセットアップする」を参照してください。

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

    CLI

    以下の値を変更します。

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

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

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

      • output folder に、トレーニング結果を保存するフォルダの名前を入力します。

      • Key をタグキーの名前で指定します。

      • Valuetag_key を関連付けるための値を設定します。

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

    このコードは、AWSドキュメント 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ドキュメント 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 モデルの改善」を参照してください。