Changelog¶
All notable changes to this project are documented in this file. The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
0.0.18 (2026-10-20)¶
- Fixed
randlanet.{semantickitti,semantic3d,parislille3d}.open3dto use the activation and input transforms their weights were trained with. - Added the
deprecated_modeldecorator, stacked aboveregister_model, which keeps a renamed model reachable under its former name with aFutureWarningnaming the release that drops it; it replacesregister_model(deprecated_names=...), andmodel_infolists the former names underdeprecated_names. - The former name
point-transformer.s3dis-area5loads again, with aFutureWarning. - Fixed the intermittent
IndexErrorinconstruct_neigh_by_parentwhen DataLoader workers collate ocnn octrees: the batch octree no longer shares ocnn's lookup-table cache.
0.0.17 (2026-10-18)¶
- Added the Point Transformer V3 DALES checkpoint
ptv3.dales.jayakumar-pujar(MIT) and its benchmark on the DALES test tiles. - Added the
DALESdataset, read with the optionallaspypackage, and thereturn_numberandnumber_of_returnsdata keys. - Added the
MaxAbsScaletransform. create_model(pretrained=True)downloads with the Hugging Face token of the environment (utils.hub.load_hub_token), so weights hosted in a gated repository load;read_state_dictunwraps amodel_state_dictkey.download_urltakes requestheaders, not forwarded on redirects, and removes its partial file when the download fails.PointTransformerV3DecoderBlock(cpe_from_skip=)picks what the block xCPE convolves after upsampling;PointTransformerV3Decoder(pooling="grid")uses the summed features, as the reference grid unpooling does.PointTransformerV3Classification.forwardandPointTransformerV3Segmentation.forwardtakeposas their fourth argument, like the encoder, andconditionby keyword only.- Fixed the stem and pooling BatchNorm
epsof the Point Transformer V3 segmentation checkpoints (1e-3). - Added the Open3D-ML model zoo (MIT):
randlanet.{semantickitti,s3dis-area3,toronto3d,semantic3d,parislille3d}.open3d,kpfcnn.{s3dis-area3,semantickitti,toronto3d}.open3d,kpfcnn-deform.parislille3d.open3d,point-transformer.s3dis-area5.open3dandspformer-unet.scannet20.open3d, with their inference transforms and the benchmark scripts of their validation protocols underexamples/randlanet,examples/kpconv,examples/point_transformerandexamples/spformer_unet. - Renamed
point-transformer.s3dis-area5topoint-transformer.s3dis-area5.open3d, which now ships pretrained weights. Semantic3D(download=True, accept_terms=True)fetches the requested scenes and their labels from the benchmark's ETH mirror (7z archives, read with the optionalpy7zrpackage).- Added
datasets.semantickitti.SEMANTIC_KITTI_LEARNING_MAP, the official 19-class learning map of the single-scan benchmark. - Fixed
PointTransformerSegmentationto match the reference network: the attention MLP ofPointTransformerBlockstarts with normalization and activation, the query / key / value projections carry a bias (PointTransformerConv(bias=True)), the decoder opens with aPointTransformerGlobalTransitionthat mixes a global mean feature into the coarsest stage followed by one transformer block, and the head isLinear -> norm -> act -> Linear(architecture snapshots regenerated). - Added the
sonata-small,utonia-small,utonia-tiny,concerto-base-origin,concerto-large-originandconcerto-base-siglippretrained encoders. - Renamed
utonia.pretrain.pointcept,utonia-lp.scannet20.pointceptandsonata-lp.scannet20.fairtoutonia-base.pretrain.pointcept,utonia-base-lp.scannet20.pointceptandsonata-base-lp.scannet20.fair; the former names still load, with aFutureWarning. - Added
register_model(deprecated_names=...), which keeps renamed models reachable under their former names. - Added
WeightsDict(pretrained_filter_fn=...), which maps a checkpoint onto the model keys at load, andWeightsDict(url=...)accepts several files, warning when a later file overrides keys. - The Sonata, Concerto and Utonia weights download from the authors' Hugging Face repositories.
- Added the
pvcnn-c0p25,pvcnn-c0p125,pvcnn2andpvcnn2-c0p5S3DIS Area 5 pretrained weights. - Renamed
pvcnn2.s3dis-area5topvcnn2.s3dis-area5.mit-han-lab; the former name still loads, with aFutureWarning. - Fixed
PVCNN2Segmentationto match PVCNN++: set abstraction groups unscaled relative positions before the features, the decoder skips take each set-abstraction output before its point-voxel convs, and the decoder takes at most one block per set-abstraction level. - Added
--num-pointsto the PVCNN S3DIS benchmark.
0.0.16 (2026-10-14)¶
- Added scores charts and tables to the documentation for better comparison of the models.
0.0.15 (2026-10-13)¶
- Fixed the module paths in
THIRD_PARTY_NOTICES.md, the FAQ entry onnum_classes=overrides, the tutorials index, and the model zoo notebooks that did not run top to bottom. - Removed the
plyfiledependency (GPL-3.0):utils.io.load_plyandsave_plyread and write PLY files with NumPy, and the ScanNet, Paris-Lille-3D and Toronto-3D loaders use them. - Fixed the
SyntaxWarningthat a docstring ofops.box3draised on first import under Python 3.12+.
0.0.14 (2026-10-12)¶
- Added the Data Format, FAQ and About pages to the documentation.
- Every package
__init__defines__all__,transformsimports its classes explicitly andimplicit_reexportis off, so the documented names type-check undermypy --strict. torch_pointcloud.opsimports its modules:tp.ops.box3d,tp.ops.cluster,tp.ops.voxelization, ... are reachable afterimport torch_pointcloud.- Removed the
TORCH_POINTCLOUD_MODELS_DIRvariable: the pretrained weights always live under<cache>/models, andTORCH_POINTCLOUD_CACHE_DIRmoves the cache. create_modelraises anImportErrornaming the model and the installation page when an optional dependency is missing;optional_importtells a package that is not installed from one that does not meet its version requirement, and the flash attention errors point atuse_flash_attn=False.DynamicMeanVFE.forwardtakes(x, pos, batch)like every other packed layer; swap the first two arguments of existingvfe(pos, x, batch)calls.create_pool(None),create_adaptive_pool(None)andcreate_dropout(None)returnNonelikecreate_norm/create_actinstead of raising (overloaded, so a non-Noneargument still types asnn.Module).create_act("swish")resolves tonn.SiLUinstead of PyG'sswishfunction.AnchorHeadLossaccepts 9-column boxes and ignores their velocity columns; no call changes.TransFusionHeadLosssupervises the velocity codes from 9-column boxes oncecode_weightsenables them; its docstring no longer states that the velocity targets are always zero.- Renamed
optim.param_groupstogenerate_param_groupsand removed the MONAI-signature function of that name (its overlapping groups are rejected bytorch.optim):generate_param_groups(model, overrides=[dict(keyword=..., lr=...)]), and the same kwargs asLitModel(param_groups=...). - Fixed the DGCNN segmentation lines of
examples/benchmark.sh, which passed--datasetand--areato scripts that take--model; a test now checks every line of the file against the argparse interface of the script it calls. create_model(..., pretrained=True)no longer warns about overrides:num_classes=Kloads the registered checkpoint and then rebuilds the head forKclasses (0drops it), and the keys whose shape changed under another override (e.g. the stem afterin_channels=) keep their initialization.create_model(..., pretrained=True)warns when the registered weights are released under a non-commercial license.- Added
tests/test_docs_examples.py, which runs every``python fence of the docstrings and the docs pages as pasted with--run-docs(make doctest-docs); a block that cannot run is tagged. Fixed the examples that did not run (missing imports, placeholder names, stale calls, the argument order of theSlidingWindowInfererpredictor) and removed thepytest-markdown-docs` dependency.
0.0.13 (2026-10-11)¶
- Updated some model references in docstrings to include full paper titles.
- Added the detection training scripts of SECOND, PointPillars, PointRCNN, VoxelNeXt, LION, VoteNet and 3DETR.
- Added the finetuning scripts of Point-MAE, Point-BERT, Point-M2AE, PointMamba and PointGPT.
- Added the semantic segmentation training scripts of DGCNN, KP-FCNN, OctFormer, Point Transformer V3, PointNet++, PointNeXt, PVCNN, RandLA-Net, SphereFormer, SpUNet and SPVCNN, and the linear probing of Sonata, Concerto and Utonia.
- Added the classification and part segmentation training scripts of DGCNN, OctFormer, PointConv, PointMLP, PointNet++ and PointNeXt.
- Moved the example scripts to one directory per model, named
<task>_<dataset>_<kind>.py, and removed the generic classification and segmentation scripts. - Added
transforms.functional.cut_boxesandtransforms.PasteBoxes, the copy-paste augmentation of box-annotated scenes. - Added
RandomScale(axes=...)and per-channelClampbounds. - The box augmentations carry the velocity columns of 9-column boxes.
AnchorHead,AnchorGroupHead,PointRCNNRefinementHead,VoxelNeXtSeparateHeadandTransFusionHeadinitialize their heads as the reference detectors do.assign_anchor_targetsandMultiGroupAnchorHeadLosscarry the velocity columns of 9-column boxes.- Renamed
layers.separate_branchtoprediction_branch. - Added
models.model_info, the registry entry of a model without building it. - Added
torch_pointcloud.optim:generate_param_groups(moved fromutils.optim),CosineWarmupLR,PolyLR,bn_momentum,set_bn_momentumandBNMomentumScheduler. - Added
RandomRotate(center=..., vector_keys=...),RandomColorAutoContrast(blend=None), multi-passRandomElasticDistortion,SphereCrop(max_ratio=..., dst_center_key=...)andRandomSample(allow_fewer=True). - Added
transforms.RandomApply,RandomBlockCropandTranslate,S3DIS(num_nodes=None),PointCloudDataLoader(mix=..., mix_prob=...)anddatasets.RepeatSampler. - The masked point modeling pretraining models return
(pred, target, pred_batch, target_batch), packed forchamfer_distance.
0.0.12 (2026-10-07)¶
- Reorganized
lossesinto tiers: each tensor function sits next to its module and is re-exported bylosses.functional; added the module formsSigmoidFocalLoss,GaussianFocalLoss,ChamferDistanceandCornerLoss; the private copies inside the detection losses are gone. - Renamed the detection losses after their head (
AnchorHeadLoss,MultiGroupAnchorHeadLoss,CenterHeadLoss,VoxelNeXtHeadLoss,TransFusionHeadLoss) and their reported terms to<term>_loss. VoteNetLossassigns its targets from the packed ground truth; theGenerateVoteLabelsandEncodeVoteNetTargetstransforms are removed.- Added
tnet_orthogonality_regularizer/TNetOrthogonalityRegularizer, PointNet's feature-transform regularization;TNetandDynamicTNetkeep their last transform inrunning_transform. - Moved
generate_anchors,assign_anchor_targetsandAnchorTargetstoops.anchors; addedops.box3d.points_in_boxesandboxes_iou_nearest_bev. - Added
poly1_focal_loss/Poly1FocalLoss. - Sped up the detection and segmentation losses 2x to 15x with identical values: vectorized heatmap and anchor targets, batched Hungarian matching, class-batched Lovász sort, an axis-aligned prefilter of the rotated IoU, and
chamfer_distanceon the nearest-neighbor kernels of kaolin (optional) ortorch_geometricso whole clouds fit. - The detection losses take the collated dict as
data:forward(output, data). - Removed the scalar
loss_weightof the single-term loss modules;SumLosstakesweightsinstead. - Fixed
TransFusionHeadLossbackpropagating through its IoU-rescore target. - Fixed
assign_anchor_targetsmatching by the rotated BEV IoU; the anchor recipes match by the nearest-axis-aligned one (boxes_iou_nearest_bev) unlessmatch_heightis set. - Removed ML monitoring dependencies (
mlflow,tensorboard,aim) from thedevdependencies.
0.0.11 (2026-10-06)¶
- Removed
FPS_RANDOM_START(TORCH_POINTCLOUD_FPS_RANDOM_START), which is no longer needed as all models turn this off at eval time directly. - Removed
ops.cluster.decimate(no longer used) anddecimate_indices: RandLA-Net decimates withtorch_geometric'sdecimation_indices, drawn in eval from a random state forked and seeded by the input size, so a forward stays reproducible without a dedicated generator (value snapshot regenerated). - Added
losses.kpconv_deform_regularizerand its module formKPConvDeformRegularizer, the fitting and repulsive regularizer of deformableKPConvlayers, computed from the statistics they keep (running_min_d2is now the closest input point per kernel point, \((N, K)\), and the deformed kernel is stored per point);examples/kpconv_segmentation.pytrains with it and the KPConv-PyTorch recipe (SGD 0.98, offsets at a tenth of the learning rate, per-epoch decay, clipped gradients,--deformable).
0.0.10 (2026-09-27)¶
- Moved each family's convolution and blocks from
modelstolayers(kpconv_blocks,randlanet_blocks,point_transformer_conv,grouped_vector_attention,torchsparse_blocks,voxel_grid_pool), and mergedpointconvandpointconv_saintopointconv_blocks.DilatedResidualBlockisRandLANetResidualBlock,KPFCNNGridPoolisVoxelGridPool. - Rebuilt
KPConv,GroupedVectorAttentionandAttentivePoolingonMessagePassing, taking(x, pos, edge_index)withedge_indexas[source, target];KPConvpools the neighbors per kernel point before the matrix products (up to 2x faster, 8x less memory). - Fixed
KPConv(bias=True), which registered a bias without adding it to the output. - Consolidated the duplicated blocks into
layers:PillarFeatureLayer,VoxelGridPool,SparseBasicBlock,TransformerEncoderLayerandTransformerDecoderLayer. - Updated
XConvto takeedge_indexas[source, target], and DGCNN to build its feature graph withknn_graph(loop=True). - Renamed state-dict keys of
second-multihead.nuscenes.openpcdet,voxelnext.nuscenes.openpcdetandlion-mamba.nuscenes.zhe-liu(bn->norm, LION decoder underlayer). - Fixed the PointNeXt classifiers' global set abstraction: a shared MLP over
cat([pos, x])as in the reference, instead of a whole-cloud radius search with zeroed coordinates (global_sa.*keys; ModelNet40 93.80 -> 93.96 OA). - Updated
farthest_point_sampleandFarthestPointSampleto leave a cloud untouched when it has at mostnum_samplespoints (orratio >= 1) instead of reordering it by farthest-point rank; 27 value snapshots regenerated. - Added
ops.cluster.dense_neighborsandgather_neighbors, padding a[source, target]edge list into a(N_t, k)neighbor table over the packed batch;KPConvpools on that table with onebmmwhen the neighborhoods fill at leastdense_fill_thresholdof it (KP-FCNN inference 231 -> 141 ms, training step 905 -> 443 ms). - Fixed
radius(..., sort=True)materializing the full distance matrix on CUDA, where the kernel already returns the smallest source indices (3DETR inference 244 -> 46 ms, 5.3 -> 0.6 GB). - Removed
KNN_DENSE_BUDGETand the densecdistpath ofknn/knn_graph, which wrap thetorch_geometrickernel;grouporders every neighborhood closest first (six pretraining value snapshots regenerated: one patch had two near-equidistant neighbors in the other order). - Removed
KPConv.dense_fill_threshold: the padded neighbor table is the only aggregation path. - Added
PatchLayout/patch_layout: the PTv3 encoder and decoder build the padding and patch offsets once per stage and pass them to the serialized-attention blocks, which also accept them throughpatch_layout=;divisible_padandsplit_batchare vectorized. PTv3 inference 95.7 -> 83.6 ms, training step 390 -> 374 ms, identical outputs. - Fixed
farthest_point_sample/FarthestPointSamplereturning fewer thannum_samplesrows for a smaller cloud: it now keeps the cloud in place and completes it by cycling through its points, asfpsrepeats indices, so the sample size stays fixed (a 1-point object no longer breaksgroup-based tokenizers). 27 value snapshots of 1024-point fixtures regenerated; ShapeNetPart mIoU unchanged (86.90 / 84.51 forpointnext-sm).
0.0.9 (2026-09-26)¶
- Moved the tensor operations of
torch_pointcloud.utils(box3d,cluster,density,geometry,heatmap,hilbert,octree,serialization,voxelization) to a newtorch_pointcloud.opspackage, and dissolvedutils.ops:safe_divideis inops.math,decimateanddecimate_indicesinops.cluster,first_permutationinops.voxelizationandoffset_indexinutils.data;softmaxis replaced bytorch_geometric.utils.softmax, andpad_tailis removed. - Fixed docstrings typos, and added notice about AI tool usage in CONTRIBUTING.
- Updated docs, typos and social card on URL redirects.
0.0.8 (2026-09-25)¶
- Added a checkpoint table to every model page of the docs, generated from the registry, and a comparison with the research codebases to the README.
- Removed
SoftmaxPoolandLogSoftmaxPool, and the"softmax"/"log_softmax"names ofcreate_pool: both always raised. - Keyed the weights cache by the pinned revision (
<checkpoint>/<revision>/<file>), so a checkpoint pinned to new weights downloads them instead of loading the stale file. Weights cached by 0.0.7 and earlier download once more. - Replaced the
torch-cluster,torch-scatterandtorch-sparseimports with theirtorch_geometricequivalents, and requiredtorch-geometric>=2.8, sopyg-libis the only PyG kernel package to install.
0.0.7 (2026-09-24)¶
- Renamed
CenterLossandSparseCenterLosstoCenterPointLossandSparseCenterPointLoss, inlosses.centerpoint. - Renamed the loss weights to
<term>_weight(the 3DETRloss_*_weight, TransFusionhm_weight/bbox_weighttoheatmap_weight/loc_weight, VoteNetloss_scaletoloss_weight) and the TransFusionhungarian_*_costtomatcher_*_cost, and made every loss argument afternum_classeskeyword-only. - Renamed
average_precision3dtobox_average_precision, and the Lightning metricsAveragePrecision3D,MeanAveragePrecision3DandInstancePartMeanIoUtoBoxAveragePrecision,BoxMeanAveragePrecisionandInstancePartMeanIntersectionOverUnion. - Updated
nuscenes_detection_metricsto take(preds, target)likebox_matches, andconfusion_matrix(ignore_index)to accept several indices. - Added
kitti_average_precision, the KITTI 3D detection protocol used by the PointPillars and SECOND benchmarks. - Renamed the
3detr_*andptv3_*examples after their model modules (threedetr_*,point_transformer_v3_*). - Added the class names to the OctFormer and PTv3 ScanNet checkpoints, and
SCANNET200_CLASSES. - Made the dataset arguments after
rootkeyword-only everywhere (ModelNet, ScanNet, ScanObjectNN andNuScenes(split)were positional). - Updated
ParisLille3D,Toronto3DandShapeNetPartto default to the train split like the other datasets, and typed everysplitas aLiteral. - Renamed
RepeatDataset(loop)tok. - Updated
SlidingWindowInferer(softmax)to default toFalselike the other inferers. - Renamed
VoxelPartitionInferer(sub_batch_size)tosw_batch_size, and addedprogresstoVoxelPartitionInfererandTTAInferer. - Made
import torch_pointcloudlazy: subpackages load on first access, so importingtransformsordatasetsno longer loads the models and spconv. - Renamed
BaseBEVBackbone,BaseBEVResBackbone,BasicBlock2d,AnchorHeadSingle,AnchorHeadMulti,MultiGroupSingleHead,PFNLayerandRPEtoBEVBackbone,BEVResidualBackbone,ResidualBlock2d,AnchorHead,MultiGroupAnchorHead,AnchorGroupHead,PillarFeatureLayerandOctreeRelativePositionEncoding. - Moved
utils.ops.voxel_grid_fnvtoutils.voxelization,utils.ops.knn_interpolatetoutils.cluster, andlayers.ensure_msg_list/ensure_msg_list_sizetoutils.conversion, and renamedutils.neighborstoutils.density. - Added
input_keysto the registry, the batch keys each model'sforwardtakes, read byLitModelby default, andutils.data.select_inputs. - Made
taskoptional increate_modelwhen the name is registered under a single task. - Added
ModelInfoDict, the type ofcreate_model(..., return_info=True)info, with the resolvedtaskandinput_keys, and typed the registeredtransformas aTransform. - Moved the
return_intermediatesargument ofPointTransformerV3Encoder.forwardafterposandcondition. - Replaced
RandomDropout(p_drop)withdrop_ratio_range, the range the dropped fraction is drawn from on each call, and renamedfunctional.random_dropout_mask(p_drop)todrop_ratio. - Renamed
Voxelize(method="pyg")tomethod="grid"andVoxelize(random_sample)torandom_first. - Moved
EncodeVoteNetTargetsandGenerateVoteLabelstotorch_pointcloud.models.votenet, andangle_to_class,class_to_angleandclass_to_sizetotorch_pointcloud.utils.box3d. - Moved
functional.split_batchtotorch_pointcloud.layers.serialized_attention, and renamedfunctional.random_color_droptocolor_drop. - Removed
Abs(inplace), since transforms never mutate their input. - Removed the type aliases (
ReduceOp,RescaleMethod,ShiftMethod,VoxelMethod,VoxelReduce,VoxelPosReduce) from thetorch_pointcloud.transformsexports. - Renamed
SubtractKeyandDivideKeytoSubtractItemsandDivideItems, andRandomShifttoRandomTranslate(shift_rangetotranslation_range,functional.shift_boxestotranslate_boxes). - Removed
AlignAxis, the same asShift(method="min", axes=[k]). - Renamed the output-key arguments to
dst_*:namesofCopyItems/RenameItemsandnormal_keyofEstimateNormalstodst_keys, and the output keys ofRandomSampleFaceVertices,BuildOctree,HardVoxelize,GenerateVoteLabels,EncodeVoteNetTargetsandRelabelBoxes. - Renamed
HardVoxelize(feat_key)tofeature_key, likeBuildOctree. - Moved every function of
torch_pointcloud.transforms.functionalnext to its transform in the themed modules;functionalimports them all. - Renamed
functional.abstoabsolute. - Split
torch_pointcloud.transforms.transformsintobase,sampling,masking,geometry,scaling,utils,voxelization,octree,augmentation,boxandmixing;torch_pointcloud.transformsexports the same names. - Removed
DataKeys.SEMANTIC,REFLECTANCEandROOM_MAX:ParisLille3Demitsintensityand the S3DIS blocksscene_max, like the other datasets. - Renamed
DataKeys.POINTStoOCTREE_POINTS. - Renamed
num_group,num_heading_bin(andnum_angle_bin),num_size_clusterandnum_proposalto their plurals in the models, losses, box transforms andutils.cluster.group. - Renamed
sa_npoints,roi_sa_npointsandpreenc_npointstosa_num_points,roi_sa_num_pointsandpreencoder_num_points. - Renamed the PointNet
mlp1_dims/mlp2_dimstomlp1_channels/mlp2_channels, and the Point Transformerencoder_num_groups/decoder_num_groupstoencoder_attention_groups/decoder_attention_groups. - Renamed the Voxel Mamba
d_modeltoembed_dim, the OctFormernum_blockstoencoder_depths(and segmentationchannelstoencoder_channels), and the SPFormer U-Netlayerstodepths. - Renamed the SphereFormer
base_channels,layersandblock_repstostem_channels,channelsanddepth. - Split the SparseUNet
channelsandlayersintoencoder_channels,decoder_channels,encoder_depthsanddecoder_depths, and renamedbase_channelstostem_channels. - Split the
segmentationtask intosemantic-segmentationandpart-segmentation, and renamed thebasetask topretraining. - Renamed
SegmentationModeltoSemanticSegmentationModelandBaseModeltoPretrainingModel, and addedPartSegmentationModel. - Renamed the 3DETR classes from
DETR3D*toThreeDETR*, in thethreedetrmodules. - Renamed the pretraining models to
<Arch>Pretraining, and the Point-MAE and Point-M2AE part segmentation models to*PartSegmentation. - Replaced
LitSegmentationModelwithLitSemanticSegmentationModelandLitPartSegmentationModel. - Replaced the
generatorargument of the random transforms andMixDatasetwithseed, and addedset_random_state. - Fixed seeded random transforms repeating the same draws in every
DataLoaderworker (seed_worker). - Updated PointNet++, VoteNet, PointRCNN, 3DETR, PVCNN++, Point-MAE and Point-M2AE to use the
PointNet2*layers. - Removed
SAModule,GlobalSAModuleandFPModule, replaced byPointNet2SetAbstraction,PointNet2GlobalSetAbstractionandPointNet2FeaturePropagation. - Renamed the
poolargument ofPointNet2Encodertoaggrand of the PointNet++ models tosa_aggr. - Updated the 17 checkpoints built on set abstraction to the new parameter names.
- Removed
utils.diffusionandutils.ensemble, which nothing used. - Removed
config.RANDOM_SEED, which nothing read.
0.0.6 (2026-09-23)¶
- Renamed the ScanObjectNN checkpoints to name their split (
-hardest,-objbg,-objonly) and the KPConv checkpoints tos3dis-area5. - Pinned every registered weight URL to its Hub commit.
- Fixed the
point-mamba-base.scanobjectnn-objonly.dingkang-liangweights (block norms taken from the unusednorm_ffnlayer): OA 83.30 to 92.60. - Added
accept_termstoS3DIS,S3DISHdf5,ScanNetandScanObjectNN;downloadasks for it on the terminal otherwise. - Updated
create_model(pretrained=True)to raise when the model registers no weights. - Added
torch_pointcloud.metricsto the package namespace. - Added the upstream copyright notices to
THIRD_PARTY_NOTICES.md. - Updated the documentation: install order, canonical
latestlinks, social card, model overview scores.
0.0.5 (2026-09-21)¶
- Added performances of object detection models on nuScenes.
- Updated the minimum
torchversion to 2.8. - Updated the CI to test on
torch2.8 and to run on pull requests. - Added
torch2.8 to the install selector. - Updated DGCNN, T-Net, PointNeXt and Point Transformer to use the library's
knn,knn_graphandradius. - Added
CONTRIBUTING.mdand issue templates. - Added the dependencies and their licenses to
THIRD_PARTY_NOTICES.md. - Updated the README with a warning on the required PyG kernels.
- Added social cards to the documentation.
- Added
examples/benchmark.shto run every benchmark. - Removed the
pointnext-xl.s3dis-area6.openpointsregistration (no weights). - Removed the out-of-memory skip of the PTv3 benchmark.
- Updated the benchmark results after the inferers seed fix.
- Added the secondary metrics (
mAcc,OA, per-class AP) to the registry.
0.0.4 (2026-09-20)¶
- Added versioning of the documentation with mike.
- Moved the metrics from
torch_pointcloud.utils.metricsto thetorch_pointcloud.metricssub-package. - Added
intersection_over_unionandaccuracyof aconfusion_matrix, withaverage,ignore_index,class_names. - Removed
compute_iou,compute_mean_iou,overall_accuracyandper_class_accuracy, superseded by the above. - Renamed
part_ioutopart_intersection_over_union;part_mean_intersection_over_unionscores it withaverage. - Added
box_matches;average_precision3dnow scores its records, withaverageandclass_names. - Removed
mean_average_precision3d, superseded byaverage_precision3d. - Updated
instance_average_precisionto takeiou_threshold,averageandclass_names, like the other metrics. - Updated box AP and
count_points_in_boxesfor faster detection benchmarks. - Added
inverse_keytoVoxelPartitionInferer,KNNWindowInfererandPotentialSphereInferer, so atransformthat changes the number of points (pad, voxelize) works in every inferer, as it did inSlidingWindowInferer. - Renamed
VoxelPartitionInferer(reduce=...)toaggregate, and the"weighted_mean"mode ofKNNWindowInfererto"mean", so every inferer names its aggregation the same way. - Renamed
TTAInferer(ema_softmax=...)tosoftmax, nowFalseby default and applied in both aggregation modes. - Added
TTAInferer(transforms=None, num_passes=...)to repeat the base inferer without augmentation. - Added
DataKeys.BLOCK_BBOX, the keySlidingWindowInfererwrites the block bounds under. - Fixed seeded inferers drawing the same fragments on every call, which made the votes of a
TTAInfereridentical: an intseednow advances on each call, andseed=Nonefollows the global generator like the transforms. - Updated the
pointnet2.s3dis-area5.xu-yanbenchmark to 54.83 mIoU (from 54.28), now that its three votes differ. - Updated the inferers overview in the docs.
- Renamed
serialize_coordstoserialize_posandRelativePositionalEncoding.coords_boundarytopos_boundary.
0.0.3 (2026-09-19)¶
- Fixed SPUNet and PTv3 color normalizations to reproduce the same processing as original.
- Updated all tests datasets to use random data instead of subsampled versions of original ones (for testing).
- Added
sw_batch_sizeparameter forSlidingWindowInfererfor faster inference. - Updated benchmark scripts to use
batch_size > 1for faster benchmarking. - Updated the
SerializedRPEattention module operation to use less memory. - Added
FeaturesDictso thatreturn_intermediates=Truereturns the same list for every model: the encoder stages from fine to coarse, each withx,batchandposorpos_grid. - Renamed the intermediates keys
featurestoxandinversetopooling_inverse. - Updated SpUNet, SPFormer-UNet and SPVCNN
forward_featuresto return the skips only withreturn_intermediates=True. - Fixed
octformer-lgstem channels, the model could not run a forward pass. - Fixed
reset_classifierignoringglobal_poolfor PVCNN and PVCNN2. - Fixed Point-MAE and Point-M2AE segmentation
forward_headreturning dense logits but packedpre_logitsfeatures. - Added source links to classes and functions in the docs.
0.0.2 (2026-09-16)¶
- Pinned torch version to 2.10 in the CI to match local development.
- Updated pypi package URLs metadata, README documentation with better CI badges.
- Removed unlinked tutorials from the docs for future releases.
- Fixed
decimate_indicessuch that when a generator is provided, it is reseeded for each sample. - Updated tutorials docs summaries to better highlight the cards.
- Updated examples scripts to auto adjust number of classes based on specified dataset.
- Added tests in CI for all Python versions supported by the project (3.10-3.13).
0.0.1 (2026-08-29)¶
Initial release: a timm-style create_model factory and pretrained-weight registry covering classification, segmentation, detection, self-supervised, and generative point cloud models, built on packed PyG-style batches. Ships datasets with disk caching, MONAI-style dict transforms, tiling and sliding-window inferers, optional PyTorch Lightning modules, and one training and one benchmark script per model under examples/.