Pointcept 는 포인트 클라우드 인식 연구를위한 강력하고 유연한 코드베이스입니다. 또한 다음 논문의 공식 구현이기도합니다.
포인트 변압기 v3 : 더 단순하고, 빠르고, 강합니다
Xiaoyang Wu, Li Jiang, Peng-Shuai Wang, Zhijian Liu, Xihui Liu, Yu Qiao, Wanli Ouyang, Tong Hen, Hengshuang Zhao
컴퓨터 비전 및 패턴 인식에 관한 IEEE 회의 ( CVPR ) 2024- 구두
[Backbone] [PTV3] - [Arxiv] [Bib] [Project] → 여기
OA-CNNS : 3D 시맨틱 세분화를위한 옴-적응 형 스파 스 CNN
Bohao Peng, Xiaoyang Wu, Li Jiang, Yukang Chen, Hengshuang Zhao, Zhuotao Tian, Jiaya Jia
컴퓨터 비전 및 패턴 인식에 관한 IEEE 회의 ( CVPR ) 2024
[Backbone] [OA -CNNS] - [arxiv] [bib] → 여기
다중 다타셋 포인트 프롬프트 교육을 통한 대규모 3D 표현 학습을 향해
Xiaoyang Wu, Zhuotao Tian, Xin Wen, Bohao Peng, Xihui Liu, Kaicheng Yu, Hengshuang Zhao
컴퓨터 비전 및 패턴 인식에 관한 IEEE 회의 ( CVPR ) 2024
[pretrain] [ppt] - [arxiv] [bib] → 여기
마스크 장면 대비 : 감독되지 않은 3D 표현 학습을위한 확장 가능한 프레임 워크
Xiaoyang Wu, Xin Wen, Xihui Liu, Hengshuang Zhao
컴퓨터 비전 및 패턴 인식에 관한 IEEE 회의 ( CVPR ) 2023
[Pretrain] [MSC] - [arxiv] [bib] → 여기
시맨틱 세분화를위한 컨텍스트 인식 분류기 (3D 부분)
Zhuotao Tian, Jiequan Cui, Li Jiang, Xiaojuan Qi, Xin Lai, Yixin Chen, Shu Liu, Jiaya Jia
인공 지능에 관한 AAAI 회의 ( AAAI ) 2023- 구두
[SEMSEG] [CAC] - [ARXIV] [BIB] [2D PART] → 여기
포인트 변압기 v2 : 그룹화 된 벡터주의 및 파티션 기반 풀링
Xiaoyang Wu, Yixing Lao, Li Jiang, Xihui Liu, Hengshuang Zhao
신경 정보 처리 시스템 ( NEURIPS )에 관한 회의 2022
[Backbone] [PTV2] - [Arxiv] [Bib] → 여기
포인트 변압기
Hengshuang Zhao, Li Jiang, Jiaya Jia, Philip Torr, Vladlen Koltun
컴퓨터 비전에 관한 IEEE 국제 회의 ( ICCV ) 2021- 구두
[Backbone] [PTV1] - [arxiv] [bib] → 여기
또한 Pointcept는 다음과 같은 우수한 작업을 통합합니다 (위에 포함).
백본 : MinkUnet (여기), 스펀트 (여기), SPVCNN (여기), OACNNS (여기), PTV1 (여기), PTV2 (여기), PTV3 (여기), Stratifiedformer (여기), OctFormer (여기), SWIN3D (여기);
시맨틱 세분화 : mix3d (여기), CAC (여기);
인스턴스 분할 : PointGroup (여기);
사전 훈련 : PointContrast (여기), 대비 장면 컨텍스트 (여기), 마스크 장면 대비 (여기), Point Prompt Training (여기);
데이터 세트 : Scannet (여기), Scannet200 (여기), Scannet ++ (여기), S3DIS (여기), MatterPort3d (여기), Arkitscene, Structured3d (여기), Nuscenes (여기), Modelnet40 (여기), Waymo (여기).
당신이 당신의 연구에 유용한 지점을 발견한다면, 우리의 일을 격려로 인용하십시오. (੭ˊ꒳ˋ) ੭✧
@misc{pointcept2023,
title={Pointcept: A Codebase for Point Cloud Perception Research},
author={Pointcept Contributors},
howpublished = {url{https://github.com/Pointcept/Pointcept}},
year={2023}
}
conda create -n pointcept python=3.8 -y
conda activate pointcept
conda install ninja -y
# Choose version you want here: https://pytorch.org/get-started/previous-versions/
conda install pytorch==1.12.1 torchvision==0.13.1 torchaudio==0.12.1 cudatoolkit=11.3 -c pytorch -y
conda install h5py pyyaml -c anaconda -y
conda install sharedarray tensorboard tensorboardx yapf addict einops scipy plyfile termcolor timm -c conda-forge -y
conda install pytorch-cluster pytorch-scatter pytorch-sparse -c pyg -y
pip install torch-geometric
# spconv (SparseUNet)
# refer https://github.com/traveller59/spconv
pip install spconv-cu113
# PPT (clip)
pip install ftfy regex tqdm
pip install git+https://github.com/openai/CLIP.git
# PTv1 & PTv2 or precise eval
cd libs/pointops
# usual
python setup.py install
# docker & multi GPU arch
TORCH_CUDA_ARCH_LIST= " ARCH LIST " python setup.py install
# e.g. 7.5: RTX 3000; 8.0: a100 More available in: https://developer.nvidia.com/cuda-gpus
TORCH_CUDA_ARCH_LIST= " 7.5 8.0 " python setup.py install
cd ../..
# Open3D (visualization, optional)
pip install open3d 전처리는 ScanNet20 , ScanNet200 및 ScanNet Data Efficient 의 시맨틱 및 인스턴스 세분화를 지원합니다.
Scannet V2 데이터 세트를 다운로드하십시오.
RAW Scannet의 전처리 코드를 다음과 같이 실행하십시오.
# RAW_SCANNET_DIR: the directory of downloaded ScanNet v2 raw dataset.
# PROCESSED_SCANNET_DIR: the directory of the processed ScanNet dataset (output dir).
python pointcept/datasets/preprocessing/scannet/preprocess_scannet.py --dataset_root ${RAW_SCANNET_DIR} --output_root ${PROCESSED_SCANNET_DIR}(선택 사항) 스캐넷 데이터 효율적인 파일 다운로드 :
# download-scannet.py is the official download script
# or follow instructions here: https://kaldir.vc.in.tum.de/scannet_benchmark/data_efficient/documentation#download
python download-scannet.py --data_efficient -o ${RAW_SCANNET_DIR}
# unzip downloads
cd ${RAW_SCANNET_DIR} /tasks
unzip limited-annotation-points.zip
unzip limited-reconstruction-scenes.zip
# copy files to processed dataset folder
mkdir ${PROCESSED_SCANNET_DIR} /tasks
cp -r ${RAW_SCANNET_DIR} /tasks/points ${PROCESSED_SCANNET_DIR} /tasks
cp -r ${RAW_SCANNET_DIR} /tasks/scenes ${PROCESSED_SCANNET_DIR} /tasks(대체) 당사의 전처리 데이터는 직접 다운로드 할 수 있습니다. [여기] 공식 라이센스에 동의하십시오.
처리 된 데이터 세트 링크 코드베이스 :
# PROCESSED_SCANNET_DIR: the directory of the processed ScanNet dataset.
mkdir data
ln -s ${PROCESSED_SCANNET_DIR} ${CODEBASE_DIR} /data/scannet # RAW_SCANNETPP_DIR: the directory of downloaded ScanNet++ raw dataset.
# PROCESSED_SCANNETPP_DIR: the directory of the processed ScanNet++ dataset (output dir).
# NUM_WORKERS: the number of workers for parallel preprocessing.
python pointcept/datasets/preprocessing/scannetpp/preprocess_scannetpp.py --dataset_root ${RAW_SCANNETPP_DIR} --output_root ${PROCESSED_SCANNETPP_DIR} --num_workers ${NUM_WORKERS} # PROCESSED_SCANNETPP_DIR: the directory of the processed ScanNet++ dataset (output dir).
# NUM_WORKERS: the number of workers for parallel preprocessing.
python pointcept/datasets/preprocessing/sampling_chunking_data.py --dataset_root ${PROCESSED_SCANNETPP_DIR} --grid_size 0.01 --chunk_range 6 6 --chunk_stride 3 3 --split train --num_workers ${NUM_WORKERS}
python pointcept/datasets/preprocessing/sampling_chunking_data.py --dataset_root ${PROCESSED_SCANNETPP_DIR} --grid_size 0.01 --chunk_range 6 6 --chunk_stride 3 3 --split val --num_workers ${NUM_WORKERS} # PROCESSED_SCANNETPP_DIR: the directory of the processed ScanNet dataset.
mkdir data
ln -s ${PROCESSED_SCANNETPP_DIR} ${CODEBASE_DIR} /data/scannetpp 이 Google 양식을 작성하여 S3DIS 데이터를 다운로드하십시오. Stanford3dDataset_v1.2.zip 파일을 다운로드하고 압축을 풀습니다.
Area_5/office_19/Annotations/ceiling 줄 323474 (103.0�0000 => 103.000000)에서 오류를 수정하십시오.
(선택 사항) 정상을 구문 분석하기 위해 여기에서 전체 2D-3D S3DIS 데이터 세트 (XYZ 없음)를 다운로드하십시오.
S3DIS의 전처리 코드를 다음과 같이 실행하십시오.
# S3DIS_DIR: the directory of downloaded Stanford3dDataset_v1.2 dataset.
# RAW_S3DIS_DIR: the directory of Stanford2d3dDataset_noXYZ dataset. (optional, for parsing normal)
# PROCESSED_S3DIS_DIR: the directory of processed S3DIS dataset (output dir).
# S3DIS without aligned angle
python pointcept/datasets/preprocessing/s3dis/preprocess_s3dis.py --dataset_root ${S3DIS_DIR} --output_root ${PROCESSED_S3DIS_DIR}
# S3DIS with aligned angle
python pointcept/datasets/preprocessing/s3dis/preprocess_s3dis.py --dataset_root ${S3DIS_DIR} --output_root ${PROCESSED_S3DIS_DIR} --align_angle
# S3DIS with normal vector (recommended, normal is helpful)
python pointcept/datasets/preprocessing/s3dis/preprocess_s3dis.py --dataset_root ${S3DIS_DIR} --output_root ${PROCESSED_S3DIS_DIR} --raw_root ${RAW_S3DIS_DIR} --parse_normal
python pointcept/datasets/preprocessing/s3dis/preprocess_s3dis.py --dataset_root ${S3DIS_DIR} --output_root ${PROCESSED_S3DIS_DIR} --raw_root ${RAW_S3DIS_DIR} --align_angle --parse_normal(대안) 당사의 전처리 데이터는 [여기서] (일반 벡터 및 정렬 된 각도)를 다운로드 할 수 있습니다. 다운로드하기 전에 공식 라이센스에 동의하십시오.
처리 된 데이터 세트를 코드베이스로 링크합니다.
# PROCESSED_S3DIS_DIR: the directory of processed S3DIS dataset.
mkdir data
ln -s ${PROCESSED_S3DIS_DIR} ${CODEBASE_DIR} /data/s3dis${STRUCT3D_DIR} ). # STRUCT3D_DIR: the directory of downloaded Structured3D dataset.
# PROCESSED_STRUCT3D_DIR: the directory of processed Structured3D dataset (output dir).
# NUM_WORKERS: Number for workers for preprocessing, default same as cpu count (might OOM).
export PYTHONPATH=./
python pointcept/datasets/preprocessing/structured3d/preprocess_structured3d.py --dataset_root ${STRUCT3D_DIR} --output_root ${PROCESSED_STRUCT3D_DIR} --num_workers ${NUM_WORKERS} --grid_size 0.01 --fuse_prsp --fuse_panoSWIN3D의 지침에 따라 원래 40 범주 중에서 0.001 이상의 주파수를 갖춘 25 개의 범주를 유지합니다.
(대체) 당사의 전처리 데이터는 [여기서] (Perspective Views and Panorama View, 471.7g 후) 다운로드하기 전에 공식 라이센스에 동의하십시오.
처리 된 데이터 세트를 코드베이스로 링크합니다.
# PROCESSED_STRUCT3D_DIR: the directory of processed Structured3D dataset (output dir).
mkdir data
ln -s ${PROCESSED_STRUCT3D_DIR} ${CODEBASE_DIR} /data/structured3d # download-mp.py is the official download script
# MATTERPORT3D_DIR: the directory of downloaded Matterport3D dataset.
python download-mp.py -o {MATTERPORT3D_DIR} --type region_segmentations # MATTERPORT3D_DIR: the directory of downloaded Matterport3D dataset.
python pointcept/datasets/preprocessing/matterport3d/unzip_matterport3d_region_segmentation.py --dataset_root {MATTERPORT3D_DIR} # MATTERPORT3D_DIR: the directory of downloaded Matterport3D dataset.
# PROCESSED_MATTERPORT3D_DIR: the directory of processed Matterport3D dataset (output dir).
# NUM_WORKERS: the number of workers for this preprocessing.
python pointcept/datasets/preprocessing/matterport3d/preprocess_matterport3d_mesh.py --dataset_root ${MATTERPORT3D_DIR} --output_root ${PROCESSED_MATTERPORT3D_DIR} --num_workers ${NUM_WORKERS} # PROCESSED_MATTERPORT3D_DIR: the directory of processed Matterport3D dataset (output dir).
mkdir data
ln -s ${PROCESSED_MATTERPORT3D_DIR} ${CODEBASE_DIR} /data/matterport3d오픈 룸을 지시 한 후, 우리는 MatterPort3d의 카테고리를 천장 범주를 추가하여 20 시맨틱 카테고리로 스캐넷으로 다시 가져 왔습니다.
# SEMANTIC_KITTI_DIR: the directory of SemanticKITTI dataset.
# |- SEMANTIC_KITTI_DIR
# |- dataset
# |- sequences
# |- 00
# |- 01
# |- ...
mkdir -p data
ln -s ${SEMANTIC_KITTI_DIR} ${CODEBASE_DIR} /data/semantic_kitti공식 Nuscene 데이터 세트 (Lidar 세분화 포함)를 다운로드하고 다음과 같이 다운로드 된 파일을 구성하십시오.
NUSCENES_DIR
│── samples
│── sweeps
│── lidarseg
...
│── v1.0-trainval
│── v1.0-testNUSCENES에 대한 정보 전처리 코드 (OpenPCDET에서 수정)를 실행하십시오.
# NUSCENES_DIR: the directory of downloaded nuScenes dataset.
# PROCESSED_NUSCENES_DIR: the directory of processed nuScenes dataset (output dir).
# MAX_SWEEPS: Max number of sweeps. Default: 10.
pip install nuscenes-devkit pyquaternion
python pointcept/datasets/preprocessing/nuscenes/preprocess_nuscenes_info.py --dataset_root ${NUSCENES_DIR} --output_root ${PROCESSED_NUSCENES_DIR} --max_sweeps ${MAX_SWEEPS} --with_camera(대안) 당사의 전처리 NUSCENES 정보 데이터는 [여기서만 처리 된 정보 만, 여전히 원시 데이터 세트를 다운로드하고 폴더로 링크해야 함)를 다운로드하기 전에 공식 라이센스에 동의하십시오.
RAW 데이터 세트를 처리 된 Nuscene 데이터 세트 폴더에 연결하십시오.
# NUSCENES_DIR: the directory of downloaded nuScenes dataset.
# PROCESSED_NUSCENES_DIR: the directory of processed nuScenes dataset (output dir).
ln -s ${NUSCENES_DIR} {PROCESSED_NUSCENES_DIR}/raw그런 다음 처리 된 Nuscenes 폴더는 다음과 같이 구성됩니다.
nuscene
| ── raw
│── samples
│── sweeps
│── lidarseg
...
│── v1.0-trainval
│── v1.0-test
| ── info처리 된 데이터 세트를 코드베이스로 링크합니다.
# PROCESSED_NUSCENES_DIR: the directory of processed nuScenes dataset (output dir).
mkdir data
ln -s ${PROCESSED_NUSCENES_DIR} ${CODEBASE_DIR} /data/nuscenes공식 Waymo 데이터 세트 (v1.4.3)를 다운로드하고 다음과 같이 다운로드 된 파일을 구성하십시오.
WAYMO_RAW_DIR
│── training
│── validation
│── testing다음 의존성을 설치하십시오.
# If shows "No matching distribution found", download whl directly from Pypi and install the package.
conda create -n waymo python=3.10 -y
conda activate waymo
pip install waymo-open-dataset-tf-2-12-0전처리 코드를 다음과 같이 실행하십시오.
# WAYMO_DIR: the directory of the downloaded Waymo dataset.
# PROCESSED_WAYMO_DIR: the directory of the processed Waymo dataset (output dir).
# NUM_WORKERS: num workers for preprocessing
python pointcept/datasets/preprocessing/waymo/preprocess_waymo.py --dataset_root ${WAYMO_DIR} --output_root ${PROCESSED_WAYMO_DIR} --splits training validation --num_workers ${NUM_WORKERS}처리 된 데이터 세트를 코드베이스로 링크합니다.
# PROCESSED_WAYMO_DIR: the directory of the processed Waymo dataset (output dir).
mkdir data
ln -s ${PROCESSED_WAYMO_DIR} ${CODEBASE_DIR} /data/waymomkdir -p data
ln -s ${MODELNET_DIR} ${CODEBASE_DIR} /data/modelnet40_normal_resampled 처음부터 훈련. 교육 처리는 configs 폴더의 구성을 기반으로합니다. 교육 스크립트는 exp 폴더에서 실험 폴더를 생성하고 실험 폴더에서 필수 코드를 백업합니다. 교육 프로세스 중에 교육 구성, 로그, 텐서 보드 및 체크 포인트도 실험 폴더에 저장됩니다.
export CUDA_VISIBLE_DEVICES= ${CUDA_VISIBLE_DEVICES}
# Script (Recommended)
sh scripts/train.sh -p ${INTERPRETER_PATH} -g ${NUM_GPU} -d ${DATASET_NAME} -c ${CONFIG_NAME} -n ${EXP_NAME}
# Direct
export PYTHONPATH=./
python tools/train.py --config-file ${CONFIG_PATH} --num-gpus ${NUM_GPU} --options save_path= ${SAVE_PATH}예를 들어:
# By script (Recommended)
# -p is default set as python and can be ignored
sh scripts/train.sh -p python -d scannet -c semseg-pt-v2m2-0-base -n semseg-pt-v2m2-0-base
# Direct
export PYTHONPATH=./
python tools/train.py --config-file configs/scannet/semseg-pt-v2m2-0-base.py --options save_path=exp/scannet/semseg-pt-v2m2-0-base체크 포인트에서 훈련을 재개하십시오. 교육 과정이 우연히 중단되면 다음 스크립트는 주어진 체크 포인트에서 교육을 재개 할 수 있습니다.
export CUDA_VISIBLE_DEVICES= ${CUDA_VISIBLE_DEVICES}
# Script (Recommended)
# simply add "-r true"
sh scripts/train.sh -p ${INTERPRETER_PATH} -g ${NUM_GPU} -d ${DATASET_NAME} -c ${CONFIG_NAME} -n ${EXP_NAME} -r true
# Direct
export PYTHONPATH=./
python tools/train.py --config-file ${CONFIG_PATH} --num-gpus ${NUM_GPU} --options save_path= ${SAVE_PATH} resume=True weight= ${CHECKPOINT_PATH}훈련하는 동안, 모델 평가는 그리드 샘플링 (복셀) 후 포인트 클라우드에서 수행되어 모델 성능의 초기 평가를 제공합니다. 그러나 정확한 평가 결과를 얻으려면 테스트가 필수적 입니다. 테스트 프로세스에는 조밀 한 포인트 구름을 일련의 복셀 포인트 구름으로 서브 샘플링하여 모든 포인트의 포괄적 인 범위를 보장합니다. 이 하위 소재는 예측 및 수집되어 전체 포인트 클라우드의 완전한 예측을 형성합니다. 이 접근법은 단순히 예측을 매핑/보간하는 것과 비교하여 더 높은 평가 결과를 산출합니다. 또한 테스트 코드는 TTA (테스트 시간 증강) 테스트를 지원하여 평가 성능의 안정성을 더욱 향상시킵니다.
# By script (Based on experiment folder created by training script)
sh scripts/test.sh -p ${INTERPRETER_PATH} -g ${NUM_GPU} -d ${DATASET_NAME} -n ${EXP_NAME} -w ${CHECKPOINT_NAME}
# Direct
export PYTHONPATH=./
python tools/test.py --config-file ${CONFIG_PATH} --num-gpus ${NUM_GPU} --options save_path= ${SAVE_PATH} weight= ${CHECKPOINT_PATH}예를 들어:
# By script (Based on experiment folder created by training script)
# -p is default set as python and can be ignored
# -w is default set as model_best and can be ignored
sh scripts/test.sh -p python -d scannet -n semseg-pt-v2m2-0-base -w model_best
# Direct
export PYTHONPATH=./
python tools/test.py --config-file configs/scannet/semseg-pt-v2m2-0-base.py --options save_path=exp/scannet/semseg-pt-v2m2-0-base weight=exp/scannet/semseg-pt-v2m2-0-base/model/model_best.pth tta는 data.test.test_cfg.aug_transform = [...] 대체하여 다음과 같이 비활성화 할 수 있습니다.
data = dict (
train = dict (...),
val = dict (...),
test = dict (
...,
test_cfg = dict (
...,
aug_transform = [
[ dict ( type = "RandomRotateTargetAngle" , angle = [ 0 ], axis = "z" , center = [ 0 , 0 , 0 ], p = 1 )]
]
)
)
) Offset 배치 데이터에서 포인트 클라우드의 분리기이며 PYG의 Batch 개념과 유사합니다. 배치 및 오프셋의 시각적 그림은 다음과 같습니다.
Pointcept는 SpConv 및 MinkowskiEngine 에서 구현 한 SparseUNet 제공합니다. SPCONV는 SPCONV가 MinkowskiEngine보다 빠르고 빠르므로 SPCONV 버전을 권장합니다. 한편 SPCONV는 야외 인식에도 널리 적용됩니다.
Codebase의 SPCONV 버전 SparseUNet MinkowskiEngine 버전에서 완전히 다시 작성되었으며 스크립트를 실행하는 예제 스크립트는 다음과 같습니다.
# ScanNet val
sh scripts/train.sh -g 4 -d scannet -c semseg-spunet-v1m1-0-base -n semseg-spunet-v1m1-0-base
# ScanNet200
sh scripts/train.sh -g 4 -d scannet200 -c semseg-spunet-v1m1-0-base -n semseg-spunet-v1m1-0-base
# S3DIS
sh scripts/train.sh -g 4 -d s3dis -c semseg-spunet-v1m1-0-base -n semseg-spunet-v1m1-0-base
# S3DIS (with normal)
sh scripts/train.sh -g 4 -d s3dis -c semseg-spunet-v1m1-0-cn-base -n semseg-spunet-v1m1-0-cn-base
# SemanticKITTI
sh scripts/train.sh -g 4 -d semantic_kitti -c semseg-spunet-v1m1-0-base -n semseg-spunet-v1m1-0-base
# nuScenes
sh scripts/train.sh -g 4 -d nuscenes -c semseg-spunet-v1m1-0-base -n semseg-spunet-v1m1-0-base
# ModelNet40
sh scripts/train.sh -g 2 -d modelnet40 -c cls-spunet-v1m1-0-base -n cls-spunet-v1m1-0-base
# ScanNet Data Efficient
sh scripts/train.sh -g 4 -d scannet -c semseg-spunet-v1m1-2-efficient-la20 -n semseg-spunet-v1m1-2-efficient-la20
sh scripts/train.sh -g 4 -d scannet -c semseg-spunet-v1m1-2-efficient-la50 -n semseg-spunet-v1m1-2-efficient-la50
sh scripts/train.sh -g 4 -d scannet -c semseg-spunet-v1m1-2-efficient-la100 -n semseg-spunet-v1m1-2-efficient-la100
sh scripts/train.sh -g 4 -d scannet -c semseg-spunet-v1m1-2-efficient-la200 -n semseg-spunet-v1m1-2-efficient-la200
sh scripts/train.sh -g 4 -d scannet -c semseg-spunet-v1m1-2-efficient-lr1 -n semseg-spunet-v1m1-2-efficient-lr1
sh scripts/train.sh -g 4 -d scannet -c semseg-spunet-v1m1-2-efficient-lr5 -n semseg-spunet-v1m1-2-efficient-lr5
sh scripts/train.sh -g 4 -d scannet -c semseg-spunet-v1m1-2-efficient-lr10 -n semseg-spunet-v1m1-2-efficient-lr10
sh scripts/train.sh -g 4 -d scannet -c semseg-spunet-v1m1-2-efficient-lr20 -n semseg-spunet-v1m1-2-efficient-lr20
# Profile model run time
sh scripts/train.sh -g 4 -d scannet -c semseg-spunet-v1m1-0-enable-profiler -n semseg-spunet-v1m1-0-enable-profiler 코드베이스의 MinkowskiEngine 버전 SparseUNet 원래 Minkowskiengine Repo에서 수정되었으며 실행 스크립트 예제는 다음과 같습니다.
# Uncomment "# from .sparse_unet import *" in "pointcept/models/__init__.py"
# Uncomment "# from .mink_unet import *" in "pointcept/models/sparse_unet/__init__.py"
# ScanNet
sh scripts/train.sh -g 4 -d scannet -c semseg-minkunet34c-0-base -n semseg-minkunet34c-0-base
# ScanNet200
sh scripts/train.sh -g 4 -d scannet200 -c semseg-minkunet34c-0-base -n semseg-minkunet34c-0-base
# S3DIS
sh scripts/train.sh -g 4 -d s3dis -c semseg-minkunet34c-0-base -n semseg-minkunet34c-0-base
# SemanticKITTI
sh scripts/train.sh -g 2 -d semantic_kitti -c semseg-minkunet34c-0-base -n semseg-minkunet34c-0-base경량 모듈을 통합하여 최소한의 계산 비용으로 희소 한 CNN의 적응력을 크게 향상시키는 네트워크 패밀리 인 OA-CNN (Omni-Adaptive 3D CNN)을 소개합니다. 자체 변환 모듈이 없으면 OA-CNN은 실내 및 실외 장면의 정확성 측면에서 지점 변압기를 능가하며 훨씬 적은 대기 시간 및 메모리 비용으로 트랜스포머를 능가합니다. OA-CNNS 와 관련된 문제 @pbihao.
# ScanNet
sh scripts/train.sh -g 4 -d scannet -c semseg-oacnns-v1m1-0-base -n semseg-oacnns-v1m1-0-basePTV3는 실내 및 실외 시나리오에서 SOTA 공연을 달성하는 효율적인 백본 모델입니다. 전체 PTV3는 FlashAttention에 의존하지만 FlashAttention은 CUDA 11.6 이상에 의존하지만 로컬 포인트 셉트 환경이 요구 사항을 충족시키는 지 확인하십시오.
요구 사항을 충족시키기 위해 로컬 환경을 업그레이드 할 수없는 경우 (CUDA> = 11.6), 모델 매개 변수를 false 로 설정하고 enc_patch_size 및 dec_patch_size 레벨로 줄임으로써 FlashAttention을 enable_flash 할 수 있습니다 (EG 128).
FlashAttention Force는 RPE를 비활성화하고 정확도를 FP16으로 줄입니다. 이러한 기능이 필요한 경우 enable_flash 비활성화하고 enable_rpe , upcast_attention 및 upcast_softmax 조정하십시오.
프로젝트 저장소에서 자세한 지침 및 실험 레코드 (가중치 포함)를 사용할 수 있습니다. 실행 스크립트의 예제는 다음과 같습니다.
# Scratched ScanNet
sh scripts/train.sh -g 4 -d scannet -c semseg-pt-v3m1-0-base -n semseg-pt-v3m1-0-base
# PPT joint training (ScanNet + Structured3D) and evaluate in ScanNet
sh scripts/train.sh -g 8 -d scannet -c semseg-pt-v3m1-1-ppt-extreme -n semseg-pt-v3m1-1-ppt-extreme
# Scratched ScanNet200
sh scripts/train.sh -g 4 -d scannet200 -c semseg-pt-v3m1-0-base -n semseg-pt-v3m1-0-base
# Fine-tuning from PPT joint training (ScanNet + Structured3D) with ScanNet200
# PTV3_PPT_WEIGHT_PATH: Path to model weight trained by PPT multi-dataset joint training
# e.g. exp/scannet/semseg-pt-v3m1-1-ppt-extreme/model/model_best.pth
sh scripts/train.sh -g 4 -d scannet200 -c semseg-pt-v3m1-1-ppt-ft -n semseg-pt-v3m1-1-ppt-ft -w ${PTV3_PPT_WEIGHT_PATH}
# Scratched ScanNet++
sh scripts/train.sh -g 4 -d scannetpp -c semseg-pt-v3m1-0-base -n semseg-pt-v3m1-0-base
# Scratched ScanNet++ test
sh scripts/train.sh -g 4 -d scannetpp -c semseg-pt-v3m1-1-submit -n semseg-pt-v3m1-1-submit
# Scratched S3DIS
sh scripts/train.sh -g 4 -d s3dis -c semseg-pt-v3m1-0-base -n semseg-pt-v3m1-0-base
# an example for disbale flash_attention and enable rpe.
sh scripts/train.sh -g 4 -d s3dis -c semseg-pt-v3m1-1-rpe -n semseg-pt-v3m1-0-rpe
# PPT joint training (ScanNet + S3DIS + Structured3D) and evaluate in ScanNet
sh scripts/train.sh -g 8 -d s3dis -c semseg-pt-v3m1-1-ppt-extreme -n semseg-pt-v3m1-1-ppt-extreme
# S3DIS 6-fold cross validation
# 1. The default configs are evaluated on Area_5, modify the "data.train.split", "data.val.split", and "data.test.split" to make the config evaluated on Area_1 ~ Area_6 respectively.
# 2. Train and evaluate the model on each split of areas and gather result files located in "exp/s3dis/EXP_NAME/result/Area_x.pth" in one single folder, noted as RECORD_FOLDER.
# 3. Run the following script to get S3DIS 6-fold cross validation performance:
export PYTHONPATH=./
python tools/test_s3dis_6fold.py --record_root ${RECORD_FOLDER}
# Scratched nuScenes
sh scripts/train.sh -g 4 -d nuscenes -c semseg-pt-v3m1-0-base -n semseg-pt-v3m1-0-base
# Scratched Waymo
sh scripts/train.sh -g 4 -d waymo -c semseg-pt-v3m1-0-base -n semseg-pt-v3m1-0-base
# More configs and exp records for PTv3 will be available soon.실내 시맨틱 세분화
| 모델 | 기준 | 추가 데이터 | Num GPU | 발 미우 | 구성 | 텐서 보드 | EXP 레코드 |
|---|---|---|---|---|---|---|---|
| PTV3 | 스캐넷 | ✗ | 4 | 77.6% | 링크 | 링크 | 링크 |
| PTV3 + ppt | 스캐넷 | ✓ | 8 | 78.5% | 링크 | 링크 | 링크 |
| PTV3 | Scannet200 | ✗ | 4 | 35.3% | 링크 | 링크 | 링크 |
| PTV3 + ppt | Scannet200 | ✓ (FT) | 4 | ||||
| PTV3 | S3DIS (Area5) | ✗ | 4 | 73.6% | 링크 | 링크 | 링크 |
| PTV3 + ppt | S3DIS (Area5) | ✓ | 8 | 75.4% | 링크 | 링크 | 링크 |
실외 의미 론적 세분화
| 모델 | 기준 | 추가 데이터 | Num GPU | 발 미우 | 구성 | 텐서 보드 | EXP 레코드 |
|---|---|---|---|---|---|---|---|
| PTV3 | Nuscenes | ✗ | 4 | 80.3 | 링크 | 링크 | 링크 |
| PTV3 + ppt | Nuscenes | ✓ | 8 | ||||
| PTV3 | Semantickitti | ✗ | 4 | ||||
| PTV3 + ppt | Semantickitti | ✓ | 8 | ||||
| PTV3 | Waymo | ✗ | 4 | 71.2 | 링크 | 링크 | 링크 (로그 만 해당) |
| PTV3 + ppt | Waymo | ✓ | 8 |
*릴리스 된 모델 가중치는 V1.5.1 용으로 훈련되며 v1.5.2의 가중치는 여전히 진행 중입니다.
원래 PTV2는 4 * RTX A6000 (48g 메모리)에서 훈련되었습니다. AMP를 활성화하더라도 원래 PTV2의 메모리 비용은 24G보다 약간 큽니다. 24g 메모리를 가진 GPU가 훨씬 더 액세스 할 수 있다는 점을 고려할 때 최신 Pointcept에서 PTV2를 조정하고 4 * RTX 3090 머신에서 실행할 수있었습니다.
PTv2 Mode2 AMP를 활성화하고 위치 인코딩 승수 및 그룹화 된 선형을 비활성화합니다. 추가 연구 동안, 우리는 포인트 클라우드 이해를 위해 정확한 좌표가 필요하지 않다는 것을 발견했습니다 (정확한 좌표를 그리드 좌표로 대체하는 것은 성능에 영향을 미치지 않습니다. 또한 SparseUnet은 예입니다). 그룹화 된 선형의 경우, 그룹화 된 선형의 구현은 Pytorch가 제공하는 선형 레이어보다 더 많은 메모리 비용이 드는 것 같습니다. 코드베이스 및 더 나은 매개 변수 튜닝의 혜택을 받으면 과적으로도 과적으로 문제가 해결됩니다. 재생 성능은 우리 논문에서보고 된 결과보다 훨씬 낫습니다.
실행 스크립트의 예제는 다음과 같습니다.
# ptv2m2: PTv2 mode2, disable PEM & Grouped Linear, GPU memory cost < 24G (recommend)
# ScanNet
sh scripts/train.sh -g 4 -d scannet -c semseg-pt-v2m2-0-base -n semseg-pt-v2m2-0-base
sh scripts/train.sh -g 4 -d scannet -c semseg-pt-v2m2-3-lovasz -n semseg-pt-v2m2-3-lovasz
# ScanNet test
sh scripts/train.sh -g 4 -d scannet -c semseg-pt-v2m2-1-submit -n semseg-pt-v2m2-1-submit
# ScanNet200
sh scripts/train.sh -g 4 -d scannet200 -c semseg-pt-v2m2-0-base -n semseg-pt-v2m2-0-base
# ScanNet++
sh scripts/train.sh -g 4 -d scannetpp -c semseg-pt-v2m2-0-base -n semseg-pt-v2m2-0-base
# ScanNet++ test
sh scripts/train.sh -g 4 -d scannetpp -c semseg-pt-v2m2-1-submit -n semseg-pt-v2m2-1-submit
# S3DIS
sh scripts/train.sh -g 4 -d s3dis -c semseg-pt-v2m2-0-base -n semseg-pt-v2m2-0-base
# SemanticKITTI
sh scripts/train.sh -g 4 -d semantic_kitti -c semseg-pt-v2m2-0-base -n semseg-pt-v2m2-0-base
# nuScenes
sh scripts/train.sh -g 4 -d nuscenes -c semseg-pt-v2m2-0-base -n semseg-pt-v2m2-0-base PTv2 mode1 논문에서보고 한 원래 PTV2입니다. 예제 실행 스크립트는 다음과 같습니다.
# ptv2m1: PTv2 mode1, Original PTv2, GPU memory cost > 24G
# ScanNet
sh scripts/train.sh -g 4 -d scannet -c semseg-pt-v2m1-0-base -n semseg-pt-v2m1-0-base
# ScanNet200
sh scripts/train.sh -g 4 -d scannet200 -c semseg-pt-v2m1-0-base -n semseg-pt-v2m1-0-base
# S3DIS
sh scripts/train.sh -g 4 -d s3dis -c semseg-pt-v2m1-0-base -n semseg-pt-v2m1-0-base원래 PTV1은 Pointcept Codebase에서도 사용할 수 있습니다. PTV1을 오랫동안 실행하지는 않았지만 스크립트를 실행하는 예제가 잘 작동하는지 확인했습니다.
# ScanNet
sh scripts/train.sh -g 4 -d scannet -c semseg-pt-v1-0-base -n semseg-pt-v1-0-base
# ScanNet200
sh scripts/train.sh -g 4 -d scannet200 -c semseg-pt-v1-0-base -n semseg-pt-v1-0-base
# S3DIS
sh scripts/train.sh -g 4 -d s3dis -c semseg-pt-v1-0-base -n semseg-pt-v1-0-basepip install torch-points3d
# Fix dependence, caused by installing torch-points3d
pip uninstall SharedArray
pip install SharedArray==3.2.1
cd libs/pointops2
python setup.py install
cd ../..pointcept/models/__init__.py 의 # from .stratified_transformer import * . # stv1m1: Stratified Transformer mode1, Modified from the original Stratified Transformer code.
# PTv2m2: Stratified Transformer mode2, My rewrite version (recommend).
# ScanNet
sh scripts/train.sh -g 4 -d scannet -c semseg-st-v1m2-0-refined -n semseg-st-v1m2-0-refined
sh scripts/train.sh -g 4 -d scannet -c semseg-st-v1m1-0-origin -n semseg-st-v1m1-0-origin
# ScanNet200
sh scripts/train.sh -g 4 -d scannet200 -c semseg-st-v1m2-0-refined -n semseg-st-v1m2-0-refined
# S3DIS
sh scripts/train.sh -g 4 -d s3dis -c semseg-st-v1m2-0-refined -n semseg-st-v1m2-0-refined SPVCNN 은 SPVNA의 기준 모델이며, 야외 데이터 세트를위한 실용적인 기준이기도합니다.
# refer https://github.com/mit-han-lab/torchsparse
# install method without sudo apt install
conda install google-sparsehash -c bioconda
export C_INCLUDE_PATH= ${CONDA_PREFIX} /include: $C_INCLUDE_PATH
export CPLUS_INCLUDE_PATH= ${CONDA_PREFIX} /include:CPLUS_INCLUDE_PATH
pip install --upgrade git+https://github.com/mit-han-lab/torchsparse.git # SemanticKITTI
sh scripts/train.sh -g 2 -d semantic_kitti -c semseg-spvcnn-v1m1-0-base -n semseg-spvcnn-v1m1-0-baseOctformer의 Octformer : 3D 포인트 구름 용 Octree 기반 변압기 .
cd libs
git clone https://github.com/octree-nn/dwconv.git
pip install ./dwconv
pip install ocnnpointcept/models/__init__.py 의 # from .octformer import * . # ScanNet
sh scripts/train.sh -g 4 -d scannet -c semseg-octformer-v1m1-0-base -n semseg-octformer-v1m1-0-baseSWIN3D의 SWIN3D : 3D 실내 장면 이해를위한 사전 배치 된 변압기 백본 .
# 1. Install MinkEngine v0.5.4, follow readme in https://github.com/NVIDIA/MinkowskiEngine;
# 2. Install Swin3D, mainly for cuda operation:
cd libs
git clone https://github.com/microsoft/Swin3D.git
cd Swin3D
pip install ./pointcept/models/__init__.py 의 # from .swin3d import * . # Structured3D + Swin-S
sh scripts/train.sh -g 4 -d structured3d -c semseg-swin3d-v1m1-0-small -n semseg-swin3d-v1m1-0-small
# Structured3D + Swin-L
sh scripts/train.sh -g 4 -d structured3d -c semseg-swin3d-v1m1-1-large -n semseg-swin3d-v1m1-1-large
# Addition
# Structured3D + SpUNet
sh scripts/train.sh -g 4 -d structured3d -c semseg-spunet-v1m1-0-base -n semseg-spunet-v1m1-0-base
# Structured3D + PTv2
sh scripts/train.sh -g 4 -d structured3d -c semseg-pt-v2m2-0-base -n semseg-pt-v2m2-0-base # ScanNet + Swin-S
sh scripts/train.sh -g 4 -d scannet -w exp/structured3d/semseg-swin3d-v1m1-1-large/model/model_last.pth -c semseg-swin3d-v1m1-0-small -n semseg-swin3d-v1m1-0-small
# ScanNet + Swin-L
sh scripts/train.sh -g 4 -d scannet -w exp/structured3d/semseg-swin3d-v1m1-1-large/model/model_last.pth -c semseg-swin3d-v1m1-1-large -n semseg-swin3d-v1m1-1-large
# S3DIS + Swin-S (here we provide config support S3DIS normal vector)
sh scripts/train.sh -g 4 -d s3dis -w exp/structured3d/semseg-swin3d-v1m1-1-large/model/model_last.pth -c semseg-swin3d-v1m1-0-small -n semseg-swin3d-v1m1-0-small
# S3DIS + Swin-L (here we provide config support S3DIS normal vector)
sh scripts/train.sh -g 4 -d s3dis -w exp/structured3d/semseg-swin3d-v1m1-1-large/model/model_last.pth -c semseg-swin3d-v1m1-1-large -n semseg-swin3d-v1m1-1-large Context-Aware Classifier Default Segmentor 대체하는 각 백본의 성능을 더욱 향상시킬 수있는 세그먼트입니다. 다음 예제 스크립트로 교육 :
# ScanNet
sh scripts/train.sh -g 4 -d scannet -c semseg-cac-v1m1-0-spunet-base -n semseg-cac-v1m1-0-spunet-base
sh scripts/train.sh -g 4 -d scannet -c semseg-cac-v1m1-1-spunet-lovasz -n semseg-cac-v1m1-1-spunet-lovasz
sh scripts/train.sh -g 4 -d scannet -c semseg-cac-v1m1-2-ptv2-lovasz -n semseg-cac-v1m1-2-ptv2-lovasz
# ScanNet200
sh scripts/train.sh -g 4 -d scannet200 -c semseg-cac-v1m1-0-spunet-base -n semseg-cac-v1m1-0-spunet-base
sh scripts/train.sh -g 4 -d scannet200 -c semseg-cac-v1m1-1-spunet-lovasz -n semseg-cac-v1m1-1-spunet-lovasz
sh scripts/train.sh -g 4 -d scannet200 -c semseg-cac-v1m1-2-ptv2-lovasz -n semseg-cac-v1m1-2-ptv2-lovaszPointGroup은 Point Cloud 인스턴스 분할을위한 기준 프레임 워크입니다.
conda install -c bioconda google-sparsehash
cd libs/pointgroup_ops
python setup.py install --include_dirs= ${CONDA_PREFIX} /include
cd ../..pointcept/models/__init__.py 의 # from .point_group import * . # ScanNet
sh scripts/train.sh -g 4 -d scannet -c insseg-pointgroup-v1m1-0-spunet-base -n insseg-pointgroup-v1m1-0-spunet-base
# S3DIS
sh scripts/train.sh -g 4 -d scannet -c insseg-pointgroup-v1m1-0-spunet-base -n insseg-pointgroup-v1m1-0-spunet-base # ScanNet
sh scripts/train.sh -g 8 -d scannet -c pretrain-msc-v1m1-0-spunet-base -n pretrain-msc-v1m1-0-spunet-base # ScanNet20 Semantic Segmentation
sh scripts/train.sh -g 8 -d scannet -w exp/scannet/pretrain-msc-v1m1-0-spunet-base/model/model_last.pth -c semseg-spunet-v1m1-4-ft -n semseg-msc-v1m1-0f-spunet-base
# ScanNet20 Instance Segmentation (enable PointGroup before running the script)
sh scripts/train.sh -g 4 -d scannet -w exp/scannet/pretrain-msc-v1m1-0-spunet-base/model/model_last.pth -c insseg-pointgroup-v1m1-0-spunet-base -n insseg-msc-v1m1-0f-pointgroup-spunet-basePPT는 다중 다타 세트 사전 훈련 프레임 워크를 제시하며 다양한 기존 사전 훈련 프레임 워크 및 백본과 호환됩니다.
# ScanNet + Structured3d, validate on ScanNet (S3DIS might cause long data time, w/o S3DIS for a quick validation) >= 3090 * 8
sh scripts/train.sh -g 8 -d scannet -c semseg-ppt-v1m1-0-sc-st-spunet -n semseg-ppt-v1m1-0-sc-st-spunet
sh scripts/train.sh -g 8 -d scannet -c semseg-ppt-v1m1-1-sc-st-spunet-submit -n semseg-ppt-v1m1-1-sc-st-spunet-submit
# ScanNet + S3DIS + Structured3d, validate on S3DIS (>= a100 * 8)
sh scripts/train.sh -g 8 -d s3dis -c semseg-ppt-v1m1-0-s3-sc-st-spunet -n semseg-ppt-v1m1-0-s3-sc-st-spunet
# SemanticKITTI + nuScenes + Waymo, validate on SemanticKITTI (bs12 >= 3090 * 4 >= 3090 * 8, v1m1-0 is still on tuning)
sh scripts/train.sh -g 4 -d semantic_kitti -c semseg-ppt-v1m1-0-nu-sk-wa-spunet -n semseg-ppt-v1m1-0-nu-sk-wa-spunet
sh scripts/train.sh -g 4 -d semantic_kitti -c semseg-ppt-v1m2-0-sk-nu-wa-spunet -n semseg-ppt-v1m2-0-sk-nu-wa-spunet
sh scripts/train.sh -g 4 -d semantic_kitti -c semseg-ppt-v1m2-1-sk-nu-wa-spunet-submit -n semseg-ppt-v1m2-1-sk-nu-wa-spunet-submit
# SemanticKITTI + nuScenes + Waymo, validate on nuScenes (bs12 >= 3090 * 4; bs24 >= 3090 * 8, v1m1-0 is still on tuning))
sh scripts/train.sh -g 4 -d nuscenes -c semseg-ppt-v1m1-0-nu-sk-wa-spunet -n semseg-ppt-v1m1-0-nu-sk-wa-spunet
sh scripts/train.sh -g 4 -d nuscenes -c semseg-ppt-v1m2-0-nu-sk-wa-spunet -n semseg-ppt-v1m2-0-nu-sk-wa-spunet
sh scripts/train.sh -g 4 -d nuscenes -c semseg-ppt-v1m2-1-nu-sk-wa-spunet-submit -n semseg-ppt-v1m2-1-nu-sk-wa-spunet-submit # RAW_SCANNET_DIR: the directory of downloaded ScanNet v2 raw dataset.
# PROCESSED_SCANNET_PAIR_DIR: the directory of processed ScanNet pair dataset (output dir).
python pointcept/datasets/preprocessing/scannet/scannet_pair/preprocess.py --dataset_root ${RAW_SCANNET_DIR} --output_root ${PROCESSED_SCANNET_PAIR_DIR}
ln -s ${PROCESSED_SCANNET_PAIR_DIR} ${CODEBASE_DIR} /data/scannet # ScanNet
sh scripts/train.sh -g 8 -d scannet -c pretrain-msc-v1m1-1-spunet-pointcontrast -n pretrain-msc-v1m1-1-spunet-pointcontrast # ScanNet
sh scripts/train.sh -g 8 -d scannet -c pretrain-msc-v1m2-0-spunet-csc -n pretrain-msc-v1m2-0-spunet-cscPointcept는 Xiaoyang에 의해 설계되었으며, Yixing이 명명했으며 로고는 Yuechen에 의해 만들어집니다. Hengshuang의 SEMSEG에서 파생되었으며 예를 들어 MinkowskiEngine, PointNet2, MMCV 및 Detectron2와 같은 여러 저장소에 의해 영감을 얻었습니다.