Skip to content
Back to skills

Inference

ASecurity

"Run safe local image, video-frame, image-stream, and

  • 247 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 9, 2026
testingpythonbashtestingapibackend

Works with

  • api

Security analysis

A100/100

Pro scans all 4 files and shows the line behind each finding

Scanned September 9, 2026

npx -y skills add VectorSpaceLab/AREX-Skill --skill inference --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Inference?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Inference
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/vectorspacelab-inference-f9132431/badge)](https://www.skillsdirectory.com/skills/vectorspacelab-inference-f9132431)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: inference
description: "Run safe local image, video-frame, image-stream, and
  instance-segmentation inference with SOLO's legacy MMDetection APIs, interpret
  results, and save visualizations without relying on the source checkout."
metadata:
  disco-role: operating
disable-model-invocation: true
license: NOASSERTION
---

# Inference

Use this sub-skill when a researcher needs to load a SOLO/MMDetection model,
run prediction on an image or already-decoded video frame, inspect the returned
objects, or save a detection/instance-segmentation visualization. This is a
PyTorch/MMDetection v1-era interface, not a modern MMDetection 2/3 recipe.

## Preconditions and scope

- Have a compatible installed package environment: the repository documents
  Python 3.5+, PyTorch 1.1+, CUDA 9+, NCCL 2, and `mmcv==0.2.16`. In practice,
  use a version-matched legacy environment rather than assuming current PyTorch
  or MMCV works.
- Have an existing local config file and checkpoint. This skill never downloads
  weights, datasets, or dependencies. Check both paths before starting.
- Prefer a CUDA device for end-to-end detector/instance-segmentation inference;
  custom CUDA ops may be needed. A CPU import or config check does **not** prove
  CUDA kernels work. `--device cpu` is useful only where the selected model and
  installed extensions support it.
- From the generated skill root, use `scripts/infer_image.py` for a
  non-interactive single image. It has no source-checkout assumptions and fails
  early when prerequisites are absent.
- Do not start a webcam, GUI window, distributed job, full evaluation, or model
  download from this route. Read `references/api-and-workflows.md` for safe
  video-frame, async, webcam boundaries, result interpretation, and the exact
  legacy evaluation flags.

## Safe single-image procedure

1. Select a config/checkpoint pair from the same model family and training
   variant. A checkpoint may carry `CLASSES`; otherwise legacy initialization
   falls back to COCO classes with a warning.
2. Confirm the image is readable and the output path is writable. Keep the
   output separate from the input.
3. Confirm the device explicitly. `cuda:0` (or another visible index) must be
   available for a CUDA run; do not infer GPU kernel support from
   `torch.cuda.is_available()` alone.
4. Run the bundled helper, for example:

   ```bash
   python sub-skills/inference/scripts/infer_image.py \
     --config MODEL_CONFIG --checkpoint MODEL_CHECKPOINT \
     --image INPUT_IMAGE --output OUTPUT_IMAGE \
     --device cuda:0 --score-thr 0.25 --visualizer auto
   ```

   `--visualizer auto` uses `show_result_ins` for SOLO-style tensor mask
   results and otherwise uses `show_result`; use `--visualizer detection` or
   `--visualizer instance` to make the choice explicit.
5. Treat a successful saved image as a visualization smoke, not an accuracy
   result. Record config, checkpoint identity, device, threshold, package
   versions, and whether custom ops loaded.

## Public API route

The public exports are `init_detector`, `inference_detector`,
`async_inference_detector`, `show_result`, `show_result_pyplot`, and
`show_result_ins` from `mmdet.apis`. The core synchronous flow is:

```python
model = init_detector(config, checkpoint, device='cuda:0')
result = inference_detector(model, image_path_or_bgr_ndarray)
show_result(image_path_or_bgr_ndarray, result, model.CLASSES,
            score_thr=0.3, show=False, out_file='result.jpg')
```

`init_detector` sets `config.model.pretrained = None`, builds with the config's
`test_cfg`, loads the optional checkpoint, attaches `model.cfg`, moves the
model to `device`, and calls `eval()`. `inference_detector` reconstructs the
configured test pipeline after replacing its first loader with `LoadImage`,
collates/scatters one sample to the model device, and calls the model with
`return_loss=False, rescale=True` under `torch.no_grad()`.

For a video or image stream, decode one BGR frame at a time and pass the frame
array to `inference_detector`; reuse one initialized model. Save frames or use
`show_result(..., show=False, out_file=...)` for headless operation. Do not
assume a video path can be passed directly to `inference_detector`; the API
accepts an image path or loaded image array, while `mmcv.VideoReader` is the
source-documented frame iterator.

## Result and visualization routing

- Standard detector output is a list of per-class bounding-box arrays, each
  usually shaped `(N, 5)` with `x1, y1, x2, y2, score`; two-stage mask models
  return `(bbox_result, segm_result)`.
- SOLO/Decoupled SOLO/SOLOv2-style instance heads return a one-image list
  containing either `None` or `(seg_masks, cate_labels, cate_scores)` tensors.
  `seg_masks` are boolean-like masks, `cate_labels` are class indices, and
  `cate_scores` are post-NMS scores. Empty predictions can therefore be
  `None`, `[None]`, or an empty structure depending on the detector.
- `show_result` handles bbox and conventional `(bbox, segm)` results and can
  return an image only when both `show=False` and `out_file=None`.
- `show_result_ins` is for SOLO-style instance tensors; it thresholds scores,
  resizes masks to the input image, overlays deterministic colors, labels each
  mask, and writes with `out_file` or returns an array when no output is given.
  It is not a universal replacement for `show_result`.
- `show_result_pyplot` creates a Matplotlib figure and is unsuitable for a
  headless or strictly non-GUI check unless the environment has a backend.

## Recovery and escalation

- Missing config/checkpoint/image: stop and provide an explicit local path;
  do not download or silently substitute a model.
- Import or symbol errors: verify the active environment has the matching
  legacy package, `mmcv==0.2.16`, PyTorch 1.1+ compatibility, `pycocotools`,
  SciPy/OpenCV, and the installed SOLO package. Check `PYTHONPATH` only as a
  temporary, explicit environment choice; do not edit source during inference.
- Device or custom-op errors: retry only after confirming the requested CUDA
  device, PyTorch/CUDA compatibility, and extension build. A CPU retry can
  distinguish Python/config issues but cannot certify CUDA inference.
- Shape/pipeline errors: use the test pipeline in the chosen config, ensure the
  image is a readable color image, and check model/checkpoint family alignment.
  Do not bypass `inference_detector`'s configured normalization, resize, pad,
  and tensor conversion without a deliberate API-level adaptation.
- Empty or visually odd output: inspect `model.CLASSES`, score thresholds,
  SOLO test settings (`score_thr`, `mask_thr`, `update_thr`, `max_per_img`),
  image color/order, and checkpoint provenance before changing code.

## Verification boundary

Safe checks are API import/signature smoke, parser-help for the selected legacy
instance-evaluation entry point, and a tiny local-image inference only when a
local checkpoint already exists. Do not run downloads, webcam capture, GUI,
full dataset evaluation, or distributed testing. The repository's forward
smoke is a CUDA-required/optional final candidate: any CPU branch is not a
substitute for custom CUDA-kernel validation. See the bundled references for
source-derived signatures and difficult usability cases.

Files in this skill

  • SKILL.md7.1 KB
  • references/api-and-workflows.md9.5 KB
  • references/troubleshooting.md11.2 KB
  • scripts/infer_image.py6.8 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…