Skip to content

FAQ and common installation/runtime questions

I cloned the repo but openpoints is missing

Clone with submodules:

git clone --recurse-submodules https://github.com/guochengqian/PointNeXt.git
cd PointNeXt
git submodule update --init --recursive

If you already cloned without submodules, run:

git submodule update --init --recursive

For a pure Python import check, the OpenPoints library can also be installed with:

pip install openpoints

For training/evaluation, build the CUDA/C++ extensions from a source checkout.

Does pip install pointnext_official include CUDA ops?

No. The PyPI packages make the Python modules importable and provide metadata/checkpoint helpers. PointNeXt training/evaluation still uses custom CUDA/C++ operators that depend on the local Python, PyTorch, CUDA, compiler, and platform ABI. Build them from source:

cd openpoints/cpp/pointnet2_batch && python setup.py install && cd ../../..
cd openpoints/cpp/pointops && python setup.py install && cd ../../..

chamfer_dist and emd are optional for classification/segmentation and mainly needed for reconstruction/completion tasks.

Can I run PointNeXt on CPU only?

CPU-only import and packaging smoke tests are supported. The main PointNeXt models rely on CUDA custom ops such as ball query / grouping / pointops for practical training and evaluation, so full benchmark reproduction should be run on a CUDA GPU.

What does in_channels mean?

in_channels is the number of per-point input feature channels consumed by the encoder.

Examples:

  • ModelNet40 PointNeXt-S uses xyz only: in_channels=3.
  • ScanObjectNN PointNeXt-S uses xyz plus an extra feature/height channel in this config: in_channels=4.
  • Segmentation configs may use xyz plus color/height/features depending on the dataset pipeline.

A checkpoint must be evaluated with a config that matches its in_channels, width, number of classes, and dataset preprocessing.

Why does ModelNet40 testing use model.encoder_args.width=64?

The default cfgs/modelnet40ply2048/pointnext-s.yaml is PointNeXt-S width 32. The released ModelNet40 model-zoo checkpoint is the C=64 variant, so testing that checkpoint requires:

model.encoder_args.width=64

Training the default width-32 config does not need this override.

Headless server visualization crashes or opens no window

Visualization utilities may require an OpenGL context. On remote/headless servers, prefer offscreen rendering or run through a virtual display:

export PYVISTA_OFF_SCREEN=true
xvfb-run -s "-screen 0 1024x768x24" python examples/segmentation/vis_results.py ...

If visualization still segfaults, first verify the non-visual evaluation command on the same checkpoint/config, then report the OS, GPU driver, CUDA, PyTorch, PyVista, and OpenGL/Mesa versions.

Permission denied when running a Python file

Run Python scripts through Python, not as shell executables:

python examples/classification/main.py --cfg cfgs/modelnet40ply2048/pointnext-s.yaml

If a shell script fails with permission denied, either run it with bash script.sh or mark it executable with chmod +x script.sh.