删除 Amazon Rekognition Custom Labels 模型 - Rekognition

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

删除 Amazon Rekognition Custom Labels 模型

可以使用 Amazon Rekognition Custom Labels 控制台或 DeleteProjectVersion API 删除模型。无法删除正在运行或正在训练的模型。要停止正在运行的模型,请使用 StopProjectVersion API。有关更多信息,请参阅停止 Amazon Rekognition Custom Labels 模型 (SDK)。如果模型正在训练,请等到模型训练完成后再将其删除。

已删除的模型无法取消删除。

删除 Amazon Rekognition Custom Labels 模型(控制台)

以下过程说明了如何从项目详细信息页面删除模型。也可以从模型详细信息页面删除模型。

删除模型(控制台)
  1. 通过以下网址打开 Amazon Rekognition 控制台:https://console.aws.amazon.com/rekognition/

  2. 选择使用自定义标签

  3. 选择开始

  4. 在左侧导航窗格中,选择项目

  5. 选择包含要删除的模型的项目。随后将打开项目详细信息页面。

  6. 模型部分中,选择要删除的模型。

    注意

    如果无法选择模型,则表示该模型要么正在运行,要么正在训练,因此无法删除。查看状态字段,然后在停止正在运行的模型后重试,或者等到训练完成。

  7. 选择删除模型,随后将显示删除模型对话框。

  8. 输入 delete 以确认删除。

  9. 选择删除以删除模型。删除模型可能需要一段时间才能完成。

    注意

    如果在模型删除过程中关闭对话框,模型仍会被删除。

删除 Amazon Rekognition Custom Labels 模型 (SDK)

可通过调用 DeleteProjectVersion 并提供要删除的模型的 Amazon 资源名称 (ARN) 来删除 Amazon Rekognition Custom Labels 模型。可以从 Amazon Rekognition Custom Labels 控制台中的模型详细信息页面上的使用您的模型部分获取模型的 ARN。或者,也可以调用 DescribeProjectVersions 并提供以下信息。

  • 与模型关联的项目的 ARN (ProjectArn)。

  • 模型的版本名称 (VersionNames)。

模型 ARN 是 DescribeProjectVersions 响应中的 ProjectVersionDescription 对象中的 ProjectVersionArn 字段。

无法删除正在运行或正在训练的模型。要确定模型是否正在运行或训练,可以调用 DescribeProjectVersions 并检查模型的 ProjectVersionDescription 对象的 Status 字段。要停止正在运行的模型,请使用 StopProjectVersion API。有关更多信息,请参阅停止 Amazon Rekognition Custom Labels 模型 (SDK)。必须等到模型完成训练后才能将其删除。

删除模型 (SDK)
  1. 安装并配置 AWS CLI 和 AWS SDK(如果尚未如此)。有关更多信息,请参阅步骤 4:设置 AWS CLI 和 AWS 软件开发工具包

  2. 使用以下代码删除模型。

    AWS CLI

    project-version-arn 的值更改为要删除的项目的名称。

    aws rekognition delete-project-version --project-version-arn model_arn \ --profile custom-labels-access
    Python

    提供以下命令行参数:

    • project_arn:包含要删除的模型的项目的 ARN。

    • model_arn:要删除的模型版本的 ARN。

    # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: Apache-2.0 """ Purpose Shows how to delete an existing Amazon Rekognition Custom Labels model. """ import argparse import logging import time import boto3 from botocore.exceptions import ClientError logger = logging.getLogger(__name__) def find_forward_slash(input_string, n): """ Returns the location of '/' after n number of occurences. :param input_string: The string you want to search : n: the occurence that you want to find. """ position = input_string.find('/') while position >= 0 and n > 1: position = input_string.find('/', position + 1) n -= 1 return position def delete_model(rek_client, project_arn, model_arn): """ Deletes an Amazon Rekognition Custom Labels model. :param rek_client: The Amazon Rekognition Custom Labels Boto3 client. :param model_arn: The ARN of the model version that you want to delete. """ try: # Delete the model logger.info("Deleting dataset: {%s}", model_arn) rek_client.delete_project_version(ProjectVersionArn=model_arn) # Get the model version name start = find_forward_slash(model_arn, 3) + 1 end = find_forward_slash(model_arn, 4) version_name = model_arn[start:end] deleted = False # model might not be deleted yet, so wait deletion finishes. while deleted is False: describe_response = rek_client.describe_project_versions(ProjectArn=project_arn, VersionNames=[version_name]) if len(describe_response['ProjectVersionDescriptions']) == 0: deleted = True else: logger.info("Waiting for model deletion %s", model_arn) time.sleep(5) logger.info("model deleted: %s", model_arn) return True except ClientError as err: logger.exception("Couldn't delete model - %s: %s", model_arn, 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 that contains the model that you want to delete." ) parser.add_argument( "model_arn", help="The ARN of the model version that you want to delete." ) def confirm_model_deletion(model_arn): """ Confirms deletion of the model. Returns True if delete entered. :param model_arn: The ARN of the model that you want to delete. """ print(f"Are you sure you wany to delete model {model_arn} ?\n", model_arn) start = input("Enter delete to delete your model: ") if start == "delete": return True else: return 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() if confirm_model_deletion(args.model_arn) is True: print(f"Deleting model: {args.model_arn}") # Delete the model. session = boto3.Session(profile_name='custom-labels-access') rekognition_client = session.client("rekognition") delete_model(rekognition_client, args.project_arn, args.model_arn) print(f"Finished deleting model: {args.model_arn}") else: print(f"Not deleting model {args.model_arn}") except ClientError as err: print(f"Problem deleting model: {err}") if __name__ == "__main__": main()
    Java V2
    • project_arn:包含要删除的模型的项目的 ARN。

    • model_arn:要删除的模型版本的 ARN。

    //Copyright 2021 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 java.net.URI; import java.util.logging.Level; import java.util.logging.Logger; import software.amazon.awssdk.services.rekognition.RekognitionClient; import software.amazon.awssdk.services.rekognition.model.DeleteProjectVersionRequest; import software.amazon.awssdk.services.rekognition.model.DeleteProjectVersionResponse; import software.amazon.awssdk.services.rekognition.model.DescribeProjectVersionsRequest; import software.amazon.awssdk.services.rekognition.model.DescribeProjectVersionsResponse; import software.amazon.awssdk.services.rekognition.model.RekognitionException; public class DeleteModel { public static final Logger logger = Logger.getLogger(DeleteModel.class.getName()); public static int findForwardSlash(String modelArn, int n) { int start = modelArn.indexOf('/'); while (start >= 0 && n > 1) { start = modelArn.indexOf('/', start + 1); n -= 1; } return start; } public static void deleteMyModel(RekognitionClient rekClient, String projectArn, String modelArn) throws InterruptedException { try { logger.log(Level.INFO, "Deleting model: {0}", projectArn); // Delete the model DeleteProjectVersionRequest deleteProjectVersionRequest = DeleteProjectVersionRequest.builder() .projectVersionArn(modelArn).build(); DeleteProjectVersionResponse response = rekClient.deleteProjectVersion(deleteProjectVersionRequest); logger.log(Level.INFO, "Status: {0}", response.status()); // Get the model version int start = findForwardSlash(modelArn, 3) + 1; int end = findForwardSlash(modelArn, 4); String versionName = modelArn.substring(start, end); Boolean deleted = false; DescribeProjectVersionsRequest describeProjectVersionsRequest = DescribeProjectVersionsRequest.builder() .projectArn(projectArn).versionNames(versionName).build(); // Wait until model is deleted. do { DescribeProjectVersionsResponse describeProjectVersionsResponse = rekClient .describeProjectVersions(describeProjectVersionsRequest); if (describeProjectVersionsResponse.projectVersionDescriptions().size()==0) { logger.log(Level.INFO, "Waiting for model deletion: {0}", modelArn); Thread.sleep(5000); } else { deleted = true; logger.log(Level.INFO, "Model deleted: {0}", modelArn); } } while (Boolean.FALSE.equals(deleted)); logger.log(Level.INFO, "Model deleted: {0}", modelArn); } catch ( RekognitionException e) { logger.log(Level.SEVERE, "Client error occurred: {0}", e.getMessage()); throw e; } } public static void main(String args[]) { final String USAGE = "\n" + "Usage: " + "<project_arn> <model_arn>\n\n" + "Where:\n" + " project_arn - The ARN of the project that contains the model that you want to delete.\n\n" + " model_version - The ARN of the model that you want to delete.\n\n"; if (args.length != 2) { System.out.println(USAGE); System.exit(1); } String projectArn = args[0]; String modelVersion = args[1]; try { RekognitionClient rekClient = RekognitionClient.builder().build(); // Delete the model deleteMyModel(rekClient, projectArn, modelVersion); System.out.println(String.format("model deleted: %s", modelVersion)); rekClient.close(); } catch (RekognitionException rekError) { logger.log(Level.SEVERE, "Rekognition client error: {0}", rekError.getMessage()); System.exit(1); } catch (InterruptedException intError) { logger.log(Level.SEVERE, "Exception while sleeping: {0}", intError.getMessage()); System.exit(1); } } }