15、利用Amazon A2I构建人机协作图像审核流程及端到端CV管道最佳实践

利用Amazon A2I构建人机协作图像审核流程及端到端CV管道最佳实践

1. 集成Amazon A2I构建人机协作工作流

在构建人机审核工作流时,有几个关键步骤需要完成。

1.1 创建标注团队

要构建人机审核工作流,首先需要定义对数据集进行标注的标注团队。可以选择公共(Mechanical Turk)、私有(内部)或供应商(AWS Marketplace/第三方)团队来审核数据集。可以从Amazon Ground Truth控制台创建和管理团队。如果Ground Truth中已有现有团队,也可使用该团队来审核预测结果。

1.2 设置A2I人机审核工作流

接下来,创建人机审核工作流,定义任务类型、激活条件(如果使用内置任务类型)、任务模板,并使用上一步中的标注团队。可以使用内置任务类型的默认模板,也可以设计自定义模板。对于自定义模板,可以从GitHub(https://github.com/aws-samples/amazon-a2i-sample-task-uis)上的示例任务UI开始。

1.3 启动人机循环

创建好人机审核工作流后,就可以使用API操作启动人机循环。如果使用内置任务类型,将使用AWS AI服务API,如Amazon Textract的AnalyzeDocument或Amazon Rekognition的DetectModerationLabels,并将HumanLoopConfig作为参数传递。当满足人机审核工作流中定义的激活条件时,Amazon Textract或Amazon Rekognition将启动人机循环。

下面通过一个集成Amazon Rekognition来审核不安全图像的示例,详细介绍具体操作步骤:
- 步骤1:收集图像
- 从GitHub存储库上传示例图像,可使用以下命令完成:

$ aws s3 sync 11_AmazonA2I/images s3://cv-on-aws-book-xxxx/chapter_11/images --region us-east-2
- 注意,可以使用之前创建的同一个S3存储桶。然后,导航到AWS管理控制台的Amazon SageMaker(https://us-east-2.console.aws.amazon.com/a2i/home?region=us-east-2#)。
  • 步骤2:创建工作团队
    • 在左侧导航窗格中展开Ground Truth,选择“Labeling workforces”。本示例使用私有工作团队。如果之前已创建用于图像标注的工作团队,可使用同一团队;否则,可按相关说明创建新团队。
  • 步骤3:创建人机审核工作流
    1. 在SageMaker控制台的Augmented AI部分选择“Human review workflows”,然后选择“Create human review workflow”。
    2. 在“Workflow settings”部分,为工作流提供名称、用于存储人机审核输出的S3存储桶,以及授予A2I代表您调用其他服务权限的IAM角色。
    3. 如果没有现有角色,选择“Create a new role”。可以将IAM角色权限限制为特定S3存储桶,也可以允许访问任何存储桶。在本示例中,只需提供正在使用的S3存储桶的名称。新创建的IAM角色仅有权访问S3存储桶及其内的对象。创建IAM角色后,会提示将名为AmazonAugmentedAIIntegratedAPIAccess的托管IAM策略附加到该角色。
    4. 导航到IAM控制台,在导航窗格中选择“Roles”(https://us-east-1.console.aws.amazon.com/iamv2/home#/home)。
    5. 在“Permissions”选项卡中,选择“Add permissions”,然后选择“Attach policies”,这将打开AWS账户中的所有权限策略。
    6. 搜索“AmazonAugmentedAIIntegratedAPIAccess”,选中该策略的复选框,然后选择“Attach policies”,确认策略已成功附加到角色,然后返回Amazon A2I配置。
    7. 配置任务类型,选择“Rekognition – Image moderation”。
    8. 由于选择了内置任务类型,需要配置调用人机审核的条件。可以根据标签置信度分数设置阈值来触发工作流,也可以随机发送图像样本及其标签供人工审核。本示例选择根据标签置信度分数触发人机审核,并将阈值设置在0到95之间,即当Amazon Rekognition识别的标签置信度分数在0到95之间时,A2I将启动人机循环。
    9. 提供任务模板信息,可以使用默认模板或自定义模板。
    10. 确认模板设计并为工作人员提供任务描述,默认模板带有示例说明,可根据需要更新。可以选择“See a sample worker task”来测试任务将如何呈现给工作人员。
    11. 选择执行审核的工作者类型,本示例选择“Private worker type”,并选择现有团队或新创建的团队。在“Additional configuration”部分,可以配置每个对象的工作者数量、任务超时时间和任务过期时间等设置。
    12. 选择“Create”,将创建一个处于“Active”状态的人机审核工作流。复制并保存工作流ARN,用于下一步。

以下是该流程的mermaid流程图:

graph LR
    A[收集图像] --> B[创建工作团队]
    B --> C[创建人机审核工作流]
    C --> D[启动人机循环]
    D --> E[检查人机循环状态]
    E --> F[审核输出数据]
  • 步骤4:启动人机循环
    使用Rekognition的DetectModerationLabels API启动人机循环。以下是使用AWS CLI进行API调用的示例请求:
aws rekognition detect-moderation-labels \
    --region us-east-2 \
    --image "S3Object={Bucket='cv-on-aws-book-xxxx', Name='chapter_11/images/image1.jpg'}" \
    --human-loop-config '{"HumanLoopName": "image-review-human-loop", "FlowDefinitionArn": "arn:aws:sagemaker:us-east-2:xxxxxxxxxxxx:flow-definition/unsafe-image-review-workflow", "DataAttributes": {"ContentClassifiers": ["FreeOfPersonallyIdentifiableInformation", "FreeOfAdultContent"]}}'
- 响应示例:
{
    "ModerationLabels": [
        {
            "Confidence": 97.1685562133789,
            "Name": "Alcoholic Beverages",
            "ParentName": "Alcohol"
        },
        {
            "Confidence": 97.1685562133789,
            "Name": "Alcohol",
            "ParentName": ""
        }
    ],
    "ModerationModelVersion": "6.0",
    "HumanLoopActivationOutput": {
        "HumanLoopActivationReasons": [],
        "HumanLoopActivationConditionsEvaluationResults": "{\"Conditions\":[{\"And\":[{\"ConditionType\":\"ModerationLabelConfidenceCheck\",\"ConditionParameters\":{\"ModerationLabelName\":\"*\",\"ConfidenceLessThan\":95.0},\"EvaluationResult\":false},{\"ConditionType\":\"ModerationLabelConfidenceCheck\",\"ConditionParameters\":{\"ModerationLabelName\":\"*\",\"ConfidenceGreaterThan\":0.0},\"EvaluationResult\":true}],\"EvaluationResult\":false}]}"
    }
}
- 由于识别标签的置信度分数为97%,高于95%的阈值,人机循环未被触发。
- 尝试另一个样本图像:
aws rekognition detect-moderation-labels \
    --region us-east-2 \
    --image "S3Object={Bucket='cv-on-aws-book-xxxx', Name='chapter_11/images/image2.jpg'}" \
    --human-loop-config '{"HumanLoopName": "image-review-human-loop", "FlowDefinitionArn": "arn:aws:sagemaker:us-east-2:xxxxxxxxxxxx:flow-definition/unsafe-image-review-workflow", "DataAttributes": {"ContentClassifiers": ["FreeOfPersonallyIdentifiableInformation", "FreeOfAdultContent"]}}'
- 响应示例:
{
    "ModerationLabels": [
        {
            "Confidence": 90.10928344726562,
            "Name": "Alcoholic Beverages",
            "ParentName": "Alcohol"
        },
        {
            "Confidence": 90.10928344726562,
            "Name": "Alcohol",
            "ParentName": ""
        }
    ],
    "ModerationModelVersion": "6.0",
    "HumanLoopActivationOutput": {
        "HumanLoopArn": "arn:aws:sagemaker:us-east-2:xxxxxxxxxxxx:human-loop/image-review-human-loop",
        "HumanLoopActivationReasons": [
            "ConditionsEvaluation"
        ],
        "HumanLoopActivationConditionsEvaluationResults": "{\"Conditions\":[{\"And\":[{\"ConditionType\":\"ModerationLabelConfidenceCheck\",\"ConditionParameters\":{\"ModerationLabelName\":\"*\",\"ConfidenceLessThan\":95.0},\"EvaluationResult\":true},{\"ConditionType\":\"ModerationLabelConfidenceCheck\",\"ConditionParameters\":{\"ModerationLabelName\":\"*\",\"ConfidenceGreaterThan\":0.0},\"EvaluationResult\":true}],\"EvaluationResult\":true}]}"
    }
}
- 由于识别标签的置信度分数为90%,低于95%的阈值,人机循环被触发。登录标注门户,会看到待处理的任务,选择“Start working”,按照提示操作并提交审核结果。
  • 步骤5:检查人机循环状态
    对GitHub存储库中的所有示例图像调用Amazon Rekognition API,每个循环需提供唯一名称。分析完所有图像后,可在SageMaker控制台的Amazon A2I门户中查看人机循环被调用的实例,选择任一循环可获取更多详细信息,如状态和输出位置。
  • 步骤6:审核输出数据
    工作团队完成整个数据集的审核后,可让客户端应用程序审核和处理输出数据。要在本地审核输出数据,可从人机审核工作流中指定的S3存储桶位置下载输出文件。使用以下S3 API将对象复制到本地机器或Jupyter Notebook:
aws s3 cp s3://cv-on-aws-book-xxxx/chapter_11/review_data/unsafe-image-review-workflow/2022/12/22/19/25/33/image-review-human-loop/output.json .

输出数据中的关键信息位于 humanAnswers 键内,显示工作人员接受任务的时间、对审核标签的响应、完成任务花费的时间以及工作人员ID。可根据 answerContent 键中的信息在应用程序中处理输入数据。输出文件还包括输入内容,如图像位置和名称,以及Amazon Rekognition对每个标签的置信度分数响应。

2. 端到端CV管道设计最佳实践

在设计端到端CV管道时,需要考虑多个方面的最佳实践。

2.1 定义CV可解决的问题并处理数据

设计CV系统的关键第一步是定义要解决的问题和期望的业务成果。涉及相关利益相关者,识别痛点和CV可解决的方案,了解解决问题的约束和要求,评估可用数据,明确成功的标准并确定关键绩效指标(KPIs)。以下是该过程中需要考虑的其他问题列表:
| 问题 | 描述 |
| ---- | ---- |
| 解决方案的目标是什么? | 是增加收入、提供可操作的见解、减少手动流程还是其他? |
| 解决方案的时间线是怎样的? | - |
| 模型将如何集成到下游系统? | - |
| 将处理何种类型的数据? | - |
| 数据隐私要求是什么,如何解决? | - |
| 需要哪些资源(网络、计算、存储)? | - |
| 模型训练将如何进行,如何测试? | - |
| 需要优化哪些性能指标? | - |
| 如何监控模型的偏差和公平性? | - |

确定CV可解决的问题并明确业务目标后,进入数据处理阶段。采样是收集用于训练CV模型数据的关键步骤。为确定最佳数据采样方法,需要定义业务目标和所需数据类型,还需考虑分析可用的总体和样本大小,以及收集数据所需的成本、时间和资源约束,同时要考虑任何法规要求、合规性和道德考量。以下是几种采样方法的概述:
- 简单随机采样 :最简单的概率采样方法。理论上,每个样本都有相等的随机选择机会。但如果稀有类仅占数据的小百分比,可能不会被选中。
- 系统采样 :一种概率采样方法,按相同间隔选择数据,如每隔k个元素选择一个。
- 聚类采样 :将总体划分为称为聚类的组,通常基于地理位置。然后随机选择这些聚类。
- 分层采样 :与聚类采样类似,但根据特定特征将总体划分为组或层。
- 便利采样 :一种非概率(非随机)采样方法,根据可用数据进行选择。
- 加权采样 :为样本中的每个项目分配权重,其被选中的概率由权重决定。
- 水库采样 :处理流数据的算法,流中的每个项目都有相等的随机选择机会。

数据标注或数据注释是为监督学习准备数据集的重要过程。收集和标注数据后,将数据拆分为训练、验证和测试数据集很重要,这可确保模型具有泛化能力,能应用于未来的未见数据。训练数据集用于学习模型参数,验证数据集用于调整超参数,测试数据集用于可靠估计模型在未见数据上的性能。一般来说,60/20/20的训练、验证和测试拆分是一种不错的方法。

数据预处理技术包括图像调整大小、图像掩码、灰度化、归一化和数据增强等。特征工程的目的是提高CV模型的性能,通过提取最重要的特征提高模型准确性,使模型更具可解释性,对数据变化更具鲁棒性。如果不使用深度学习进行特征提取,以下是CV中有用的几种特征工程技术:
- 图像滤波 :对图像应用各种滤波器,如改变颜色、模糊和增强以去除噪声。
- 图像分割 :将图像划分为不同区域或段,使段内的像素具有相似特征。

2.2 开发CV模型

在确定问题和处理好数据之后,就可以开始开发CV模型。选择合适的模型架构是关键,不同的模型架构适用于不同的任务,例如:
| 模型架构 | 适用任务 | 特点 |
| ---- | ---- | ---- |
| AlexNet | 图像分类 | 深度学习早期经典模型,引入ReLU激活函数等创新,推动了深度学习在计算机视觉领域的发展 |
| VGG | 图像分类、目标检测 | 结构简单,通过堆叠多个小卷积核来替代大卷积核,网络深度增加 |
| ResNet | 图像分类、目标检测、语义分割 | 引入残差块解决了深度网络训练中的梯度消失问题,能够训练更深的网络 |
| YOLO | 目标检测 | 实时性强,将目标检测问题转化为回归问题,能够快速检测出图像中的目标 |

在选择模型架构时,需要考虑任务的复杂度、数据集的大小、计算资源等因素。同时,还需要对模型进行训练和调优。训练过程中,需要选择合适的优化算法,如随机梯度下降(SGD)、Adagrad、Adadelta、Adam等,以最小化损失函数。调优则包括调整超参数,如学习率、批量大小、迭代次数等,以提高模型的性能。

2.3 部署和监控CV模型

模型开发完成后,需要将其部署到生产环境中。部署过程中,需要考虑以下几个方面:
- 选择合适的部署平台 :可以选择云平台(如AWS、Azure、Google Cloud等)或本地服务器进行部署。云平台具有弹性伸缩、易于管理等优点,而本地服务器则具有更高的安全性和可控性。
- 容器化部署 :使用容器技术(如Docker)将模型打包成容器,方便在不同环境中部署和运行。
- API接口开发 :为模型开发API接口,方便其他应用程序调用模型进行预测。

部署完成后,还需要对模型进行监控。监控的内容包括模型的性能指标(如准确率、召回率、F1值等)、资源使用情况(如CPU、内存、GPU等)、输入数据的分布等。通过监控,可以及时发现模型的性能下降、数据漂移等问题,并采取相应的措施进行调整。

以下是一个简单的模型部署和监控流程的mermaid流程图:

graph LR
    A[开发CV模型] --> B[选择部署平台]
    B --> C[容器化部署]
    C --> D[开发API接口]
    D --> E[部署到生产环境]
    E --> F[监控模型性能]
    F --> G{性能是否下降?}
    G -- 是 --> H[调整模型]
    G -- 否 --> F
2.4 开发MLOps策略

MLOps(Machine Learning Operations)是一种将机器学习模型的开发、部署和运维过程自动化的方法。开发MLOps策略可以提高模型的开发效率、部署速度和运维质量。以下是开发MLOps策略的几个关键步骤:
- 版本控制 :使用版本控制系统(如Git)对模型代码、数据和配置文件进行版本控制,方便团队协作和回溯。
- 自动化构建和部署 :使用持续集成/持续部署(CI/CD)工具(如Jenkins、GitLab CI/CD等)实现模型的自动化构建和部署。
- 模型监控和日志记录 :建立模型监控系统,实时监控模型的性能和运行状态,并记录日志,方便问题排查和分析。
- 模型更新和回滚 :制定模型更新和回滚策略,确保在模型出现问题时能够及时回滚到上一个稳定版本。

2.5 使用AWS Well - Architected Framework

AWS Well - Architected Framework提供了一套最佳实践,用于设计和运营可靠、安全、高效、成本优化的云应用程序。在设计CV管道时,可以使用该框架的以下几个支柱:
- 可靠性支柱 :确保CV管道能够在各种情况下稳定运行,包括处理硬件故障、网络中断等问题。可以通过使用冗余、备份和恢复机制来提高可靠性。
- 安全性支柱 :保护CV管道中的数据和模型免受未经授权的访问、攻击和泄露。可以通过使用访问控制、加密、防火墙等技术来提高安全性。
- 性能效率支柱 :优化CV管道的性能,确保能够快速处理大量数据。可以通过选择合适的硬件、优化算法和使用缓存技术来提高性能效率。
- 成本优化支柱 :控制CV管道的成本,确保在满足业务需求的前提下,尽可能降低成本。可以通过选择合适的云服务、优化资源使用和使用成本管理工具来实现成本优化。
- 运营卓越支柱 :建立高效的运营流程,确保CV管道能够持续稳定运行。可以通过使用自动化工具、监控系统和故障处理流程来提高运营卓越性。

通过遵循这些最佳实践,可以设计出一个高效、可靠、安全且成本优化的端到端CV管道,满足不同业务场景的需求。

【顶级EI完整复现】【DRCC】考虑N-1准则的分布鲁棒机会约束低碳经济调度(Matlab代码实现)内容概要:本文介绍了名为《【顶级EI完整复现】【DRCC】考虑N-1准则的分布鲁棒机会约束低碳经济调度(Matlab代码实现)》的技术资源,聚焦于电力系统中低碳经济调度问题,结合N-1安全准则与分布鲁棒机会约束(DRCC)方法,提升调度模型在不确定性环境下的鲁棒性和可行性。该资源提供了完整的Matlab代码实现,涵盖建模、优化求解及仿真分析全过程,适用于复杂电力系统调度场景的科研复现与算法验证。文中还列举了大量相关领域的研究主题与代码资源,涉及智能优化算法、机器学习、电力系统管理、路径规划等多个方向,展示了广泛的科研应用支持能力。; 适合人群:具备一定电力系统、优化理论和Matlab编程基础的研究生、科研人员及从事能源调度、智能电网相关工作的工程师。; 使用场景及目标:①复现高水平期刊(如EI/SCI)关于低碳经济调度的研究成果;②深入理解N-1安全约束与分布鲁棒优化在电力调度中的建模方法;③开展含新能源接入的电力系统不确定性优化研究;④为科研项目、论文撰写或工程应用提供可运行的算法原型和技术支撑。; 阅读建议:建议读者结合文档提供的网盘资源,下载完整代码与案例数据,按照目录顺序逐步学习,并重点理解DRCC建模思想与Matlab/YALMIP/CPLEX等工具的集成使用方式,同时可参考文中列出的同类研究方向拓展研究思路。
内容概要:本文详细介绍了一个基于MATLAB实现的电力负荷预测项目,采用K近邻回归(KNN)算法进行建模。项目从背景意义出发,阐述了电力负荷预测在提升系统效率、优化能源配置、支撑智能电网和智慧城市建设等方面的重要作用。针对负荷预测中影响因素多样、时序性强、数据质量差等挑战,提出了包括特征工程、滑动窗口构造、数据清洗与标准化、K值与距离度量优化在内的系统性解决方案。模型架构涵盖数据采集、预处理、KNN回归原理、参数调优、性能评估及工程部署全流程,并支持多算法集成与可视化反馈。文中还提供了MATLAB环境下完整的代码实现流程,包括数据加载、归一化、样本划分、K值选择、模型训练预测、误差分析与结果可视化等关键步骤,增强了模型的可解释性与实用性。; 适合人群:具备一定MATLAB编程基础和机器学习基础知识,从事电力系统分析、能源管理、智能电网或相关领域研究的研发人员、工程师及高校师生;适合工作1-3年希望提升实际项目开发能力的技术人员; 使用场景及目标:①应用于短期电力负荷预测,辅助电网调度与发电计划制定;②作为教学案例帮助理解KNN回归在实际工程中的应用;③为新能源接入、需求响应、智慧能源系统提供数据支持;④搭建可解释性强、易于部署的轻量级预测模型原型; 阅读建议:建议结合MATLAB代码实践操作,重点关注特征构造、参数调优与结果可视化部分,深入理解KNN在时序数据中的适应性改进方法,并可进一步拓展至集成学习或多模型融合方向进行研究与优化。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值