Tao Analyze Changenet Rca
NVIDIAOfficialCreated by NVIDIA Corporation
- Skill
- Review and audit
- Software development
- Apache-2.0
- Medium risk
- Has scripts
AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
This skill provides a structured, five-phase investigation framework to diagnose failures in NVIDIA TAO Visual ChangeNet models. It focuses on identifying why a model underperforms by correlating numerical score statistics with visual evidence from test and golden image pairs. The process includes score analysis, systematic golden image audits, cross-dimensional pattern recognition, and counterfactual impact analysis to generate actionable fixes for AOI defect-detection pipelines.
What it does
- Analyzes model score distributions and performs threshold sweeps to establish KPI baselines.
- Conducts deep visual investigations of threshold-critical samples and false positives.
- Audits golden image quality to detect illumination issues or framing mismatches.
- Clusters failure modes by component type, board level, and light condition.
- Evaluates training configuration, data sufficiency, and class balance.
- Generates a comprehensive RCA report with embedded visual evidence thumbnails.
When to use it
- When investigating poor recall, high false alarm rates, or PASS/NO_PASS metric regressions.
- When auditing the quality of a visual inspection pipeline.
- When diagnosing why specific defect types are failing to be detected.
- When performing a root cause analysis for an AOI defect-detection model.
Advantages
- Evidence-based: Every conclusion is backed by direct visual inspection of images.
- Systematic: Follows a rigorous five-phase methodology from score analysis to counterfactuals.
- Actionable: Includes a counterfactual analysis phase to quantify the impact of potential fixes.
- Parallelized: Utilizes subagents to accelerate investigation tracks.
Usage examples
- “RCA on my ChangeNet model”
- The agent initiates a multi-phase investigation, starting with score analysis and threshold sweeps to identify the primary failure modes.
- “why is my AOI model failing”
- The agent performs a deep dive into the experiment results, auditing golden images and test samples to pinpoint data quality or model configuration issues.
- “audit ChangeNet predictions”
- The agent clusters false positives and failures, providing a visual report that highlights systemic issues in the inspection pipeline.
- “root cause analysis on visual-changenet”
- The agent executes the full RCA workflow, producing a timestamped report containing score statistics, visual evidence, and recommended fixes.
Install
Download the skill as a ZIP:
https://autogineer.com/agent-skills/nvidia/tao-analyze-changenet-rca/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip tao-analyze-changenet-rca.zip -d .agents/skills
Documentation by NVIDIA Corporation
TAO ChangeNet Classification RCA Skill
Standalone install? If this session was not initialized by the TAO skill bank plugin, run the
tao-setupskill first (host preflight, credentials, cross-skill discovery).
You are an expert investigator for NVIDIA TAO Visual ChangeNet classification experiments. Your job is to find why the model fails, backed by visual evidence from actual images.
When the user provides an experiment result directory and training code directory, perform a deep Root Cause Analysis. The investigation must be image-evidence-driven — every major conclusion should trace back to specific images you viewed.
Inputs
Experiment result directory — contains
train/andinference/Training code directory — the
visual_changenet/source treeDataset directory — where CSV files and images reside (often in experiment.yaml)
Target KPI — default to Recall-first if not specified. Options: Recall-first (FAR at 100% recall), FAR-first (recall at target FAR), Balanced (F1), Custom.
Visual Inspection Primer
The ChangeNet model compares a test image against a golden image (known-good reference) to detect differences. When viewing images, check these three things:
Image quality: Both images should be properly exposed with visible content. Watch for unusually dark images — but do not use a fixed intensity threshold. Some illumination types (e.g., SolderLight) produce systemically dark images where mean intensity < 30 is normal. Always establish a PASS golden baseline first and flag outliers relative to that baseline.
Framing match: Test and golden should show the same region at the same zoom and orientation. Mismatched framing (e.g., wide-field vs close-up) indicates a golden pipeline error.
Defect visibility: Can you see the difference between test and golden? Some defects are obvious at any resolution; others may be invisible after downscaling to the model's input size. Compare original image dimensions to model input size to assess information loss.
Investigation Flow
The investigation has 5 phases. Phase 1 (numbers) gives you hypotheses. Phase 2 (images) proves or disproves them. Phase 3 (cross-dimensional) finds hidden patterns. Phase 4 (config) explains the mechanism. Phase 5 (counterfactual) quantifies fixes. Phase 2 is the core — spend the most effort there. Phase 5 is the most actionable — never skip it.
Phase 1 — Score Analysis: score statistics, tier classification, threshold sweep, per-defect-type table, drop-N threshold-critical analysis, KPI verdict.
Phase 2 — Deep Image Investigation: threshold-critical sample deep dive (2A), systematic golden audit + failure mode clustering (2B), false positive deep dive (2C), comparative visual analysis (2D), label semantics & visual pattern alignment audit (2E).
Phase 3 — Cross-Dimensional Analysis: component-type clustering (3A), board-level & positional analysis (3B), training image deep dive (3C), multi-light condition analysis (3D).
Phase 4 — Data & Training Config Analysis: data sufficiency (4A), training config audit (4B), training metrics (4C), loss function & decision boundary analysis (4D).
Phase 5 — Counterfactual & Actionability: what-if simulations (5A), minimum viable fix path (5B).
See references/investigation-phases.md for the full per-phase, per-step instructions, the image path construction rules, all classification taxonomies and severity guidance, and the Architecture Reference (module formulas, sampler weighting, LR policy, dataset classes) — every value VERBATIM.
Execution: Parallelize With Subagents
You MUST use the Agent tool to run independent investigation tracks in parallel. Run Phase 1 sequentially in the main thread (everything depends on it), then launch 6 subagents (A–F) in a single message, collect and synthesize their results (paying special attention to exploratory Agents E and F), run Phase 5 yourself, and write the report last.
Before writing RCA_Report.md, run ls rca_images/ to inventory thumbnails, and follow the mandatory Image Embedding Protocol: every visual-evidence table row must carry inline thumbnail columns using ![caption] (rca_images/<filename>.jpg) syntax — a report without per-row images is incomplete and the hook will reject it.
See references/parallelization.md for the complete execution plan: the Phase-1 hand-off contents, each agent's exact checklist (A–F including the two exploratory agents), the Image Embedding Protocol rules and table formats, the exploratory-findings section, the subagent prompt template, and the required Thumbnail Map return format — all VERBATIM.
Report Structure and Output
Produce RCA_Report.md with sections 1–9: Verdict, Score Analysis, Visual Evidence (with embedded thumbnails), Cross-Dimensional Analysis, Data Issues, Training Config Issues, Exploratory Findings, Counterfactual Impact Analysis, and Recommended Fixes.
Always save into a timestamped folder under the experiment result directory:
<experiment_result_dir>/rca_results/YYYY-MM-DD_HHMMSS/
├── RCA_Report.md
├── rca_images/
├── rca_config/
└── claude_session.jsonlGet the real timestamp by running date +%Y-%m-%d_%H%M%S in Bash — never hardcode or guess it. If the user specifies a custom path, use that instead but keep the same structure.
See references/output-structure.md for the complete section-by-section report skeleton (every table header and summary line) and the full output layout with hook-copied contents — VERBATIM.
Files
- ATTRIBUTION.mdAdded by AutoGineer945 B
- BENCHMARK.md6.9 KiB
- LICENSELicence file added by AutoGineer11.2 KiB
- SKILL.md6.4 KiB
- config/skillspector-baseline.yaml2.4 KiB
- evals/evals.json804 B
- hooks/_parse-stdin.shScript1.4 KiB
- hooks/rca-defect-coverage.shScript5.5 KiB
- hooks/rca-depth-check.shScript9.7 KiB
- hooks/rca-package.shScript2.9 KiB
- hooks/rca-phase-completeness.shScript4.2 KiB
- hooks/rca-report-check.shScript4.9 KiB
- hooks/rca-script-check.shScript3.1 KiB
- references/investigation-phases.md16.6 KiB
- references/output-structure.md6.0 KiB
- references/parallelization.md8.6 KiB
- skill-card.md4.3 KiB
- skill.oms.sig7.1 KiB
hooks/rca-defect-coverage.sh
#!/bin/bash
# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0
# Hook: Deep defect coverage validation — not just mentioned, but actually analyzed
# Verifies each defect type has: score data, sample count, failure mode, visual description,
# training coverage status, and appears in counterfactual analysis
# Toggle: export RCA_HOOKS=0 to disable
[[ "${RCA_HOOKS:-1}" == "0" ]] && exit 0
source "$(dirname "$0")/_parse-stdin.sh"
if [[ "$CLAUDE_FILE_PATH" == *RCA_Report.md ]]; then
report_dir=$(dirname "$CLAUDE_FILE_PATH")
inference_csv=""
for candidate in "$report_dir/inference/inference.csv" "$report_dir/../inference/inference.csv"; do
[ -f "$candidate" ] && inference_csv="$candidate" && break
done
[ -z "$inference_csv" ] && exit 0
# Use Python for the deep analysis — bash string matching is too crude
python3 - "$inference_csv" "$CLAUDE_FILE_PATH" << 'PYEOF'
import csv, sys, re
inference_csv = sys.argv[1]
report_path = sys.argv[2]
# Parse defect types and their counts from CSV
defect_info = {}
with open(inference_csv) as f:
reader = csv.DictReader(f)
for row in reader:
label = row.get('label', row.get('Label', ''))
if label and label.upper() != 'PASS':
if label not in defect_info:
defect_info[label] = {'count': 0, 'scores': []}
defect_info[label]['count'] += 1
try:
score = float(row.get('siamese_score', row.get('score', 0)))
defect_info[label]['scores'].append(score)
except (ValueError, TypeError):
pass
if not defect_info:
sys.exit(0)
with open(report_path) as f:
report = f.read()
report_lower = report.lower()
warnings = []
for dtype, info in sorted(defect_info.items()):
issues = []
dtype_lower = dtype.lower()
dtype_pattern = re.escape(dtype)
# Check 1: Is the defect type mentioned at all?
if dtype_lower not in report_lower:
warnings.append(f"MISSING: '{dtype}' ({info['count']} samples) not mentioned anywhere in report.")
continue
# Check 2: Does a table row contain this defect type with a score?
# Look for table rows like "| Missing | 22 | ... | 0.212 |"
table_pattern = rf'\|[^|]*{dtype_pattern}[^|]*\|.*\d+\.\d+'
if not re.search(table_pattern, report, re.IGNORECASE):
issues.append("no table row with score data")
# Check 3: Is the sample count mentioned near the defect type?
count = info['count']
# Look for the count within 200 chars of the defect type name
for m in re.finditer(dtype_pattern, report, re.IGNORECASE):
nearby = report[max(0, m.start()-100):m.end()+200]
if str(count) in nearby or (count == 1 and re.search(r'\b1\b', nearby)):
break
else:
issues.append(f"sample count ({count}) not found near defect type mention")
# Check 4: Is it discussed in the failure mode clustering section?
fm_section = ""
fm_match = re.search(r'(?:Failure Mode|3\.2)', report)
if fm_match:
fm_section = report[fm_match.start():fm_match.start()+5000]
if fm_section and dtype_lower not in fm_section.lower():
issues.append("not in Failure Mode Clustering section")
# Check 5: Is training coverage status mentioned? (In Training? Yes/No)
training_pattern = rf'{dtype_pattern}.*(?:in train|not in train|zero train|never seen|unseen|0 sample)'
if not re.search(training_pattern, report, re.IGNORECASE):
# Also check coverage matrix tables
coverage_pattern = rf'{dtype_pattern}.*(?:Yes|No|\b0\b|\b1\b).*(?:Yes|No|\b0\b)'
if not re.search(coverage_pattern, report, re.IGNORECASE):
issues.append("training coverage status not documented")
# Check 6: Does it appear in the per-defect-type score table?
score_section = ""
score_match = re.search(r'Per-Defect-Type', report)
if score_match:
score_section = report[score_match.start():score_match.start()+2000]
if score_section and dtype_lower not in score_section.lower():
issues.append("missing from Per-Defect-Type score table")
# Check 7: If there are scores, verify at least one score appears in report
if info['scores']:
mean_score = sum(info['scores']) / len(info['scores'])
score_str = f"{mean_score:.3f}"[:5] # first 5 chars like "0.212"
if score_str not in report:
# Try with 2 decimal places
score_str2 = f"{mean_score:.2f}"
if score_str2 not in report:
issues.append(f"mean score ({mean_score:.3f}) not found in report")
if issues:
warnings.append(f"SHALLOW on '{dtype}' ({info['count']} samples): {'; '.join(issues)}")
# Check 8: Cross-check — are ALL defect types in the Recommended Fixes?
fixes_match = re.search(r'Recommended Fixes', report)
if fixes_match:
fixes_section = report[fixes_match.start():]
types_in_fixes = sum(1 for d in defect_info if d.lower() in fixes_section.lower())
if types_in_fixes == 0:
warnings.append("NO defect types appear in Recommended Fixes section. Fixes should address specific defect type failures.")
# Check 9: Verify total defect count appears in report
total_defects = sum(info['count'] for info in defect_info.values())
if str(total_defects) not in report:
warnings.append(f"Total defect count ({total_defects}) not found in report.")
if warnings:
print("DEFECT COVERAGE GAPS:")
for w in warnings:
print(f" - {w}")
PYEOF
fi
Requirements and compatibility
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
Needs: Declares allowed tools
The author says: Requires docker + nvidia-container-toolkit. Workflows declare additional requirements.
Security
What our scanner noticed· Medium risk
- Large base64-encoded blobs
- Scripts that your agent may run
This skill includes scripts that your agent may run. Read them before you use it.
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- Created by
- NVIDIA Corporation
- Publisher
- NVIDIA (Official)
- Source
- NVIDIA/skills · skills/tao-analyze-changenet-rca · commit fce3cca
- Licence
- Apache License 2.0 (redistribution allowed)
- LICENSE (added by AutoGineer from LICENSE-APACHE)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
AutoGineer is not affiliated with or endorsed by NVIDIA Corporation or NVIDIA.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download tao-analyze-changenet-rca.zip