Point Convolutions

Point convolutions operate directly on unstructured point clouds (Points geometry) without voxelization. They aggregate features from neighboring points using a configurable neighbor search and learned transformations.

PointConv

warpconvnet.nn.modules.point_conv.PointConv is the main module.

from warpconvnet.nn.modules.point_conv import PointConv
from warpconvnet.nn.modules.sequential import Sequential
from warpconvnet.geometry.coords.search.search_configs import RealSearchConfig
import torch.nn as nn

net = Sequential(
    PointConv(
        in_channels=3,
        out_channels=64,
        neighbor_search_args=RealSearchConfig("knn", knn_k=16),
    ),
    nn.LayerNorm(64),
    nn.ReLU(),
)

Key parameters

Parameter Description
in_channels / out_channels Input and output feature dimensions
neighbor_search_args A RealSearchConfig specifying the search method ("knn" or "radius") and its parameters
reductions Aggregation functions over neighbors (default: ("mean",))
use_rel_pos Include relative coordinates as edge features
use_rel_pos_encode Include sinusoidal positional encoding of relative coordinates
out_point_type "same" (keep coordinates), "downsample" (voxel-based downsampling), or "provided" (user-supplied query points)

Configure via RealSearchConfig:

# K-nearest neighbors
knn_config = RealSearchConfig("knn", knn_k=16)

# Radius search
radius_config = RealSearchConfig("radius", radius=0.1, max_neighbors=32)

Downsampling

To produce a lower-resolution point cloud, set out_point_type="downsample":

from warpconvnet.ops.reductions import REDUCTIONS

down_conv = PointConv(
    64, 128,
    neighbor_search_args=RealSearchConfig("knn", knn_k=16),
    out_point_type="downsample",
    pooling_voxel_size=0.1,
    pooling_reduction=REDUCTIONS.MEAN,
)

See the API reference for the full signature.