技能创建器
skill-creator
创建、改进和评估自定义技能,把专业流程转化为可重复使用的 AI 能力。
evaluation【数据与研究】Evaluate TensorRT SSD and YOLO object detectors on COCO-style bbox annotations with the repository's mAP scripts, preserving dataset contracts, class-ID mapping, legacy dependency gates, and historical benchmark context.
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
Use this skill when a Researcher needs to compare an SSD TensorFlow/TensorRT model or a YOLO TensorRT engine against COCO-style object-detection ground truth. It describes the repository's two evaluators; it does not download COCO, build an engine, or claim that a modern host can run this legacy stack. Keep any review reports, generated result JSON, and full evaluation logs outside this runtime skill tree.
ssd_mobilenet_v1_coco and
ssd_mobilenet_v2_coco; SSD --mode is trt by default and can be tf.yolo/<model>.trt, a built
plugins/libyolo_layer.so, TensorRT, PyCUDA, OpenCV, pycocotools, and
progressbar2. Its model string is a YOLO family plus input size, such as
yolov3-tiny-288 or yolov4-416; see the model list in
benchmarks.md.eval_ssd.py imports tensorflow only through utils.ssd_tf, so even
--mode trt can be blocked by a missing/incompatible TensorFlow 1.x stack.
Preserve the signal; do not hide it by editing imports or claiming a partial
evaluation is a full one.eval_yolo.py imports utils.yolo_with_plugins at startup. A missing
./plugins/libyolo_layer.so produces its explicit “failed to load” error;
make in plugins/ is a prerequisite, but this skill does not run the build.pycuda.autoinit means both scripts need a usable CUDA driver/context even
when the requested task is only to inspect the CLI. pycocotools and
progressbar2 are separate Python requirements.Confirm the model, precision/engine variant, dataset split, image directory, annotation file, class vocabulary, and desired comparison. Record the exact git revision and TensorRT/JetPack environment in the experiment log.
Check a local dataset layout without mutating it. The default paths are
${HOME}/data/coco/images/val2017 and
${HOME}/data/coco/annotations/instances_val2017.json. A custom dataset must
be converted to COCO Object Detection bbox format and must satisfy the
result contracts below.
Verify the engine/model and dependencies before inference. Run --help or
a tiny fixture check first; do not infer engine correctness from a parser
check. For TensorFlow SSD, confirm the legacy TensorFlow graph can load.
Run the selected evaluator from the repository root so its relative output and engine paths resolve:
# SSD (one model name is mandatory)
python3 eval_ssd.py --mode trt \
--imgs_dir "$HOME/data/coco/images/val2017" \
--annotations "$HOME/data/coco/annotations/instances_val2017.json" \
ssd_mobilenet_v1_coco
# TensorFlow frozen graph comparison (legacy TF dependency)
python3 eval_ssd.py --mode tf ssd_mobilenet_v1_coco
# YOLO (engine name is mandatory)
python3 eval_yolo.py --imgs_dir "$HOME/data/coco/images/val2017" \
--annotations "$HOME/data/coco/annotations/instances_val2017.json" \
-m yolov4-416
# YOLO letterbox preprocessing, if the engine was configured for it
python3 eval_yolo.py -l -m yolov4-csp-256
Preserve the generated result file and the complete COCOeval.summarize()
output. SSD writes ssd/results_<model>_<mode>.json; YOLO writes
yolo/results_<model>.json. These are overwritten on a subsequent run, so
copy or rename them into an external experiment directory first.
Report the primary COCO AP (IoU 0.50:0.95, all areas, maxDets=100), AP50, AP75, area-specific AP, and AR values. Include image count, annotation revision, evaluator mode, model/engine, input/letterbox behavior, and confidence/NMS behavior so comparisons are reproducible.
Both programs list every filename ending in .jpg, derive an integer image ID
from the final underscore-separated token before .jpg (for example,
COCO_val2017_000000123456.jpg → 123456), invoke a detector at
conf_th=1e-2, write detections, load the annotation with COCO, then run
COCOeval(..., 'bbox') over sorted ground-truth image IDs. The scripts do not
filter the directory to annotation IDs before inference. Therefore filenames
must encode valid IDs and the directory should contain only the intended split.
A missing/unreadable image can fail later in OpenCV/model code; validate the
layout before a long run.
SSD converts detector corner coordinates to COCO [x, y, width, height] using
width = x2 - x1 + 1 and height = y2 - y1 + 1. TensorRT SSD postprocessing
scales normalized corners to the original image dimensions; TensorFlow SSD
scales normalized [ymin, xmin, ymax, xmax] and swaps to x/y corners. The
supported SSD COCO checkpoints emit COCO-compatible category IDs.
YOLO uses the same corner-to-xywh conversion. By default it translates YOLO's
contiguous 0–79 COCO class IDs through utils.yolo_classes.yolo_cls_to_ssd to
COCO/SSD category IDs (which are non-contiguous and include gaps). Pass
--non_coco only when the annotation category IDs intentionally match the
model's raw class IDs; using it against standard COCO annotations silently
corrupts the evaluation. -c/--category_num must be positive and must match
the engine's configured class count. -l/--letter_box must match how the model
expects preprocessing; the postprocessor compensates coordinates for the
letterbox padding.
For exact input/output and annotation constraints, read:
Run the dependency-free checker against a tiny fixture only:
python3 skills/disco/tensorrt-demos/sub-skills/evaluation/scripts/validate-coco-eval-layout.py \
--images-dir /path/to/tiny/images \
--annotations /path/to/tiny/instances.json \
--results /path/to/tiny/results.json
The checker validates file existence, JPEG filename-to-ID parsing, COCO-like
images/annotations/categories structure, result fields, numeric bbox and
score values, positive dimensions, and that result image/category IDs are
present in the ground truth. It does not import TensorRT, TensorFlow, PyCUDA,
OpenCV, or pycocotools; it does not run inference or compute mAP. Its success
is only a layout gate. If it fails, repair the dataset/results contract before
spending GPU time. If a real run fails after the layout gate, retain the exact
stderr and classify the failure as an environment, engine/plugin, dataset, or
semantic class-mapping blocker.
Do not use a tiny fixture's mAP as a model-quality estimate. A tiny fixture can prove deterministic plumbing and a perfect-box result can prove result serialization, but only the declared validation split supports comparison to the historical numbers.
This skill does not prescribe downloading COCO, changing the evaluator to
support arbitrary filename conventions, converting custom annotations, fixing
TensorRT plugin ABI mismatches, or modernizing TensorFlow 1 APIs. It records
repository behavior observed in README_mAP.md, eval_ssd.py, eval_yolo.py,
utils/ssd.py, utils/ssd_tf.py, utils/yolo_with_plugins.py,
utils/yolo_classes.py, and the model tables in README.md. Historical values
are reference observations, not guarantees on another GPU, TensorRT version,
engine build, preprocessing mode, or dataset.