# kpconv-ev **Repository Path**: designer7458/kpconv-ev ## Basic Information - **Project Name**: kpconv-ev - **Description**: KPConv实验复现 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-19 - **Last Updated**: 2026-07-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # KPConv / KPFCNN on EV-Flying This project adapts Open3D-ML's PyTorch `KPFCNN` semantic segmentation model to the EV-Flying point-level foreground/background task. ## Scope - Data: `/home/zikun/jzw/experiments/cetus/EV-Flying-dataset` - Environment: existing conda env `randla_ev` - Model: `open3d.ml.torch.models.KPFCNN` - Input points: normalized `[x, y, t]` from `evs_norm[:, 0:3]` - Input feature: polarity from `evs_norm[:, 3:4]` - Label: foreground/background from `evs_norm[:, 4]` - Track id: never used as an input feature - Open3D kernel cache: `/tmp/kpconv_open3d_kernel_cache` Training uses a fixed validation threshold of `0.9` and saves `best_loss_seed37.pt` and `best_iou_seed37.pt`. Testing exports full original point predictions and the point-level evaluator chooses the best test threshold from the exported probabilities. ## CPU Checks ```bash CUDA_VISIBLE_DEVICES= MPLCONFIGDIR=/tmp/kpconv_mpl \ /home/zikun/anaconda3/envs/randla_ev/bin/python tools/check_ev_flying_dataset.py \ --config configs/ev_flying_kpconv.yaml CUDA_VISIBLE_DEVICES= MPLCONFIGDIR=/tmp/kpconv_mpl \ /home/zikun/anaconda3/envs/randla_ev/bin/python tools/smoke_open3d_kpconv_cpu.py \ --config configs/ev_flying_kpconv.yaml --forward \ --max-sample-points 4096 --min-in-points 128 --max-in-points 256 --batch-limit 256 ``` The command above uses a reduced CPU-only model/patch size for shape smoke. The default config can be instantiated on CPU without a forward pass: ```bash CUDA_VISIBLE_DEVICES= MPLCONFIGDIR=/tmp/kpconv_mpl \ /home/zikun/anaconda3/envs/randla_ev/bin/python -c \ "from pathlib import Path; import sys, torch; sys.path.insert(0, 'tools'); from kpconv_common import resolve_config, build_model; cfg=resolve_config('configs/ev_flying_kpconv.yaml'); model=build_model(cfg, torch.device('cpu')); print(type(model).__name__, model.cfg.first_features_dim, model.cfg.max_in_points, torch.cuda.is_available())" ``` ## GPU Smoke Run only after GPU use is explicitly allowed. ```bash /home/zikun/anaconda3/envs/randla_ev/bin/python tools/train_kpconv_ev_flying.py \ --config configs/ev_flying_kpconv.yaml --device cuda:0 \ --epochs 1 --limit-train 2 --limit-val 2 ``` ## Test And Eval After training creates both checkpoints: ```bash /home/zikun/anaconda3/envs/randla_ev/bin/python tools/evaluate_checkpoints.py \ --config configs/ev_flying_kpconv.yaml --device cuda:0 ``` This tests `best_loss_seed37.pt` and `best_iou_seed37.pt`, writes `test_best_loss/predictions.txt` and `test_best_iou/predictions.txt`, runs point-level threshold eval on each, and selects the higher test IoU in `outputs/ev_flying/checkpoint_eval_summary.json`.