Pointcept является мощной и гибкой кодовой базой для исследования Point Cloud Presception. Это также официальная реализация следующей статьи:
Точечный трансформатор V3: проще, быстрее, сильнее
Xiaoyang Wu, Li Jiang, Peng-Shuai Wang, Zhijian Liu, Xihui Liu, Yu Qiao, Wanli Ouyang, Tong He, Hengshuang Zhao
Конференция IEEE по компьютерному зрению и распознаванию шаблонов ( CVPR ) 2024 - устный
[Backbone] [ptv3] - [arxiv] [bib] [project] → здесь
OA-CNNS: омни-адаптивные разреженные CNN для 3D семантической сегментации
Bohao Peng, Xiaoyang Wu, Li Jiang, Yukang Chen, Hengshuang Zhao, Zhuotao Tian, Jiaya jia
Конференция IEEE по компьютерному видению и распознаванию шаблонов ( CVPR ) 2024
[Backbone] [oa -cnns] - [arxiv] [bib] → здесь
На пути к крупномасштабному обучению 3D-репрезентации с помощью мульти-датасет
Сяоян Ву, Чжуотао Тянь, Синь Вэнь, Бохао Пенг, Сихуи Лю, Каченг Ю, Хенгшуан Чжао
Конференция IEEE по компьютерному видению и распознаванию шаблонов ( CVPR ) 2024
[Предварительный размер] [ppt] - [arxiv] [bib] → здесь
Контраст сцены в масках: масштабируемая структура для неконтролируемого 3D -представления обучения
Сяоян Ву, Синь Вэнь, Сюйхуи Лю, Хенгшуан Чжао
Конференция IEEE по компьютерному видению и распознаванию шаблонов ( CVPR ) 2023
[Предварительный размер] [MSC] - [arxiv] [bib] → здесь
Учебный контекст-классификатор для семантической сегментации (трехмерная часть)
Zhuotao Tian, Jiequan Cui, Li Jiang, Сяоджуан Ци, Синь Лай, Йисин Чен, Шу Лю, Цзяя Цзяя
Конференция AAAI по искусственному интеллекту ( AAAI ) 2023 - устный
[Semseg] [cac] - [arxiv] [bib] [2d part] → здесь
Point Transformer v2: сгруппированное векторное внимание и объединение на основе разделов
Xiaoyang Wu, Yixing Lao, Li Jiang, Xihui Liu, Hengshuang Zhao
Конференция по системам обработки нейронной информации ( Neurips ) 2022
[Backbone] [ptv2] - [arxiv] [bib] → здесь
Точечный трансформатор
Хэншуан Чжао, Ли Цзян, Цзяя Цзя, Филипп Торр, Владлен Колтун
Международная конференция IEEE по компьютерному видению ( ICCV ) 2021 - устная
[Backbone] [ptv1] - [arxiv] [bib] → здесь
Кроме того, Pointcept объединяет следующую превосходную работу (содержится выше):
Магистраль: Minkunet (здесь), Spunet (здесь), spvcnn (здесь), oacnns (здесь), ptv1 (здесь), ptv2 (здесь), ptv3 (здесь), Stratifiedformer (здесь), Octformer (здесь), swin3d (здесь);
Семантическая сегментация: Mix3d (здесь), CAC (здесь);
Сегментация экземпляра: pointgroup (здесь);
Предварительное обучение: PointContrast (здесь), контрастные контексты сцены (здесь), контраст сцены замаскированной сцены (здесь), Point Quict Training (здесь);
Наборы данных: Scannet (здесь), Scannet200 (здесь), Scannet ++ (здесь), S3DIS (здесь), Matterport3d (здесь), Arkitscene, Structured3d (здесь), Semantickitti (здесь), Nuscenes (здесь), Modelnet40 (здесь), Waymo (здесь).
Если вы считаете, что Pointcept полезным для вашего исследования, пожалуйста, укажите нашу работу в качестве поддержки. (੭ˊ꒳ˋ) ੭✧
@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_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}(Необязательно) Скачать файлы эффективных данных Scannet:
# 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 Загрузите данные S3DIS, заполнив эту форму Google. Загрузите файл Stanford3dDataset_v1.2.zip и раскрипируйте его.
Ошибка исправления в Area_5/office_19/Annotations/ceiling линия 323474 (103.0–0000 => 103.000000).
(Необязательно) Загрузите полный набор данных S3DIS 2D-3D (no 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_panoСледуя инструкции SWIN3D, мы сохраняем 25 категорий с частотами более 0,001 из первоначальных 40 категорий.
(Альтернатива) Наши предварительные данные также могут быть загружены [здесь] (с перспективными представлениями и представлением Panorama, 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Следуя инструкции Open Rooms, мы переехали в категории Matterport3d в Scannet 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-testЗапустите информацию о предварительной обработке (измененный из OpenPCDET) для Nuscenes следующим образом:
# 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 также могут быть загружены [здесь] (только обработанная информация, все еще должна загружать необработанные наборы данных и ссылку на папку), пожалуйста, согласны с официальной лицензией перед загрузкой.
Ссылка с сырым набором данных с обработанной папкой набора данных 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 - это сепаратор точечных облаков в данных партийных данных, и он похож на концепцию Batch в PYG. Визуальная иллюстрация партии и смещения заключается в следующем:
Spearcept обеспечивает SparseUNet , реализованный SpConv и MinkowskiEngine . Версия SPCONV рекомендуется, поскольку SPCONV легко установить и быстрее, чем Minkowskiengine. Между тем, SPCONV также широко применяется в восприятии на открытом воздухе.
Версия 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, и пример запуска сценариев следующим образом:
# 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Представляя омни-адаптивные 3D CNNS ( OA-CNNS ), семейство сетей, которое интегрирует легкий модуль для значительного повышения адаптивности разреженных CNN с минимальными вычислительными затратами. Без каких-либо модулей самосознания OA-CNN выгодно превосходят точечные трансформаторы с точки зрения точности как в внутренних, так и в наружных сценах, с гораздо меньшей задержкой и стоимостью памяти. Проблема, связанная с OA-CNNS CAN @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 зависит от CUDA 11.6 и выше, убедитесь, что ваша локальная среда Pointcept удовлетворяет требованиям.
Если вы не можете обновить свою локальную среду, чтобы удовлетворить требования (CUDA> = 11.6), то вы можете отключить вспышку, установив параметр модели enable_flash для false и уменьшив enc_patch_size и dec_patch_size на уровень (например, 128).
Сила вспышки отключает 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 Gpus | Валь Миу | Конфигурация | Тенсорборд | Exp record |
|---|---|---|---|---|---|---|---|
| PTV3 | Сканат | ✗ | 4 | 77,6% | связь | связь | связь |
| Ptv3 + ppt | Сканат | ✓ | 8 | 78,5% | связь | связь | связь |
| PTV3 | Scannet200 | ✗ | 4 | 35,3% | связь | связь | связь |
| Ptv3 + ppt | Scannet200 | ✓ (Ft) | 4 | ||||
| PTV3 | S3DIS (область5) | ✗ | 4 | 73,6% | связь | связь | связь |
| Ptv3 + ppt | S3DIS (область5) | ✓ | 8 | 75,4% | связь | связь | связь |
Семантическая сегментация на открытом воздухе
| Модель | Эталон | Дополнительные данные | Num Gpus | Валь Миу | Конфигурация | Тенсорборд | Exp record |
|---|---|---|---|---|---|---|---|
| PTV3 | Nuscenes | ✗ | 4 | 80.3 | связь | связь | связь |
| Ptv3 + ppt | Nuscenes | ✓ | 8 | ||||
| PTV3 | Semantickitti | ✗ | 4 | ||||
| Ptv3 + ppt | Semantickitti | ✓ | 8 | ||||
| PTV3 | Уэймо | ✗ | 4 | 71.2 | связь | связь | Ссылка (только журнал) |
| Ptv3 + ppt | Уэймо | ✓ | 8 |
*Выпущенные веса модели обучаются для V1.5.1, веса для V1.5.2, а затем все еще продолжаются.
Оригинальный PTV2 был обучен 4 * RTX A6000 (48 г памяти). Даже включив AMP, стоимость памяти исходного PTV2 немного больше, чем 24 г. Учитывая, что графические процессоры с памятью 24G гораздо более доступны, я настроил 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. Я давно не запускаю 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 ../..# from .stratified_transformer import * in pointcept/models/__init__.py . # 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 является базовой моделью SPVNAS, также является практической базовой линейкой для наборов данных на открытом воздухе.
# 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: трансформаторы на основе Octree для облаков 3D-точки .
cd libs
git clone https://github.com/octree-nn/dwconv.git
pip install ./dwconv
pip install ocnn# from .octformer import * in pointcept/models/__init__.py . # 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 ./# from .swin3d import * in pointcept/models/__init__.py . # 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 является базовой структурой для сегментации экземпляра точечного облака.
conda install -c bioconda google-sparsehash
cd libs/pointgroup_ops
python setup.py install --include_dirs= ${CONDA_PREFIX} /include
cd ../..# from .point_group import * in pointcept/models/__init__.py . # 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. Он получен из SEMSEG Хэншуанга и вдохновленным несколькими репо, например, Minkowskiengine, PointNet2, MMCV и Detectron2.