L’interface est localisée ; les présentations et documents des Skills sont traduits automatiquement par IA dans votre langue. Le code, les commandes, chemins et termes techniques restent en version originale, et le document de l’auteur fait foi.
Explorer les Skills
Productivité · SKILL.md

segmentation-workflows

segmentation-workflows

Route legacy PointCNN TensorFlow 1.x graph-mode segmentation training and inference for ShapeNet Parts, S3DIS, ScanNet, and Semantic3D, including FPS prerequisites and prediction artifacts.

Independent GitHub snapshot · Automated classification · Original documentation governs

Documentation de la Skill

GitHub

name: segmentation-workflows description: "Route legacy PointCNN TensorFlow 1.x graph-mode segmentation training and inference for ShapeNet Parts, S3DIS, ScanNet, and Semantic3D, including FPS prerequisites and prediction artifacts." disable-model-invocation: true metadata: disco-role: operating license: NOASSERTION

Segmentation workflows

Use this sub-skill when a Researcher needs to train, validate, or test the PointCNN segmentation graph for ShapeNet Parts, S3DIS, ScanNet, or Semantic3D. This is legacy TensorFlow 1.x graph-mode code. A successful Python import or CPU-side HDF5 check is not evidence that a segmentation graph can execute.

Hard prerequisite: GPU FPS custom operators

All four shipped segmentation settings select sampling = 'fps'. During graph construction, pointcnn.py imports sampling/tf_sampling.py, which loads tf_sampling_so.so. The registered FarthestPointSample, GatherPoint, and gradient operators are DEVICE_GPU kernels only. Segmentation therefore needs a shared library built for the target TensorFlow/Python/CUDA ABI and a usable CUDA GPU; there is no supported CPU fallback for these settings.

Run the read-only preflight before graph construction:

python3 scripts/check_fps_prerequisites.py \
  --sampling-dir sampling \
  --source-dir sampling \
  --load-library --require-gpu --json

The preflight does not compile, download, create a session, or execute an FPS kernel. PARTIAL_REQUIRED_BACKEND means the files/runtime are only inspected; it is never a pass. BLOCKED_REQUIRED_BACKEND means a required component is missing or failed. Current runtime evidence is TensorFlow 1.15 import and GPU discovery passed, while a bounded GPU/custom-op session timed out. Preserve BLOCKED_REQUIRED_BACKEND for FPS and do not claim that GPU custom operators ran until a bounded target-GPU custom-op smoke actually completes.

Route the workflow

  1. Send dataset acquisition, conversion, block construction, and file-list generation to data-preparation. Do not download, decompress, or convert large datasets from this sub-skill.

  2. Choose the exact dataset setting in configurations, including its class count, feature width, and block/index convention.

  3. Validate every flat HDF5 file list, or an explicit HDF5 path, before opening a TensorFlow graph:

    python3 scripts/validate_segmentation_h5.py \
      --filelist DATA/train_files.txt --data-dim 3 --num-class 50
    

    The validator is read-only. It checks required datasets, ranks, compatible dtypes, finite data, active point counts, active label ranges, optional indices_split_to_full rank/shape/non-negativity, and optional source-index bounds. A trainer parent list of child lists must be validated one child HDF5 list at a time; it is not a flat input list.

  4. Run a foreground command from CLI and prediction contracts with explicit data, checkpoint, and output paths. Do not copy the historical backgrounding launchers; several contain duplicated or unsupported flags.

  5. Send prediction validation, block merging, and metrics to evaluation-and-artifacts. This skill ends at model outputs and does not merge or score them.

The model argument is normally pointcnn_seg; the setting argument is the module name under pointcnn_seg/, such as shapenet_x8_2048_fps. The setting and checkpoint must describe the same graph: num_class, data_dim, feature flags, layer arrays, and sampling must match.

Train and validate

train_val_seg.py requires these exact arguments:

  • --filelist/-t and --filelist_val/-v: training and validation HDF5 lists;
  • --save_folder/-s: output parent;
  • --model/-m: normally pointcnn_seg;
  • --setting/-x: a module under pointcnn_seg/.

Optional exact arguments are --load_ckpt/-l, --epochs, --batch_size, --log FILE (use --log - for stdout), --no_timestamp_folder, and --no_code_backup. Example:

CUDA_VISIBLE_DEVICES=0 python3 train_val_seg.py \
  --filelist DATA/train_files.txt --filelist_val DATA/val_files.txt \
  --save_folder OUTPUT/seg --model pointcnn_seg \
  --setting shapenet_x8_2048_fps --epochs 1 --batch_size 1 \
  --no_code_backup --log -

Without --no_timestamp_folder, the run root is SAVE_FOLDER/MODEL_SETTING_TIMESTAMP_PID/; with it, the root is exactly SAVE_FOLDER/. The trainer creates ckpts/ (checkpoints such as ckpts/iter-STEP) and summary/ (TensorBoard event files), and writes a log unless --log - is used. A checkpoint is restored from --load_ckpt or the latest checkpoint in that root when available. A one-epoch/tiny run is only a bounded graph/data smoke, not a benchmark.

The trainer loads data, data_num, label, and label_seg through data_utils.load_seg; it samples sample_num points, with bounded random variation during training. Validation reports loss, point accuracy, and mean per-class accuracy. Keep data_num accurate: only 0:data_num[i] is active; padded label_seg values do not become valid labels automatically.

Inference and prediction artifacts

For S3DIS, ScanNet, and Semantic3D, test_general_seg.py accepts exactly --filelist/-t, --load_ckpt/-l, --model/-m, and --setting/-x, plus optional --max_point_num/-p, --repeat_num/-r, and --save_ply/-s:

CUDA_VISIBLE_DEVICES=0 python3 test_general_seg.py \
  --filelist DATA/scannet/seg/test_files.txt \
  --load_ckpt OUTPUT/seg/ckpts/iter-STEP \
  --model pointcnn_seg --setting scannet_x8_2048_fps \
  --max_point_num 8192 --repeat_num 1 --save_ply

--max_point_num defaults to 8192, is the fixed graph placeholder width, and must equal the input HDF5 data.shape[1] (and be at least every data_num[i]). repeat_num defaults to 1 and changes random coverage and inference batch size; it is not an ensemble count. For each input name.h5, the tester writes name_pred.h5 beside it with:

  • data_num: copied active point counts;
  • label_seg: [items, max_point_num] predicted labels, with -1 in unused padding;
  • confidence: [items, max_point_num] retained maximum softmax probability, with zero in padding;
  • indices_split_to_full: copied unchanged when present.

For each point, the tester keeps the class from the sampled occurrence with the largest maximum softmax probability; it does not average probabilities or vote. With --save_ply, data_utils.save_ply_property_batch writes colored files named name_predply_label_0000.ply, name_predply_label_0001.ply, and so on beside the prediction HDF5. PLY is visualization only.

For ShapeNet Parts, test_shapenet_seg.py accepts exactly --filelist/-f, --category/-c, --data_folder/-d, --load_ckpt/-l, --model/-m, and --setting/-x; optional arguments are --repeat_num/-r, --sample_num, and --save_ply/-s:

CUDA_VISIBLE_DEVICES=0 python3 test_shapenet_seg.py \
  --filelist DATA/shapenet/test_files.txt \
  --category DATA/shapenet/categories.txt \
  --data_folder DATA/shapenet/test_data \
  --load_ckpt OUTPUT/seg/ckpts/iter-STEP \
  --model pointcnn_seg --setting shapenet_x8_2048_fps \
  --repeat_num 1 --save_ply

The script uses setting.sample_num even though it parses --sample_num. It creates DATA/shapenet/test_data_pred_nips_1/CATEGORY/ and writes one category-local integer label per original point to BASENAME.seg. The coordinate tree must contain one .pts file per HDF5 item in the same sorted category/file order; a point-count mismatch asserts. With --save_ply, it also writes DATA/shapenet/test_data_pred_nips_1_ply/CATEGORY/BASENAME.ply. The category list is category part_count per row; row order must match the HDF5 object label, and cumulative part offsets are used only to restrict logits before category-local labels are written.

Do not merge or score these artifacts here. Use the evaluation sibling for the ShapeNet .seg tree, general prediction HDF5, PLY inspection, and all block-to-full mappings.

Failure gates

  • Stop before training/testing if FPS cannot be loaded or executed on the target GPU. Diagnose rather than silently switching to CPU.
  • Stop on HDF5 rank, dtype, finite-value, point-count, label-range, or index inconsistencies; repair the data contract upstream.
  • Stop on checkpoint/setting mismatch; select or rebuild the matching setting.
  • Stop if general inference uses a max_point_num different from the HDF5 padded width.
  • Avoid dataset downloads, decompression, full conversion, and long benchmark runs in a smoke check.

Read the linked references for the exact schemas, configuration matrix, output names, merge boundaries, and recovery actions.

Skills enregistrées