TAODEFTAOI缺陷检测优化循环Skill tao-run-deft-aoi

本技能用于驱动 NVIDIA TAO VisualChangeNet/ChangeNet PCB 自动光学检测模型的端到端迭代改进循环,包括基线评估、根因分析、合成缺陷生成、k-NN数据挖掘、重训练与部署门控,直至达到 FAR/召回率 KPI 目标。关键词:TAO、VisualChangeNet、ChangeNet、AOI、缺陷检测、DEFT、RCA、合成缺陷、k-NN挖掘、FAR、召回率、模型微调、PCB。

工业缺陷检测 0 次安装 1 次浏览 更新于 9/6/2026
名称 tao-run-deft-aoi
描述 > 针对 NVIDIA TAO VisualChangeNet / ChangeNet PCB 检测模型运行完整的 DEFT AOI 改进循环: 基线评估、RCA、Cosmos AnomalyGen / AMP 合成缺陷、k-NN 挖掘、重新训练和部署门控, 直到满足 FAR / recall KPI 目标。用于提示词,例如“运行 DEFT 循环”、“在召回率=100% 下微调直至 FAR 低于 0.1%” 或“使用 RCA 和合成缺陷改进我的 AOI ChangeNet 模型”;不要用于独立的 TAO 训练、一次性推理、通用异常生成或仅 RCA 分析。
开源协议 Apache-2.0 AND CC-BY-4.0 compatibility: 需要 docker + nvidia-container-toolkit。工作流声明额外要求。 metadata:
作者 NVIDIA Corporation
版本 “0.1.0” allowed-tools: Read Task Bash Write tags: - application - workflow - deft - aoi - loop

技能:tao-run-deft-aoi

独立安装? 如果此会话尚未由 TAO 技能库插件初始化,请先运行 tao-setup 技能(主机预检、凭据、跨技能发现)。

何时使用此技能

当用户希望代理为 NVIDIA TAO VisualChangeNet / ChangeNet PCB 检测模型运行完整的 DEFT AOI 改进循环:基线评估、RCA、合成缺陷生成、数据挖掘、重新训练和部署门控,直到达到 KPI 目标时,使用此技能。

  • “运行 DEFT 循环”
  • “微调直到 FAR 低于 0.1% 且召回率=100%”
  • “使用 RCA 和合成缺陷改进我的 AOI ChangeNet 模型”
  • “迭代训练直到误接受率达到目标”

不要将本技能用于单次独立的 TAO 训练、一次性推理、通用异常生成或仅 RCA 分析。当用户只要求该步骤时,请直接使用相关代理。

基础模型

该循环基于 NVIDIA TAO Visual ChangeNet 分类模型,使用 NVIDIA C-RADIOv2-B 主干,并端到端微调。架构定义在 specs/baseline_spec.yaml 中——该文件为唯一事实来源。所有预训练权重来自 HuggingFace(需要 HF_TOKEN);NGC_KEY 仅用于容器拉取门控。ChangeNet 主干分辨率以及 model.backbone.pretrained_backbone_path 的分阶段文件/HF-URL 回退逻辑由 references/visual-changenet.md 负责。用于 k-NN 挖掘的 SigLIP 由 references/tao-mine-aoi-images.md 负责。AnomalyGen 侧检查点(Cosmos-Predict2、T5、NVDINOV2、C-RADIO-V3、DINOv2-large、SAM2、Qwen3-VL——仅 2B 约 22 GB,含 14B + T5-11b 约 140 GB)位于 <workspace>/augmentation/anomalygen/base_checkpoints/ 下;paidf-anomalygen 容器在首次使用时自动下载。<workspace>/augmentation/anomalygen/datasets/<project>/ 下的 PCB 参考数据集也可自动获取。参见 references/paidf-anomalygen.md

训练 AutoML 策略

DEFT AOI 拥有迭代数据改进循环、重新训练节奏和 KPI 检查点选择。对于此工作流,即使底层 Visual ChangeNet 模型元数据具有 automl_enabled: true,也绕过模型级 AutoML。

automl_policy: off 是传递给 Visual ChangeNet 技能调用的工作流参数(父级通过 Skill 工具调用 tao-skill-bank:tao-train-visual-changenet 时传递的值),不是 TAO spec 字段。两种情况:

  • 直接 docker run visual_changenet train -e <spec>(此工作流实际内联使用的路径):无需操作。TAO 入口点默认是普通训练;AutoML 位于 SDK 编排的不同代码路径后面。实际上,每次直接 docker run 已是 automl_policy: off
  • SDK 编排调度(Brev/SLURM/k8s,SDK 构建命令):向 VisualChangeNetSDK.train(...) 或等效运行器参数传递 automl_policy: off。SDK 使用它来选择普通训练命令而不是 AutoML 包装器。

切勿将 automl_policyworkflow 键添加到 spec YAML。 TAO 的 Hydra ExperimentConfig 架构无法识别这些键,训练任务会在配置合并时失败,报错 Error merging '<spec>.yaml' with schema: Key 'workflow' not in 'ExperimentConfig'。 这仅是工作流级覆盖;不要更改模型元数据,也不要将此策略应用于其他工作流。

启动接收

用户确认要运行此工作流后,询问他们打算在哪个支持的平台上运行。支持的平台为已安装的平台技能——tao-run-on-local-docker(本地 GPU 主机的默认项)、tao-run-on-brevtao-run-on-slurmtao-run-on-kubernetes。切勿静默默认;如果用户未选择,请询问。

选择平台后,阅读所选平台技能的 SKILL.md,并运行其 Preflight 部分以获取凭据和环境要求。

仅询问与该平台相关的凭据,以及所选工作流需要的模型特定凭据。

代理行为

只有一个用户门:预飞行确认。 打印预飞行摘要(见 references/preflight.md → Pre-Flight Summary),然后停止并等待用户输入“go”、“yes”、“looks good”或类似的明确批准。在获得批准之前,不要启动任何副作用步骤(docker run、训练、SDG、${RESULTS_DIR}/ 下的修改)——读取规格、列出文件、docker image inspect 以及填充摘要表是可以的。“自主”描述的是此门之后的行为,而非之前。 即使用户的原始提示听起来很紧急(“直接运行它”、“go ahead”),也不要跳过此门——摘要本身就是他们批准前需要看到的产物。

门后,技能完全自主。 运行整个循环,无需请求确认。不要在步骤之间暂停。不要问“要我继续吗?”——直接继续。仅在步骤因不可恢复错误或硬停止门触发而失败时停止。在每个步骤里程碑处打印一行状态更新,以便用户跟踪进度。

需要自动模式。 门后循环会持续触发副作用调用(docker run${RESULTS_DIR}/ 写入);如果没有自动接受/旁路权限模式,它会在第一个提示上停顿。请在预飞行摘要中提醒用户在批准前启用自动模式(shift+tab)。

障碍恢复。 自己修复可恢复的障碍——缺失镜像(拉取)、未分阶段的 C-RADIO 主干(根据 references/visual-changenet.md 分阶段 .pth)、缺失 pydeps(venv)、AnomalyGen 资产缺失(paidf 自动获取)——然后恢复你正在进行的预飞行步骤(<blocker> cleared → resuming step N)并继续到摘要。仅对无法修复的事项停止(缺少工作空间/规格/CSV/凭据、空池、泄漏)。修复不是用户门。

修订计划。 如果在显示原始摘要后任何运行参数发生变化(用户施加时间限制、覆盖 epoch、更改 max_iterations 等),请始终重新运行预飞行,并在继续前显示更新的摘要。

工作流

按以下顺序执行循环(完整细节请见 references/pipeline-and-state.md → Pipeline + Stage Execution):

  1. 预飞行。 执行 references/preflight.md 中的每项检查。解析工作空间、规格、CSV、检查点、容器镜像。仅在你无法自行解决的缺失输入时硬停止(见 ## 代理行为 → Blocker recovery)。
  2. 基线。 如果 deft_state.json 已有 iterations.baseline.stage_completed == "train"best_ckpt_path 指向存在的文件(上游 automl-deft-pipeline 从其 Phase 1 AutoML 获胜者预置这些——见其 Phase 1 → Phase 2 交接),则跳过训练子步骤并从预置检查点恢复 inference -> evaluate。否则通过调用 tao-skill-bank:tao-train-visual-changenet 技能运行 train -> inference -> evaluate。无论哪种方式,随后通过调用 tao-skill-bank:tao-analyze-gaps-visual-changenet 执行 rca。先阅读 references/visual-changenet.mdreferences/tao-analyze-gaps-visual-changenet.md 以了解 DEFT 循环特定参数(挂载、输出目录、deft_state.json 更新)。
  3. 迭代。 对于每次迭代直至 max_iterations,执行 Pipeline 步骤 1-7。在每个步骤之间,重新从磁盘读取 results/loop_log.jsonl 尾部 + results/deft_state.json——磁盘是规范来源。
  4. 停止 当 KPI 目标达到、max_iterations 已用尽或硬停止门触发(静默丢弃、AMP 分配不匹配、训练/验证泄漏)时。绝不自动重试硬停止。
  5. 渲染 每次迭代完成后(以及循环结束时再次)通过生成 reporter 子代理(agents/reporter.md)渲染 results/DEFT_Loop_Report.html。不进行逐阶段渲染——每个阶段已向 loop_log.jsonl 追加一行,足以让尾部观察的用户使用;HTML 渲染携带一次迭代的状态,每次迭代一次渲染使每循环 token 成本大致随迭代次数线性增长,而非阶段数。不要内联渲染。

所有流水线阶段都在父上下文中内联运行——父级通过 Skill 工具直接调用底层 tao-skill-bank:* 技能,并通过相应的 references/*.md 文件叠加 DEFT 循环约定。唯一委托的工作是 HTML 报告渲染,由 reporter 子代理在新上下文中处理,因此当父上下文饱和时,循环结束时的渲染绝不会被静默丢弃。见 references/scripts-and-agents.md → Agents 了解 reporter 生成契约。

使用捆绑脚本

通过 run_script() 运行 scripts/ 下的捆绑脚本(当 harness 提供该函数时——这是 Claude Code 插件运行时辅助程序,而非本仓库中定义的函数);否则回退到直接 python。首先将每个路径参数解析为绝对主机路径。切勿通过 echo 或内联 jq 写入 loop_log.jsonl——seq 不变量要求通过 next_seq() 读取活动尾部。参见 references/scripts-and-agents.md 获取完整的 Available Scripts 表、每个脚本的调用示例run_script() / 直接 python / 进程内)、agents/reporter.md 生成契约、Stage Reference Modules 阶段→技能映射、路径规则不变量以及工作流级 AutoML 策略陷阱。

阶段参考模块

每个流水线阶段映射到技能库中的一个底层技能;匹配的 references/*.md 文件在技能通用说明之上叠加 DEFT 循环约定(挂载、输出目录、deft_state.json 更新、log_stage.py 摘要字符串)。先阅读参考文件,然后通过 Skill 工具调用技能。 如果缺少参考文件,则停止并要求用户重新安装插件。完整的阶段→参考→技能→所有权表见 references/scripts-and-agents.mdStage Reference Modules。这些阶段:train/evaluatereferences/visual-changenet.md)、anomalygenreferences/paidf-anomalygen.md)、rcareferences/tao-analyze-gaps-visual-changenet.md)、routingreferences/tao-route-visual-changenet-samples.md)和 data_miningreferences/tao-mine-aoi-images.md)。

路径规则(不变量)。 每个阶段的输出使用 ${RESULTS_DIR}/iter${ITER}/ 下的绝对主机路径,将 <workspace> 以相同路径挂载到容器中,预先创建世界可写目录,并拒绝任何包含 output: /results/...<workspace> 以外路径的配置。

数据、预飞行、流水线和状态参考

主题 参考 内容
自带数据、数据契约、输出布局、增强池 references/data-layout.md 无公共 AOI 数据集;完整 <workspace> 输入树、ChangeNet 四列必需 CSV 架构、${RESULTS_DIR}/ 输出树和双源挖掘池表
预飞行检查、默认值、预飞行摘要模板、运行时估算 references/preflight.md 10 项有序预飞行检查、必需输入 max_iterations、所有默认值、完整预飞行摘要表 + 填充命令,以及每次迭代运行时估算
流水线步骤、状态/日志、阶段执行、报告、运行时行为 references/pipeline-and-state.md 基线预置/跳过训练逻辑、7 个迭代流水线步骤、deft_state.json + loop_log.jsonl 架构及 seq 节奏、阶段后检查、每次迭代 HTML 渲染,以及循环结束序列
捆绑脚本、报告代理、阶段模块、AutoML 陷阱 references/scripts-and-agents.md Available Scripts 表、agents/reporter.md 生成契约、Stage Reference Modules 表、路径规则不变量、AutoML 策略规范陷阱

必需输入 — max_iterations 无默认值;如果未提供,请询问用户,在未提供前不要通过预飞行。如果用户给出时间限制,则使用 references/preflight.md 中每次迭代的运行时数字将其转换为估算的 max_iterations,并显示估算以供确认。所有其他运行参数都有默认值——绝不询问具有默认值的参数。完整默认值列表及用户将在单门中批准的预飞行摘要见 references/preflight.md

门控

运行完整的预飞行(references/preflight.md),打印预飞行摘要,然后停在唯一用户门前。批准后,运行基线(使用预置/跳过训练逻辑)和 7 步迭代流水线,详细信息见 references/pipeline-and-state.md

硬停止且绝不自动重试的情况:任何阶段 status=error;训练/验证泄漏(挖掘后对 mining_filter/mining_pool.csv 的迭代中检查,以及组装后对组合 CSV 的检查);挖掘池缺失或零行;CSV 存在性检查失败;静默丢弃;AMP 分配不匹配。当 KPI 目标达到、max_iterations 已用尽或不可恢复的门触发时循环停止。每个终止路径运行循环结束序列:通过 scripts/log_stage.py 追加最终 loop_stop 条目,用 scripts/align_token_usage.py 回填 token 用量,最后一次生成 reporter 代理(trigger="loop-end"),然后运行 scripts/prepare_inference_spec.py——仅在无有效检查点时跳过。每阶段状态节奏(每个阶段一条 loop_log.jsonl 条目,seq=last+1 来自磁盘,磁盘是规范来源,每次迭代和循环结束时各一次 HTML 渲染)详见 references/pipeline-and-state.md