"Shared PointNet2 TensorFlow layer APIs, PointNet++
Scanned 9/8/2026
Install to Claude Code
npx -y skills add VectorSpaceLab/AREX-Skill --skill model-apis-and-custom-ops --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Model Apis And Custom Ops?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/vectorspacelab-model-apis-and-custom-ops)More formats (shields.io, HTML) on the badges page.
---
name: model-apis-and-custom-ops
description: "Shared PointNet2 TensorFlow layer APIs, PointNet++
set-abstraction/feature-propagation blocks, point-cloud utilities, custom-op
readiness, visualization helper build notes, and the CPU PointNet baseline."
disable-model-invocation: true
metadata:
disco-role: operating
repo: pointnet2
responsibility: shared-model-apis-custom-ops
license: NOASSERTION
---
# model-apis-and-custom-ops
Use this sub-skill when the task is about PointNet2's shared TensorFlow model-building APIs, custom TensorFlow operators, point-cloud geometry utilities, visualization helpers, or the CPU-safe `pointnet_cls_basic` baseline.
## Use this route for
- Building or modifying TensorFlow 1.x layer stacks that use `utils/tf_util.py` wrappers.
- Understanding `pointnet_util.py` set-abstraction (`SA`), multi-scale grouping (`MSG`), and feature-propagation (`FP`) call patterns used by PointNet++ models.
- Checking whether `tf_sampling_so.so`, `tf_grouping_so.so`, and `tf_interpolate_so.so` exist and can be loaded.
- Running a CPU-only graph smoke for `models/pointnet_cls_basic.py`.
- Using or debugging `utils/provider.py`, `utils/pc_util.py`, `utils/show3d_balls.py`, and `render_balls_so.so`.
- Explaining why TensorFlow import success is not the same as PointNet++ custom-op readiness.
## Do not use this route for
- ModelNet40 training/evaluation command construction. Use `../classification-workflows/`.
- ShapeNetPart training, evaluation, or dataset layout checks. Use `../part-segmentation-workflows/`.
- ScanNet preprocessing, pickle layout, or semantic scene workflows. Use `../scannet-semantic-scene-workflows/`.
- Full legacy GPU training as a native verification claim unless the custom-op backend has been separately prepared and proven.
## Read first
- `references/api-reference.md` for exact layer/model signatures, tensor shapes, and model consumer patterns.
- `references/custom-ops.md` for custom TensorFlow op names, `.so` locations, original compile assumptions, and health-check workflow.
- `references/utilities.md` for point-cloud augmentation, geometry conversion, PLY I/O, and visualization-helper behavior.
- `references/troubleshooting.md` for TensorFlow 1.x/TF2, missing dependency, ABI, missing `.so`, and renderer failure diagnoses.
- `references/source-map.md` for the source evidence and verified environment facts behind this sub-skill.
## Skill-owned scripts
- `scripts/inspect_custom_ops.py` — reports TensorFlow import state, expected custom-op files, optional `tf.load_op_library` results, `nvcc`/`g++` availability, and portable compile hints.
- `scripts/smoke_pointnet_baseline.py` — imports the checkout's `pointnet_cls_basic`, builds a `[batch_size, 40]` TF1 CPU graph, and optionally runs one session step.
- `scripts/smoke_geometry_utils.py` — runs deterministic tiny-array checks for provider/geometry helpers and separates missing `eulerangles`/`plyfile` dependencies from real data-shape failures.
- `scripts/compile_render_balls_so.sh` — safe wrapper around the renderer build recipe for `utils/render_balls_so.cpp`; supports `--dry-run` and explicit source/output paths.
## Typical workflows
Run these examples from the `pointnet2` skill root so the skill-owned script paths resolve.
### CPU-safe baseline graph
```bash
python sub-skills/model-apis-and-custom-ops/scripts/smoke_pointnet_baseline.py \
--repo-root /path/to/pointnet2 --batch-size 2 --num-point 16
```
Expected success signal: TensorFlow 1.x with `tf.contrib` imports, `pointnet_cls_basic.get_model()` builds, and the output tensor/static shape is `[2, 40]`. This baseline does **not** require PointNet++ custom ops.
### Custom-op readiness check
```bash
python sub-skills/model-apis-and-custom-ops/scripts/inspect_custom_ops.py \
--repo-root /path/to/pointnet2 --require tensorflow
python sub-skills/model-apis-and-custom-ops/scripts/inspect_custom_ops.py \
--repo-root /path/to/pointnet2 --try-load --require custom-ops
```
Use the first command to prove TensorFlow metadata. Use the second only when the `.so` files are expected to exist; it distinguishes missing libraries, load/ABI errors, and TensorFlow-only success.
### Geometry utility smoke
```bash
python sub-skills/model-apis-and-custom-ops/scripts/smoke_geometry_utils.py \
--repo-root /path/to/pointnet2
```
Expected success signal: provider transformations preserve expected shapes and point-cloud conversions/PLY round-trip work. If `eulerangles` or `plyfile` is missing, fix those packages before treating failures as data-shape errors.
### Renderer compile helper
```bash
bash sub-skills/model-apis-and-custom-ops/scripts/compile_render_balls_so.sh \
--repo-root /path/to/pointnet2 --dry-run
bash sub-skills/model-apis-and-custom-ops/scripts/compile_render_balls_so.sh \
--repo-root /path/to/pointnet2 --out-dir /path/to/pointnet2/utils
```
The helper builds only `render_balls_so.so` for `show3d_balls.py`; it does not build the TensorFlow PointNet++ ops.
## Verification anchors
- `pointnet-basic-model-graph`: CPU/TF1 graph build for `models/pointnet_cls_basic.py`, expected output shape `[B, 40]`.
- `point-cloud-utility-smoke`: NumPy/geometry helper smoke on tiny arrays.
- `custom-op-op-tests`: optional native tests under `tf_ops/*/*_op_test.py`, only after compatible compiled ops exist.
- `pointnet2-custom-op-model-graphs`: optional PointNet++ graph builds that require custom-op import success.
## Cross-links for consumers
- Classification PointNet++ models (`pointnet2_cls_ssg`, `pointnet2_cls_msg`) consume `pointnet_sa_module`, `pointnet_sa_module_msg`, `tf_util.fully_connected`, and `tf_util.dropout`; route command/data questions to `../classification-workflows/`.
- Part segmentation models consume `pointnet_sa_module`, `pointnet_fp_module`, and normal-aware point clouds; route ShapeNetPart data/workflow questions to `../part-segmentation-workflows/`.
- ScanNet semantic segmentation consumes `pointnet_sa_module`, `pointnet_fp_module`, and weighted sparse softmax loss; route ScanNet data/preprocessing questions to `../scannet-semantic-scene-workflows/`.
## Hard limits to keep explicit
- The repository is TensorFlow 1.x-era code. `tf.contrib` is required for the provided batch norm and Xavier initializer paths.
- The Python wrappers in `tf_ops/*` call `tf.load_op_library(...)` at import time; a missing `.so` blocks PointNet++ models before graph construction.
- Original custom-op compile scripts hard-code CUDA 8.0 and Python 2.7 TensorFlow include paths. Modern CUDA drivers/GPU visibility do not prove ABI compatibility.
- `show3d_balls.py` opens an OpenCV window and loads `render_balls_so` at import time; do not import it blindly in headless environments.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!