终止支持通知: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
)。
如果要创建包含电路板示例图像的数据集,您有两种选择:
-
使用代码创建清单文件。Amazon Lookout for Vision Lab Python 笔记本展示了如何为电路板示例图像创建清单文件。或者,使用代码示例存储库中的数据集示例 AWS 代码。
-
如果您已经使用 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)
-
如果您尚未这样做,请安装并配置 AWS CLI 和 AWS SDKs。有关更多信息,请参阅 第 4 步:设置 AWS CLI 和 AWS SDKs。
-
使用以下示例代码创建一个数据集。
- CLI
-
更改以下值:
-
project-name
更改为要与数据集相关联的项目的名称。
-
dataset-type
更改为要创建的数据集类型(train
或 test
)。
-
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;
}
按照 训练模型 (SDK) 部分的步骤训练您的模型。