Skip to content
Back to skills

Classification Workflows

ASecurity

"Route and validate PointCNN TensorFlow 1.x graph-mode

  • 247 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added September 8, 2026
testingpythongobashtestinggitapibackend

Works with

  • cli
  • api

Security analysis

A100/100

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

Scanned September 8, 2026

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

Installs into .claude/skills of the current project.

Are you the author of Classification Workflows?

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

Security grade badge for Classification Workflows
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/vectorspacelab-classification-workflows-arex-skill/badge)](https://www.skillsdirectory.com/skills/vectorspacelab-classification-workflows-arex-skill)

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: classification-workflows
description: "Route and validate PointCNN TensorFlow 1.x graph-mode
  classification workflows, settings, inputs, and run artifacts for the
  supported datasets."
disable-model-invocation: true
metadata:
  disco-role: operating
license: NOASSERTION
---

# Classification workflows

Use this sub-skill to prepare or run the repository's **classification** trainer. It covers ModelNet40, ScanNet object classification, TU-Berlin, Quick Draw, MNIST, and CIFAR-10. This is legacy TensorFlow 1.x graph-mode code; use a compatible Python/TensorFlow 1.x environment and do not infer GPU/custom-op readiness from an import alone.

## Route first

- Use [data-preparation](../data-preparation/SKILL.md) for acquisition, conversion, and full HDF5/file-list validation.
- Use [evaluation-and-artifacts](../evaluation-and-artifacts/SKILL.md) for prediction/metric workflows and artifact interpretation.
- Use [core-xconv-and-operators](../core-xconv-and-operators/SKILL.md) for model internals, augmentation operators, and native operator diagnostics.
- For cross-cutting compatibility failures, use [troubleshooting](../../references/troubleshooting.md).

## Safe preflight

From the PointCNN project root (or an equivalent checkout containing the trainer and its Python modules), first validate inputs without creating checkpoints:

```bash
python3 skills/disco/point-cnn/sub-skills/classification-workflows/scripts/validate_classification_inputs.py --help
python3 skills/disco/point-cnn/sub-skills/classification-workflows/scripts/validate_classification_inputs.py \
  --train-files /path/to/train_files.txt --val-files /path/to/test_files.txt \
  --model pointcnn_cls --setting modelnet_x3_l4
```

The validator checks file-list existence, relative HDF5 resolution, `data`/`label` presence and compatible leading dimensions, rank/feature width, integer labels, and the expected class-count range. It is deliberately read-only. Quick Draw is special: its setting loads an NPZ directory and performs stroke-to-point mapping through `map_fn`; validate that directory and `categories.txt` separately before running.

## Select a workflow and configuration

Use the common trainer directly; do not copy the historical backgrounding launchers. The required flags are:

```text
train_val_cls.py -t/--path TRAIN -v/--path_val VAL -s/--save_folder OUT \
                 -m/--model MODEL -x/--setting SETTING
```

Optional flags are `-l/--load_ckpt CHECKPOINT`, `--epochs N`, `--batch_size N`, `--log FILE` (use `-` for stdout), `--no_timestamp_folder`, and `--no_code_backup`. `--path_val` is required in practice for every standard HDF5 setting; Quick Draw's loader ignores its second argument and uses the NPZ directory passed to `--path`.

The model is dynamically imported from `-m` (normally `pointcnn_cls`) and the setting is imported from that model's directory using `-x`. Verify both names before a long run:

```bash
python3 train_val_cls.py --help
python3 -m py_compile train_val_cls.py pointcnn_cls.py pointcnn_cls/modelnet_x3_l4.py
```

Run a bounded smoke with a tiny fixture, not a benchmark:

```bash
python3 train_val_cls.py -t /tmp/pcnn/train_files.txt -v /tmp/pcnn/val_files.txt \
  -s /tmp/pcnn-smoke -m pointcnn_cls -x modelnet_x3_l4 \
  --epochs 1 --batch_size 2 --no_timestamp_folder --no_code_backup --log -
```

TensorFlow graph construction or execution may still require the legacy dependency stack and can be slow. Stop after a bounded smoke; do not claim accuracy from it.

## Dataset routes

| Dataset | Setting | Input contract / notes |
|---|---|---|
| ModelNet40 | `modelnet_x3_l4` (also aligned, feature, no-X, wider, yxz, or 5-layer variants) | Train and test file lists of HDF5 files; 40 classes, normally XYZ plus optional normals. |
| ScanNet objects | `scannet_x2_l4` | Prepared train/test HDF5 lists; 17 classes in the checked-in setting; XYZ plus RGB features are expected by the conversion. |
| TU-Berlin | `tu_berlin_x3_l4` | Prepared fold HDF5 lists; 250 classes, 512 points, XYZ plus normals. |
| Quick Draw | `quick_draw_full_x2_l6` | `--path` is the NPZ directory containing `categories.txt` and category NPZ files; `--path_val` is ignored by this loader; 345 classes and on-the-fly stroke mapping; high RAM usage. |
| MNIST | `mnist_x2_l4` | HDF5 train/test lists produced by conversion; 10 classes, 4 channels (XYZ + scalar pixel feature), 160 sampled points in setting. |
| CIFAR-10 | `cifar10_x3_l4` | HDF5 train/test lists produced by conversion; 10 classes, 6 channels (XYZ + RGB), 512 sampled points in setting. |

Dataset download and conversion are intentionally not run by this skill. Follow the data-preparation route and confirm that every file-list line resolves relative to its file-list directory. Do not use segmentation HDF5 lists here.

## Input and setting contract

`data_utils.load_cls` opens each listed HDF5 and concatenates `data` and `label`. If a `normal` dataset exists, it concatenates it to `data` along the final axis; otherwise only `data` is used. Every file must therefore have consistent sample count, point count, and feature width. Labels are squeezed to one integer per sample. Expected `data` is rank 3 `(samples, points, channels)` and labels are `(samples,)` after squeeze. Labels must be in `[0, num_class)`.

Settings expose `load_fn`, `balance_fn`, `map_fn`, `keep_remainder`, `num_class`, `sample_num`, batch/training schedule, augmentation ranges, pooling/X-Conv parameters, optimizer, `data_dim`, `use_extra_features`, and related flags. The trainer splits the first three channels as XYZ and treats remaining channels as features only when configured. A frequent hard failure is normals/RGB present in HDF5 while `data_dim` or `use_extra_features` does not match the selected setting; choose a matching configuration rather than silently dropping channels.

`keep_remainder=True` is used by the checked-in classification settings. The final batch can be smaller than `batch_size`; the trainer computes a matching transform/index batch. If adapting a setting with `keep_remainder=False`, incomplete batches are dropped and an undersized fixture may produce zero training batches.

## Augmentation and pooling behavior

Training samples use `pointfly.get_indices` with the setting's sample count and optional `pool_setting_train`, plus random rotation/scaling and jitter. Validation uses the validation ranges and `pool_setting_val`. Normals are rotated when `with_normal_feature=True`; non-normal extra features are passed through. `pointcnn_cls.Net` pools the final fully-connected point features during evaluation before producing `num_class` logits. Model variants differ in X-transformation, sorting, feature usage, X-Conv depth/width, and normal handling; preserve the setting/model pair.

## Outputs, resume, and side effects

With timestamping enabled (default), output is a new directory named from model, setting, timestamp, and process id beneath `--save_folder`. With `--no_timestamp_folder`, output is written directly to the supplied folder. The trainer writes `log.txt` (unless overridden), `ckpts/iter-<global_step>` checkpoint files, and `summary/` TensorBoard event files. Unless `--no_code_backup` is given, it copies the trainer's code directory into the run directory. These are intentional write side effects; use a disposable output directory for smoke tests.

At startup, `--load_ckpt` restores the exact graph-compatible checkpoint. Without it, the trainer attempts the latest checkpoint in the run's `ckpts/` directory. A checkpoint with a different class count, feature width, model variant, or variable names will fail restore; create a fresh output directory or select the matching setting. Never overwrite a valuable run while testing.

## Verification boundary

Native candidates are `train_val_cls.py --help`, setting import/`py_compile`, and a tiny HDF5 contract fixture. Full training, dataset conversion, and benchmark claims are excluded. TensorFlow 1.15 and the legacy `tf.contrib`/`tf.layers` APIs were observed during inspection, but the available GPU smoke and custom operator smoke did not complete; required backend execution remains blocked/partial. Classification does not require the segmentation FPS custom op, but it still requires a functioning TensorFlow 1.x graph-mode stack.

See [configurations](references/configurations.md), [CLI and run layout](references/cli-and-run-layout.md), and [classification troubleshooting](references/troubleshooting.md) for the detailed matrix and recovery steps.

Files in this skill

  • SKILL.md8.4 KB
  • references/cli-and-run-layout.md4.8 KB
  • references/configurations.md4.7 KB
  • references/troubleshooting.md7.2 KB
  • scripts/validate_classification_inputs.py8.5 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…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.