用 SageMaker AI 与 Rekognition 构建工业安全合成数据流水线

2026-09-17 18 预计阅读时间: 1 分钟
来源: aws.amazon.com AI 摘要 Original link

Disclaimer: This article is an AI-assisted summary. Read it together with the original source when precision matters. The summary may omit context, version differences, or edge cases and is not official documentation.

预计阅读时间:10 分钟

工业安全视觉模型经常卡在数据上:真实厂区里的人员、重型机械、遮挡、反光和复杂光照很难覆盖,而为了拍摄危险场景专门组织数据采集,本身就可能引入安全风险。一个可行方向是,在 Amazon SageMaker AI 中生成逼真的工业场景图片,再用 Amazon Rekognition 自动识别人并生成边界框标签,最后把筛选后的合成样本加入训练集。

来源案例报告称,这种方法在无需人工标注、也无需靠近重型机械采集危险数据的情况下,将人员检测效果最多提升了 160%。这个数字不应被理解为所有项目都能复现的固定收益,但它说明:当真实数据缺少关键长尾场景时,经过质量控制的合成数据可以产生显著价值。

流水线的关键不是生成图片,而是形成闭环

一条可落地的流水线可以拆成五个阶段:

  1. 定义场景矩阵:列出厂区类型、机械设备、人员位置、视角、天气、光照、个人防护装备和遮挡程度。
  2. 生成合成图片:在 SageMaker AI 上托管或运行图像生成模型,批量执行结构化提示词。
  3. 自动标注:调用 Rekognition 检测 Person,读取实例级边界框和置信度。
  4. 质量过滤:剔除低置信度、人体结构异常、框越界、人物尺寸过小或与场景不符的样本。
  5. 训练与评估:将合成数据和真实数据混合训练,但只使用独立的真实数据测试集评估最终效果。

这里最容易忽略的是第一步。如果提示词只是“工厂里有一个工人”,生成结果会集中在少数构图上。更实用的方法是把场景拆成可以组合的维度,例如:

场所:装配车间 / 露天堆场 / 仓库通道
设备:叉车 / 挖掘机 / 起重机 / 输送带
人员状态:行走 / 下蹲 / 背对镜头 / 被设备局部遮挡
拍摄条件:顶视监控 / 广角固定机位 / 低照度 / 强逆光 / 雨雾
安全装备:安全帽 / 反光背心 / 护目镜
距离设备:安全距离 / 靠近设备边缘 / 位于设备后方

根据这些维度组合提示词,可以增加困难样本,同时记录每张图片的生成参数,方便排查模型到底从哪些场景中获益。

用 Rekognition 把合成图片转换成 YOLO 标签

下面的示例会扫描 data/synthetic/ 下的 JPG 和 PNG 图片,调用 Rekognition 的 DetectLabels API,提取 Person 实例,并写出同名 YOLO 标签文件。运行前需要配置 AWS 凭证,并确保调用身份拥有 rekognition:DetectLabels 权限。

安装依赖:

python -m pip install boto3
mkdir -p data/synthetic data/labels

将下面代码保存为 auto_label.py。按部署区域修改 AWS_REGION,需要更严格的数据时可提高 MIN_CONFIDENCE

from pathlib import Path
import os

import boto3

IMAGE_DIR = Path("data/synthetic")
LABEL_DIR = Path("data/labels")
AWS_REGION = os.getenv("AWS_REGION", "us-east-1")
MIN_CONFIDENCE = float(os.getenv("MIN_CONFIDENCE", "85"))

rekognition = boto3.client("rekognition", region_name=AWS_REGION)
LABEL_DIR.mkdir(parents=True, exist_ok=True)


def detect_people(image_path: Path) -> list[tuple[float, float, float, float, float]]:
    response = rekognition.detect_labels(
        Image={"Bytes": image_path.read_bytes()},
        MaxLabels=100,
        MinConfidence=MIN_CONFIDENCE,
    )

    people = []
    for label in response.get("Labels", []):
        if label.get("Name") != "Person":
            continue

        for instance in label.get("Instances", []):
            box = instance.get("BoundingBox")
            if not box:
                continue

            width = box["Width"]
            height = box["Height"]
            x_center = box["Left"] + width / 2
            y_center = box["Top"] + height / 2
            confidence = instance.get("Confidence", 0.0)

            # 过滤过小目标,阈值应根据真实摄像头分辨率调整。
            if width * height >= 0.0025:
                people.append((x_center, y_center, width, height, confidence))

    return people


for image_path in sorted(IMAGE_DIR.iterdir()):
    if image_path.suffix.lower() not in {".jpg", ".jpeg", ".png"}:
        continue

    people = detect_people(image_path)
    label_path = LABEL_DIR / f"{image_path.stem}.txt"

    # YOLO class 0 表示 Person;置信度写入旁注日志,而不是训练标签。
    lines = [f"0 {x:.6f} {y:.6f} {w:.6f} {h:.6f}" for x, y, w, h, _ in people]
    label_path.write_text("\n".join(lines) + ("\n" if lines else ""), encoding="utf-8")

    scores = ", ".join(f"{score:.1f}" for *_, score in people) or "none"
    print(f"{image_path.name}: people={len(people)}, confidence={scores}")

执行脚本:

AWS_REGION=us-east-1 MIN_CONFIDENCE=90 python auto_label.py

这段代码适合做最小验证,但生产流水线还应把图片、标签、提示词、随机种子、生成模型版本和过滤原因写入统一清单。随后可以通过 SageMaker Processing 并行处理 S3 中的图片,而不是在开发机上逐张调用。

质量控制决定合成数据是否有用

自动标注并不意味着标签天然正确。Rekognition 可能漏掉严重遮挡的人,也可能在海报、反射或机械结构上产生误检。建议把质量控制分为机器规则和抽样审核两层。

机器规则可以检查:

  • 边界框是否完全位于图片范围内;
  • 人物面积占比是否符合摄像头的实际分布;
  • 同一图片是否出现不合理数量的人员;
  • 生成提示词要求有人,但 Rekognition 没有检测到人的样本;
  • Rekognition 高置信度结果是否与生成阶段记录的目标数量一致。

人工无需重新标注全部图片,但应审核每个场景组合的一小批样本,特别关注手脚结构、人与机械的空间关系、阴影、反射和个人防护装备。合成图即使看起来逼真,也可能包含稳定的生成伪影;如果这些伪影只出现在正样本中,检测器就可能学到错误捷径。

训练时要守住真实测试集

合成数据应该补足真实数据,而不是自动取代真实数据。可以从较保守的混合比例开始,例如每个训练批次使用 70% 真实样本和 30% 合成样本,再根据真实验证集上的召回率和误报率调整。

数据切分时应遵守三个边界:

  • 验证集和测试集使用独立采集的真实图片;
  • 同一生成种子或近似构图的图片不能跨训练集与验证集;
  • 不能只汇报总体指标,还要分别检查低照度、遮挡、远距离和不同设备周边的表现。

工业安全系统通常更关心漏检,但过多误报也会让告警失去可信度。因此除了 mAP,还应根据业务阈值记录人员类别的精确率、召回率、每小时误报数量,以及不同摄像头点位上的性能差异。

上线前检查清单

采用这类方案时,可以用以下问题控制风险:

  • 场景矩阵是否来自真实厂区的失败样本,而不是只凭想象生成?
  • 是否保存了模型版本、提示词、随机种子和自动标签置信度?
  • 是否存在针对低置信度样本的审核队列?
  • 合成数据是否只进入训练集,真实测试集是否保持隔离?
  • 是否验证了不同工服、肤色、体型、姿态、光照和摄像头角度?
  • 上线后是否持续收集误检和漏检,并用它们更新下一轮场景矩阵?

SageMaker AI 负责把生成、处理和训练组织成可重复执行的作业,Rekognition 则提供低成本的自动标注起点。真正决定收益的,是场景覆盖、标签过滤和真实数据评估这三件事。只有把它们纳入同一个可追踪闭环,合成数据才会从演示样片变成可靠的工业训练资产。


相关推荐