计划执行与检查节点
executing-plans
按既定实施计划完成工作,保持过程检查和反馈。
core-xconv-and-operators【效率与协作】Build and adapt PointCNN X-Conv and X-DeConv graphs, pointfly operators, model heads, and legacy sampling diagnostics.
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
Use this route when a task asks to inspect, adapt, or construct the PointCNN core graph: X-Conv/X-DeConv layers, pointfly geometry and sampling operators, classification or segmentation heads, setting tuples, or the FPS custom operator. This is a TensorFlow 1.x graph-mode contract. It is not a training, data-conversion, checkpoint, or evaluation workflow.
tf.contrib, tf.layers, placeholders, tf.py_func, and sessions. A
TensorFlow 2.x import, even when tf.compat.v1 exists, is not by itself a
compatible runtime for this contract.BLOCKED_REQUIRED_BACKEND; never report that the GPU operator passed.From the installed skill directory, run the API probe before importing model modules:
python scripts/check_tensorflow_api.py --graph-smoke
It performs an optional static graph build and fails clearly when TensorFlow or a required legacy API is unavailable. It does not create a session or enumerate devices.
Read the API reference for signatures and
tensor contracts, then the architecture and settings guide
before changing K, D, P, C, links, or decoder indices.
Validate every layer against the point count of its actual pts input. An
X-Conv requests K * D neighbors and therefore needs K * D <= M; an
inverse-density (ids) sampler also needs K <= M. For a newly selected
query set, use 0 < P <= M; P == -1 means all current points, not a valid
custom-op npoint.
For sampling == 'fps', inspect prerequisites before any build or load:
python scripts/inspect_sampling_build.py --sampling-dir <sampling-dir>
Add --check-load only for an intentional, existing
tf_sampling_so.so load attempt. Add --show-build-command only to print a
manual recipe for review. The diagnostic never compiles, downloads, trains,
or runs a kernel.
pointcnn.xconv consumes pts [N,M,3], optional fts [N,M,F], and query
points qrs [N,P,3]; it returns [N,P,C], or [N,P,C + C//4] when the
final layer enables global features. It selects K*D neighbors, retains
every D-th neighbor, centers them at each query, optionally learns the
[K,K] X transform, and applies a separable convolution over the neighbor
axis.PointCNN(points, features, is_training, setting) stores point and feature
tensors in layer_pts and layer_fts, then builds the configured X-Conv,
optional X-DeConv, and pointwise FC stacks. Input features are split after
the first three coordinate channels and projected before the first X-Conv.xconv_params entries are (K, D, P, C, links). K is retained-neighbor
count, D is dilation stride, P is query count, C is output channels,
and links concatenate earlier feature tensors after they are sliced to the
current query count. Links are supported only with sampling == 'random' in
this implementation and must resolve to existing, row-aligned layers.xdconv_params entries are (K, D, pts_layer_idx, qrs_layer_idx). The
indexed coarse layer supplies source points/features and the indexed finer
layer supplies query points/skip features. The query layer contributes its
inherited P and C; the decoder X-Conv is fused with the skip tensor and
projected back to C. Validate both layer indices and K*D against the
coarse source point count.random takes the first P source points
in this graph (it is not a random draw), ids uses inverse-density sampling
through a Python/NumPy callback, and fps calls the CUDA custom operator.
Do not use a random or ids graph smoke as evidence that an FPS graph or
kernel works.pointcnn_cls.Net produces per-point training logits
[N,P,num_class], then conditionally averages the final point axis for
inference to [N,1,num_class]. pointcnn_seg.Net keeps the point axis and
produces [N,P,num_class] in both training and inference. The outer
workflows apply softmax, argmax, and losses; those are not part of either
Net constructor.[N,M,3] and feature
rank [N,M,F]; choose queries with the setting sampler; account for the
first-layer feature projection, link concatenation, optional global
C//4 widening, and final channel count.P == -1 only where all current
points are intended, and resolve a positive query count before calling FPS.knn_indices_general returns [N,P,K,2] gather
indices, get_indices creates NumPy gather indices, and augment is a graph
op. inverse_density_sampling and duplicate filtering use tf.py_func, so
they require a local graph/session path and are not graph-free or remote-safe
by implication.nvcc,
C++ compiler, TensorFlow include/library paths, CUDA include/runtime paths,
expected library name, and the legacy C++ ABI setting. A successful load only
separates dynamic-link failures from later execution failures; it does not
clear the required GPU gate.Route training and checkpoint production to the classification or segmentation workflow sub-skills; route dataset layout/conversion to data preparation; and route metrics and prediction artifacts to evaluation. For symptoms and recovery rules, read troubleshooting.
Before handing off a graph adaptation, record:
K*D, K, P, link, decoder-index, and channel checks;is_training
branches where applicable; andA graph-only smoke can validate legacy API presence, static ranks, and some
X-Conv tensor algebra. It cannot prove the GPU FPS kernels. Preserve
BLOCKED_REQUIRED_BACKEND or a clearly partial status until a bounded GPU
operator session completes.