Skip to content
AI360Xpert
Beta

KPConv Kernel Points Convolution

Drop a tiny constellation of kernel points onto the cloud and weight neighbors by closeness. KPConv is convolution rebuilt for raw points.

Kernel points in a ball weight nearby cloud points by distance
Kernel points in a ball weight nearby cloud points by distance

Why Does This Exist?

Voxels quantize and global pooling blurs, yet images prove convolution works. KPConv exists to bring real convolution to raw points: a set of kernel points floats in a ball around each center, and input points contribute to each kernel by distance, exactly like pixels under a 3×33 \times 3 kernel. Deformable mode then shifts kernels to fit local shape.

Other locals are DGCNN edges and Point Transformer attention.

Think of It Like This

Cookie cutters pressed into dough

Press Star cutters into dough: dough under a star takes its flavor, nearby dough takes less. Nudge the cutters to fit thick spots and the pattern follows the dough.

Kernel points are cutters and influence radii are their reach. The analogy stops at learning: cutters stay fixed while kernel weights and deform offsets train.

How It Actually Works

Rigid KPConv places 1515 kernel points on a sphere of radius rr around center xx, plus one at the center. For neighbor pp with feature ff, weight to kernel kk is h=max⁡(0,1−∥p−(x+k)∥/σ)h = \max(0, 1 - \|p - (x + k)\| / \sigma) with influence σ\sigma tied to density. Output is ∑kWk∑php,kfp\sum_k W_k \sum_p h_{p,k} f_p. Deformable KPConv predicts offsets Δk\Delta_k per center so kernels slide onto thin poles and edges. Grid subsampling with growing rr builds the UNet.

Worked numbers

Neighbor 0.050.05 m from a kernel with σ=0.1\sigma = 0.1 m gets weight 1−0.05/0.1=0.51 - 0.05/0.1 = 0.5. A point 0.120.12 m away gets 00. With r=0.2r = 0.2 m and 1515 kernels, reference ScanNet validation mIoU lands near 6868 percent rigid and about 6969 percent deformable.

Code

def kp_weight(dist: float, sigma: float) -> float:    return max(0.0, 1.0 - dist / sigma)  # linear falloff inside influence

print(kp_weight(0.05, 0.1))  # -> 0.5print(kp_weight(0.12, 0.1))  # -> 0.0

Watch Out For

Using one radius for all densities

Near scans pack hundreds of points per ball while far scans hold dozens, so fixed rr over-smooths near and starves far. The symptom is range-dependent mIoU gaps. Grow radius with subsampling stride and density, and check far-field scores separately.

The Quick Version

  • KPConv places kernel points in 3D balls as continuous convolution weights.
  • Distance falloff decides how much each cloud point feeds each kernel.
  • Deformable offsets slide kernels onto thin local shape.
  • Fifteen kernels at 0.20.2 m radius suit indoor rooms.
  • Reference ScanNet mIoU sits near 6868 percent rigid.
  • Radius must grow with stride and sparsity.