--- license: mit library_name: torch-pointcloud tags: - point-cloud - 3d - pytorch - torch-pointcloud - point-transformer-v3 - segmentation datasets: - scannet model-index: - name: ptv3-base.scannet20.pointcept results: - task: type: point-cloud-segmentation dataset: name: ScanNet (20 classes) type: scannet metrics: - name: mIoU type: mean_iou value: 76.29 --- # Model card for ptv3-base.scannet20.pointcept A Point Transformer V3 point cloud segmentation model (serialized neighborhood attention). Trained on ScanNet (20 classes). ## Model Details - **Model Type:** Point cloud semantic segmentation - **Model Stats:** - Params (M): 46.2 - Input channels: 6 - Classes: 20 - Features: 64 - **Dataset:** ScanNet (20 classes) - **Metrics:** mIoU 76.29 (reference 77.6) - **Paper:** [Point Transformer V3: Simpler, Faster, Stronger](https://arxiv.org/abs/2312.10035) - **Converted from:** [Pointcept/Pointcept](https://github.com/Pointcept/Pointcept) (MIT) - **Library:** [torch-pointcloud](https://github.com/arthurdjn/pytorch-pointcloud) ## Install ```bash pip install torch-pointcloud ``` This checkpoint also needs `spconv` and `flash-attn`, which need a build matching your torch and CUDA: see the [installation guide](https://pytorch-pointcloud.org/installation/). ## Usage ```python import torch import torch_pointcloud as tp from torch_pointcloud.utils.data import collate model, info = tp.create_model( "ptv3-base.scannet20.pointcept", task="segmentation", pretrained=True, return_info=True, ) model = model.cuda().eval() # GPU-only kernels # synthetic sample with the keys a dataset provides num_points = 8192 sample = { "pos": torch.randn(num_points, 3), "color": torch.rand(num_points, 3) * 255, "normal": torch.randn(num_points, 3), "segment": torch.zeros(num_points, dtype=torch.long), "instance": torch.zeros(num_points, dtype=torch.long), } data = info["transform"](sample) data = collate([data]) data = {key: value.cuda() for key, value in data.items()} with torch.no_grad(): logits = model(data.get("x"), data["pos_grid"], data["batch"], pos=data["pos"]) ``` ## Feature extraction ```python with torch.no_grad(): features = model.forward_features( data.get("x"), data["pos_grid"], data["batch"], pos=data["pos"], ) model.reset_classifier(num_classes=0) with torch.no_grad(): features = model(data.get("x"), data["pos_grid"], data["batch"], pos=data["pos"]) # (N, 64) ``` ## Citation ```bibtex @inproceedings{wu2024ptv3, title = {Point Transformer V3: Simpler, Faster, Stronger}, author = {Xiaoyang Wu and Li Jiang and Peng-Shuai Wang and Zhijian Liu and Xihui Liu and Yu Qiao and Wanli Ouyang and Tong He and Hengshuang Zhao}, booktitle = {CVPR}, year = {2024} } @inproceedings{dai2017scannet, title = {ScanNet: Richly-annotated 3D Reconstructions of Indoor Scenes}, author = {Angela Dai and Angel X. Chang and Manolis Savva and Maciej Halber and Thomas Funkhouser and Matthias Nießner}, booktitle = {CVPR}, year = {2017} } @software{dujardin2026pytorchpointcloud, author = {Arthur Dujardin}, title = {PyTorch PointCloud}, year = {2026}, doi = {10.5281/zenodo.22159632}, url = {https://github.com/arthurdjn/pytorch-pointcloud}, } ```