Melatih model Label Kustom Amazon Rekognition - Rekognition

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Melatih model Label Kustom Amazon Rekognition

Anda dapat melatih model dengan menggunakan konsol Amazon Rekognition Custom Labels, atau dengan Amazon Rekognition Custom Labels API. Jika pelatihan model gagal, gunakan informasiMendebug pelatihan model yang gagal untuk menemukan penyebab kegagalan.

catatan

Anda dikenai biaya untuk jumlah waktu yang dibutuhkan untuk berhasil melatih sebuah model. Biasanya pelatihan membutuhkan waktu 30 menit hingga 24 jam untuk menyelesaikannya. Untuk informasi selengkapnya, lihat Jam latihan.

Versi baru dari sebuah model dibuat setiap kali model dilatih. Label Kustom Amazon Rekognition membuat nama untuk model yang merupakan kombinasi nama proyek dan stempel waktu saat model dibuat.

Untuk melatih model Anda, Label Kustom Amazon Rekognition membuat salinan pelatihan sumber dan tes citra Anda. Secara default gambar yang disalin dienkripsi saat istirahat dengan kunci yang dimiliki dan dikelola AWS. Anda juga dapat memilih untuk menggunakan milik Anda sendiriAWS KMS key. Jika Anda menggunakan kunci KMS Anda sendiri, Anda memerlukan izin berikut pada tombol KMS.

  • km:CreateGrant

  • km:DescribeKey

Untuk informasi selengkapnya, lihat Konsep AWS Key Management Service. Citra sumber Anda tidak terpengaruh.

Anda dapat menggunakan enkripsi sisi server KMS (SSE-KMS) untuk mengenkripsi latihan dan menguji gambar di bucket Amazon S3 Anda, sebelum disalin oleh Amazon Rekognition Custom Labels. Untuk mengizinkan Amazon Rekognition Custom Labels mengakses gambar Anda,AWS akun Anda memerlukan izin berikut pada kunci KMS.

  • km:GenerateDataKey

  • kms:Decrypt

Untuk informasi selengkapnya, lihat Melindungi Data Menggunakan Enkripsi Sisi Server dengan kunci KMS Disimpan di AWS Key Management Service (SSE-KMS).

Setelah melatih model, Anda dapat mengevaluasi kinerjanya dan melakukan perbaikan. Untuk informasi selengkapnya, lihat Meningkatkan model Label Kustom Amazon Rekognition yang terlatih.

Untuk tugas model lainnya, seperti menandai model, lihatMengelola model Label Kustom Amazon Rekognition.

Melatih model (Konsol)

Anda dapat menggunakan konsol Label Kustom Amazon Rekognition untuk melatih sebuah model.

Pelatihan membutuhkan proyek dengan kumpulan data pelatihan dan kumpulan data pengujian. Jika proyek Anda tidak memiliki kumpulan data pengujian, konsol Label Kustom Amazon Rekognition membagi set data pelatihan selama pelatihan untuk membuatnya untuk proyek Anda. Gambar yang dipilih adalah pengambilan sampel representatif dan tidak digunakan dalam kumpulan data pelatihan. Sebaiknya pisahkan kumpulan data latihan Anda hanya jika Anda tidak memiliki kumpulan data pengujian alternatif yang dapat Anda gunakan. Memisahkan kumpulan data pelatihan mengurangi jumlah gambar yang tersedia untuk pelatihan.

catatan

Anda dikenai biaya untuk jumlah waktu yang dibutuhkan untuk melatih sebuah model. Untuk informasi selengkapnya, lihat Jam latihan.

Untuk melatih model Anda (konsol)
  1. Buka konsol Amazon Rekognition di https://console.aws.amazon.com/rekognition/.

  2. Pilih Gunakan Label Kustom.

  3. Di panel navigasi sebelah kiri, pilih Proyek.

  4. Di halaman Project, pilih proyek yang ingin Anda latih.

  5. Pada halaman Proyek, pilih model Kereta.

  6. (Opsional) Jika Anda ingin menggunakan kunci enkripsi AWS KMS Anda sendiri, lakukan hal berikut:

    1. Di Enkripsi data gambar pilih Sesuaikan pengaturan enkripsi (lanjutan).

    2. Di encryption.aws_kms_key masukkan Amazon Resource Name (ARN) kunci Anda, atau pilih kunci AWS KMS yang ada. Untuk membuat kunci baru, pilih Buat kunci AWS IMS.

  7. (Opsional) jika Anda ingin menambahkan tag ke model Anda lakukan hal berikut:

    1. Di bagian Tag, pilih Tambahkan tag baru.

    2. Masukkan yang berikut ini:

      1. Nama kunci di Key.

      2. Nilai kunci dalam Nilai.

    3. Untuk menambahkan lebih banyak tag, ulangi langkah 6a dan 6b.

    4. (Opsional) Jika Anda ingin menghapus tag, pilih Hapus di samping tag yang ingin Anda hapus. Jika Anda menghapus tag yang disimpan sebelumnya, tag tersebut akan dihapus saat Anda menyimpan perubahan.

  8. Pada halaman Model kereta, Pilih model Kereta. Amazon Resource Name (ARN) untuk proyek Anda harus berada di kotak edit proyek Pilih. Jika tidak, masukkan ARN untuk proyek Anda.

  9. Di Apakah Anda ingin melatih model Anda? kotak dialog, pilih model Kereta.

  10. Di bagian Model halaman proyek, Anda dapat memeriksa status saat ini diModel Status kolom, tempat pelatihan sedang berlangsung. Melatih model membutuhkan waktu beberapa saat untuk menyelesaikan suatu model.

  11. Setelah pelatihan selesai, pilih nama model. Pelatihan selesai ketika status model TRAINING_COMPLETED. Jika pelatihan gagal, bacaMendebug pelatihan model yang gagal.

  12. Langkah selanjutnya: Evaluasi model Anda. Untuk informasi lain, Meningkatkan model Label Kustom Amazon Rekognition yang terlatih.

Melatih model (SDK)

Anda melatih model dengan menelepon CreateProjectVersion. Untuk melatih model, informasi berikut diperlukan:

  • Name — Nama unik untuk versi model.

  • ARN proyek — Amazon Resource Name (ARN) proyek yang mengelola model.

  • Lokasi hasil pelatihan — Lokasi Amazon S3 tempat hasil tugas ditempatkan. Anda dapat menggunakan lokasi yang sama dengan konsol Amazon S3 bucket, atau Anda dapat memilih lokasi yang berbeda. Sebaiknya pilih lokasi yang berbeda karena ini memungkinkan Anda untuk mengatur izin dan menghindari potensi konflik penamaan dengan output pelatihan dari menggunakan konsol Label Kustom Amazon Rekognition.

Pelatihan menggunakan set data pelatihan dan pengujian yang terkait dengan proyek. Untuk informasi selengkapnya, lihat Mengelola set data.

catatan

Secara opsional, Anda dapat menentukan pelatihan dan menguji file manifes set data yang berada di luar proyek. Jika Anda membuka konsol setelah melatih model dengan file manifes eksternal, Amazon Rekognition Custom Labels membuat kumpulan data untuk Anda dengan menggunakan kumpulan file manifes terakhir yang digunakan untuk latihan. Anda tidak dapat lagi melatih versi model untuk proyek dengan menentukan file manifes eksternal. Untuk informasi lebih lanjut, lihat CreatePrjectVersion.

Respons dariCreateProjectVersion adalah ARN yang Anda gunakan untuk mengidentifikasi versi model dalam permintaan berikutnya. Anda juga dapat menggunakan ARN untuk mengamankan versi model. Untuk informasi selengkapnya, lihat Mengamankan proyek Label Kustom Amazon Rekognition.

Melatih versi model membutuhkan waktu beberapa saat untuk menyelesaikan suatu versi model. Contoh Python dan Java dalam topik ini menggunakan pelayan untuk menunggu pelatihan selesai. Seorang pelayan adalah metode utilitas yang jajak pendapat untuk negara tertentu terjadi. Atau, Anda bisa mendapatkan status pelatihan saat ini dengan memanggilDescribeProjectVersions. Pelatihan selesai ketika nilaiStatus bidangTRAINING_COMPLETED. Setelah pelatihan selesai, Anda dapat mengevaluasi kualitas model dengan meninjau hasil evaluasi.

Melatih model (SDK)

Contoh berikut menunjukkan cara melatih model dengan menggunakan set data pelatihan dan pengujian yang terkait dengan proyek.

Untuk melatih model (SDK)
  1. Jika Anda belum melakukannya, instal dan konfigurasikanAWS CLI danAWS SDK. Untuk informasi selengkapnya, lihat Langkah 4: Siapkan AWS CLI dan AWS SDK.

  2. Gunakan contoh kode berikut untuk melatih proyek.

    AWS CLI

    Contoh berikut membuat model. Set data pelatihan dibagi untuk membuat kumpulan data pengujian. Ganti yang berikut:

    • my_project_arndengan Amazon Resource Name (ARN) proyek.

    • version_namedengan nama versi unik yang Anda pilih.

    • output_bucketdengan nama bucket Amazon S3 Rekognition Kustom Label Kustom menyimpan hasil pelatihan.

    • output_folderdengan nama folder tempat hasil pelatihan disimpan.

    • (parameter opsional)--kms-key-id dengan pengenal untuk kunci utama pelanggan AWS Key Management Service.

    aws rekognition create-project-version \ --project-arn project_arn \ --version-name version_name \ --output-config '{"S3Bucket":"output_bucket", "S3KeyPrefix":"output_folder"}' \ --profile custom-labels-access
    Python

    Contoh berikut membuat model. Menyediakan argumen baris perintah berikut:

    • project_arn— Amazon Resource Name (ARN) proyek.

    • version_name- Nama versi unik untuk model yang Anda pilih.

    • output_bucket— nama bucket Amazon S3 Rekognition Kustom Label Kustom menyimpan hasil pelatihan.

    • output_folder— nama folder tempat hasil pelatihan disimpan.

    Secara opsional, berikan parameter baris perintah folowing untuk melampirkan tag ke model Anda:

    • tag— nama tag pilihan Anda yang ingin Anda lampirkan ke model.

    • tag_valuenilai tag.

    #Copyright 2023 Amazon.com, Inc. or its affiliates. All Rights Reserved. #PDX-License-Identifier: MIT-0 (For details, see https://github.com/awsdocs/amazon-rekognition-custom-labels-developer-guide/blob/master/LICENSE-SAMPLECODE.) import argparse import logging import json import boto3 from botocore.exceptions import ClientError logger = logging.getLogger(__name__) def train_model(rek_client, project_arn, version_name, output_bucket, output_folder, tag_key, tag_key_value): """ Trains an Amazon Rekognition Custom Labels model. :param rek_client: The Amazon Rekognition Custom Labels Boto3 client. :param project_arn: The ARN of the project in which you want to train a model. :param version_name: A version for the model. :param output_bucket: The S3 bucket that hosts training output. :param output_folder: The path for the training output within output_bucket :param tag_key: The name of a tag to attach to the model. Pass None to exclude :param tag_key_value: The value of the tag. Pass None to exclude """ try: #Train the model status="" logger.info("training model version %s for project %s", version_name, project_arn) output_config = json.loads( '{"S3Bucket": "' + output_bucket + '", "S3KeyPrefix": "' + output_folder + '" } ' ) tags={} if tag_key is not None and tag_key_value is not None: tags = json.loads( '{"' + tag_key + '":"' + tag_key_value + '"}' ) response=rek_client.create_project_version( ProjectArn=project_arn, VersionName=version_name, OutputConfig=output_config, Tags=tags ) logger.info("Started training: %s", response['ProjectVersionArn']) # Wait for the project version training to complete. project_version_training_completed_waiter = rek_client.get_waiter('project_version_training_completed') project_version_training_completed_waiter.wait(ProjectArn=project_arn, VersionNames=[version_name]) # Get the completion status. describe_response=rek_client.describe_project_versions(ProjectArn=project_arn, VersionNames=[version_name]) for model in describe_response['ProjectVersionDescriptions']: logger.info("Status: %s", model['Status']) logger.info("Message: %s", model['StatusMessage']) status=model['Status'] logger.info("finished training") return response['ProjectVersionArn'], status except ClientError as err: logger.exception("Couldn't create model: %s", err.response['Error']['Message'] ) raise def add_arguments(parser): """ Adds command line arguments to the parser. :param parser: The command line parser. """ parser.add_argument( "project_arn", help="The ARN of the project in which you want to train a model" ) parser.add_argument( "version_name", help="A version name of your choosing." ) parser.add_argument( "output_bucket", help="The S3 bucket that receives the training results." ) parser.add_argument( "output_folder", help="The folder in the S3 bucket where training results are stored." ) parser.add_argument( "--tag_name", help="The name of a tag to attach to the model", required=False ) parser.add_argument( "--tag_value", help="The value for the tag.", required=False ) def main(): logging.basicConfig(level=logging.INFO, format="%(levelname)s: %(message)s") try: # Get command line arguments. parser = argparse.ArgumentParser(usage=argparse.SUPPRESS) add_arguments(parser) args = parser.parse_args() print(f"Training model version {args.version_name} for project {args.project_arn}") # Train the model. session = boto3.Session(profile_name='custom-labels-access') rekognition_client = session.client("rekognition") model_arn, status=train_model(rekognition_client, args.project_arn, args.version_name, args.output_bucket, args.output_folder, args.tag_name, args.tag_value) print(f"Finished training model: {model_arn}") print(f"Status: {status}") except ClientError as err: logger.exception("Problem training model: %s", err) print(f"Problem training model: {err}") except Exception as err: logger.exception("Problem training model: %s", err) print(f"Problem training model: {err}") if __name__ == "__main__": main()
    Java V2

    Contoh berikut melatih model. Menyediakan argumen baris perintah berikut:

    • project_arn— Amazon Resource Name (ARN) proyek.

    • version_name- Nama versi unik untuk model yang Anda pilih.

    • output_bucket— nama bucket Amazon S3 Rekognition Kustom Label Kustom menyimpan hasil pelatihan.

    • output_folder— nama folder tempat hasil pelatihan disimpan.

    /* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. SPDX-License-Identifier: Apache-2.0 */ package com.example.rekognition; import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider; import software.amazon.awssdk.core.waiters.WaiterResponse; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.rekognition.RekognitionClient; import software.amazon.awssdk.services.rekognition.model.CreateProjectVersionRequest; import software.amazon.awssdk.services.rekognition.model.CreateProjectVersionResponse; import software.amazon.awssdk.services.rekognition.model.DescribeProjectVersionsRequest; import software.amazon.awssdk.services.rekognition.model.DescribeProjectVersionsResponse; import software.amazon.awssdk.services.rekognition.model.OutputConfig; import software.amazon.awssdk.services.rekognition.model.ProjectVersionDescription; import software.amazon.awssdk.services.rekognition.model.RekognitionException; import software.amazon.awssdk.services.rekognition.waiters.RekognitionWaiter; import java.util.Optional; import java.util.logging.Level; import java.util.logging.Logger; public class TrainModel { public static final Logger logger = Logger.getLogger(TrainModel.class.getName()); public static String trainMyModel(RekognitionClient rekClient, String projectArn, String versionName, String outputBucket, String outputFolder) { try { OutputConfig outputConfig = OutputConfig.builder().s3Bucket(outputBucket).s3KeyPrefix(outputFolder).build(); logger.log(Level.INFO, "Training Model for project {0}", projectArn); CreateProjectVersionRequest createProjectVersionRequest = CreateProjectVersionRequest.builder() .projectArn(projectArn).versionName(versionName).outputConfig(outputConfig).build(); CreateProjectVersionResponse response = rekClient.createProjectVersion(createProjectVersionRequest); logger.log(Level.INFO, "Model ARN: {0}", response.projectVersionArn()); logger.log(Level.INFO, "Training model..."); // wait until training completes DescribeProjectVersionsRequest describeProjectVersionsRequest = DescribeProjectVersionsRequest.builder() .versionNames(versionName) .projectArn(projectArn) .build(); RekognitionWaiter waiter = rekClient.waiter(); WaiterResponse<DescribeProjectVersionsResponse> waiterResponse = waiter .waitUntilProjectVersionTrainingCompleted(describeProjectVersionsRequest); Optional<DescribeProjectVersionsResponse> optionalResponse = waiterResponse.matched().response(); DescribeProjectVersionsResponse describeProjectVersionsResponse = optionalResponse.get(); for (ProjectVersionDescription projectVersionDescription : describeProjectVersionsResponse .projectVersionDescriptions()) { System.out.println("ARN: " + projectVersionDescription.projectVersionArn()); System.out.println("Status: " + projectVersionDescription.statusAsString()); System.out.println("Message: " + projectVersionDescription.statusMessage()); } return response.projectVersionArn(); } catch (RekognitionException e) { logger.log(Level.SEVERE, "Could not train model: {0}", e.getMessage()); throw e; } } public static void main(String args[]) { String versionName = null; String projectArn = null; String projectVersionArn = null; String bucket = null; String location = null; final String USAGE = "\n" + "Usage: " + "<project_name> <version_name> <output_bucket> <output_folder>\n\n" + "Where:\n" + " project_arn - The ARN of the project that you want to use. \n\n" + " version_name - A version name for the model.\n\n" + " output_bucket - The S3 bucket in which to place the training output. \n\n" + " output_folder - The folder within the bucket that the training output is stored in. \n\n"; if (args.length != 4) { System.out.println(USAGE); System.exit(1); } projectArn = args[0]; versionName = args[1]; bucket = args[2]; location = args[3]; try { // Get the Rekognition client. RekognitionClient rekClient = RekognitionClient.builder() .credentialsProvider(ProfileCredentialsProvider.create("custom-labels-access")) .region(Region.US_WEST_2) .build(); // Train model projectVersionArn = trainMyModel(rekClient, projectArn, versionName, bucket, location); System.out.println(String.format("Created model: %s for Project ARN: %s", projectVersionArn, projectArn)); rekClient.close(); } catch (RekognitionException rekError) { logger.log(Level.SEVERE, "Rekognition client error: {0}", rekError.getMessage()); System.exit(1); } } }
  3. Jika pelatihan gagal, bacaMendebug pelatihan model yang gagal.