使用清单文件创建数据集 (SDK) - Amazon Lookout for Vision

终止支持通知:2025年10月31日, AWS 将停止对亚马逊 Lookout for Vision 的支持。2025 年 10 月 31 日之后,你将无法再访问 Lookout for Vision 主机或 Lookout for Vision 资源。如需更多信息,请访问此博客文章

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用清单文件创建数据集 (SDK)

您可以使用该CreateDataset操作来创建与 Amazon Lookout for Vision 项目相关的数据集。

如果要使用单个数据集进行训练和测试,请将 DatasetType 值设置为 train 以创建单个数据集。在训练过程中,数据集会在内部进行拆分,形成训练数据集和测试数据集。您无权访问拆分后的训练及测试数据集。如果要使用单独的测试数据集,请再次调用 CreateDataset,并将 DatasetType 值设置为 test。在训练期间,将使用训练数据集和测试数据集来训练和测试模型。

您可以选择使用DatasetSource参数来指定用于填充数据集的 G SageMaker round Truth 格式清单文件的位置。在这种情况下,对 CreateDataset 的调用是异步的。要检查当前状态,请调用 DescribeDataset。有关更多信息,请参阅 查看您的数据集。如果在导入过程中出现验证错误,则将的值设置Status为 CREATE _,FAILED并设置状态消息 (StatusMessage)。

提示

如果要创建包含开始使用示例数据集的数据集,请使用脚本在步骤 1:创建清单文件并上传图像中创建的清单文件(getting-started/dataset-files/manifests/train.manifest)。

如果要创建包含电路板示例图像的数据集,您有两种选择:

  1. 使用代码创建清单文件。Amazon Lookout for Vision Lab Python 笔记本展示了如何为电路板示例图像创建清单文件。或者,使用代码示例存储库中的数据集示例 AWS 代码。

  2. 如果您已经使用 Amazon Lookout for Vision 控制台创建了包含电路板示例图像的数据集,请重复使用 Amazon Lookout for Vision 为您创建的清单文件。训练和测试清单文件的位置为 s3://bucket/datasets/project name/train or test/manifests/output/output.manifest

如果未指定 DatasetSource,则会创建一个空数据集。在这种情况下,对 CreateDataset 的调用是同步的。稍后,您可以通过调用将图像标记到数据集中UpdateDatasetEntries。有关代码示例,请参阅 添加更多图片 (SDK)

如果要替换数据集,请先使用删除现有数据集,DeleteDataset然后通过调用创建相同数据集类型的新数据集CreateDataset。有关更多信息,请参阅 删除数据集

创建数据集后,即可创建模型。有关更多信息,请参阅 训练模型 (SDK)

您可以通过调用来查看数据集中标注的图像(JSON线条)ListDatasetEntries。您可以通过调用 UpdateDatasetEntries 来添加已标注的图像。

要查看与测试数据集和训练数据集相关的信息,请参阅 查看您的数据集

创建数据集 (SDK)
  1. 如果您尚未这样做,请安装并配置 AWS CLI 和 AWS SDKs。有关更多信息,请参阅 第 4 步:设置 AWS CLI 和 AWS SDKs

  2. 使用以下示例代码创建一个数据集。

    CLI

    更改以下值:

    • project-name 更改为要与数据集相关联的项目的名称。

    • dataset-type 更改为要创建的数据集类型(traintest)。

    • dataset-source 更改为清单文件的 Amazon S3 位置。

    • Bucket 更改为包含清单文件的 Amazon S3 桶的名称。

    • Key 更改为包含 Amazon S3 桶中清单文件的路径和文件名。

    aws lookoutvision create-dataset --project-name project\ --dataset-type train or test\ --dataset-source '{ "GroundTruthManifest": { "S3Object": { "Bucket": "bucket", "Key": "manifest file" } } }' \ --profile lookoutvision-access
    Python

    此代码取自 AWS 文档SDK示例 GitHub 存储库。请在此处查看完整示例。

    @staticmethod def create_dataset(lookoutvision_client, project_name, manifest_file, dataset_type): """ Creates a new Lookout for Vision dataset :param lookoutvision_client: A Lookout for Vision Boto3 client. :param project_name: The name of the project in which you want to create a dataset. :param bucket: The bucket that contains the manifest file. :param manifest_file: The path and name of the manifest file. :param dataset_type: The type of the dataset (train or test). """ try: bucket, key = manifest_file.replace("s3://", "").split("/", 1) logger.info("Creating %s dataset type...", dataset_type) dataset = { "GroundTruthManifest": {"S3Object": {"Bucket": bucket, "Key": key}} } response = lookoutvision_client.create_dataset( ProjectName=project_name, DatasetType=dataset_type, DatasetSource=dataset, ) logger.info("Dataset Status: %s", response["DatasetMetadata"]["Status"]) logger.info( "Dataset Status Message: %s", response["DatasetMetadata"]["StatusMessage"], ) logger.info("Dataset Type: %s", response["DatasetMetadata"]["DatasetType"]) # Wait until either created or failed. finished = False status = "" dataset_description = {} while finished is False: dataset_description = lookoutvision_client.describe_dataset( ProjectName=project_name, DatasetType=dataset_type ) status = dataset_description["DatasetDescription"]["Status"] if status == "CREATE_IN_PROGRESS": logger.info("Dataset creation in progress...") time.sleep(2) elif status == "CREATE_COMPLETE": logger.info("Dataset created.") finished = True else: logger.info( "Dataset creation failed: %s", dataset_description["DatasetDescription"]["StatusMessage"], ) finished = True if status != "CREATE_COMPLETE": message = dataset_description["DatasetDescription"]["StatusMessage"] logger.exception("Couldn't create dataset: %s", message) raise Exception(f"Couldn't create dataset: {message}") except ClientError: logger.exception("Service error: Couldn't create dataset.") raise
    Java V2

    此代码取自 AWS 文档SDK示例 GitHub 存储库。请在此处查看完整示例。

    /** * Creates an Amazon Lookout for Vision dataset from a manifest file. * 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 * dataset. * @param datasetType The type of dataset that you want to create (train or * test). * @param bucket The S3 bucket that contains the manifest file. * @param manifestFile The name and location of the manifest file within the S3 * bucket. * @return DatasetDescription The description of the created dataset. */ public static DatasetDescription createDataset(LookoutVisionClient lfvClient, String projectName, String datasetType, String bucket, String manifestFile) throws LookoutVisionException, InterruptedException { logger.log(Level.INFO, "Creating {0} dataset for project {1}", new Object[] { projectName, datasetType }); // Build the request. If no bucket supplied, setup for empty dataset creation. CreateDatasetRequest createDatasetRequest = null; if (bucket != null && manifestFile != null) { InputS3Object s3Object = InputS3Object.builder() .bucket(bucket) .key(manifestFile) .build(); DatasetGroundTruthManifest groundTruthManifest = DatasetGroundTruthManifest.builder() .s3Object(s3Object) .build(); DatasetSource datasetSource = DatasetSource.builder() .groundTruthManifest(groundTruthManifest) .build(); createDatasetRequest = CreateDatasetRequest.builder() .projectName(projectName) .datasetType(datasetType) .datasetSource(datasetSource) .build(); } else { createDatasetRequest = CreateDatasetRequest.builder() .projectName(projectName) .datasetType(datasetType) .build(); } lfvClient.createDataset(createDatasetRequest); DatasetDescription datasetDescription = null; boolean finished = false; // Wait until dataset is created, or failure occurs. while (!finished) { datasetDescription = describeDataset(lfvClient, projectName, datasetType); switch (datasetDescription.status()) { case CREATE_COMPLETE: logger.log(Level.INFO, "{0}dataset created for project {1}", new Object[] { datasetType, projectName }); finished = true; break; case CREATE_IN_PROGRESS: logger.log(Level.INFO, "{0} dataset creating for project {1}", new Object[] { datasetType, projectName }); TimeUnit.SECONDS.sleep(5); break; case CREATE_FAILED: logger.log(Level.SEVERE, "{0} dataset creation failed for project {1}. Error {2}", new Object[] { datasetType, projectName, datasetDescription.statusAsString() }); finished = true; break; default: logger.log(Level.SEVERE, "{0} error when creating {1} dataset for project {2}", new Object[] { datasetType, projectName, datasetDescription.statusAsString() }); finished = true; break; } } logger.log(Level.INFO, "Dataset info. Status: {0}\n Message: {1} }", new Object[] { datasetDescription.statusAsString(), datasetDescription.statusMessage() }); return datasetDescription; }
  3. 按照 训练模型 (SDK) 部分的步骤训练您的模型。