Point Cloud Processing
A point cloud processor reads every 3D point on its own with one shared network, then pools the results into a single shape summary that never depends on point order.
Why Does This Exist?
LiDAR and depth cameras output unordered sets of points, and classic image networks cannot consume a set: shuffling the input rows must not change the answer. The early workaround forced points into structures networks already accepted. Voxel grids work, but a grid holds cells while a -point scan fills under 4 percent of them, so most memory stores empty space. Rendering points into 2D views is cheaper, but view choice discards geometry the sensor actually measured.
Direct processing skips both conversions and learns from the raw set. This page covers the three-stage pipeline: sample the cloud, lift each point with one shared function, then collapse the set with a symmetric pool into a task head. The representation trade itself lives in point clouds, the grid alternative in voxels, and the canonical architecture in PointNet.
Think of It Like This
Tallying parcels in any order
A mailroom tallies a pile of parcels by type. Each parcel is read alone against the same checklist, then the per-parcel notes merge onto one summary sheet. Shuffling the pile before starting changes nothing on the sheet, because no step ever uses pile position.
The checklist is the shared network, the summary sheet is the pooled global vector, and shuffle-proof totals are permutation invariance. The analogy stops at relationships: a tally never asks which parcels sat together, but a chair leg is a cluster of nearby points, not a count. Real pipelines therefore sample spread-out centroids and pool local neighborhoods before the global step, so shape survives the summary.
How It Actually Works
One shared function plus a symmetric pool
Write the cloud as a set where each holds 3 coordinates plus optional extras such as intensity or normals, giving vectors in . A shared function maps to with one weight set applied identically to every point, so is the feature width and never enters the weights. Then a symmetric aggregator collapses the rows: with max-pooling, for each channel , producing one global vector in . Max, sum and mean all ignore input order, which is exactly why shuffling points leaves unchanged.
Worked three-point example
Take on three points: gives , gives , and gives . Max-pooling takes on channel one and on channel two, so . Reorder the input to and the same two maxima return again.
Sampling and task heads
Networks budget a fixed such as 1024 or 2048 points per cloud, and farthest-point sampling picks spread-out points so sparse far regions survive; uniform random sampling instead erases distant objects first, since density falls roughly as with range . For classification an MLP reads alone. For segmentation each point keeps its own concatenated with a copy of , so per-point logits see both local detail and whole-shape context.
Code
pts = [(1, 0, 2), (0, 3, 1), (2, 1, 0)]
def h(p): x, y, z = p return [x + y, y + z]
feats = [h(p) for p in pts]g = [max(f[k] for f in feats) for k in range(2)]print(g)# -> [3, 4]
shuffled = [pts[2], pts[0], pts[1]]gs = [max(h(p)[k] for p in shuffled) for k in range(2)]print(gs)# -> [3, 4]print(g == gs)# -> TrueWatch Out For
Feeding raw sensor coordinates with no canonical frame
The same chair scanned at different positions gives different raw numbers, and the network reads coordinates literally. The symptom is a model that labels the training-room chair correctly but fails on the identical chair two meters away. Subtract the centroid and scale by the maximum norm so every cloud sits centered in a unit sphere, and keep rotation augmentation in training.
Uniform random sampling on range-varying LiDAR
Capping a scan at a fixed with uniform sampling spends the budget where points are densest. The symptom is distant pedestrians vanishing from the sampled cloud while nearby road surface fills most rows. Use farthest-point sampling, or stratify the budget across range bands, so far objects keep representation.
The Quick Version
- Point cloud processing learns directly from unordered sets with no voxel grid.
- One shared function lifts every point to , then a symmetric pool collapses the set.
- Example: on three points max-pools to in any input order.
- Shuffled inputs give identical global vectors because max ignores order.
- Farthest-point sampling protects sparse far regions that uniform sampling erases.
- Classification reads the global vector; segmentation concatenates it back onto each point.