콘텐츠로 이동
Search

Pointgroup:ConfigParameters

PointGroup 학습 설정 파일 파라미터 해설 및 수정 가이드

개요

이 문서는 Pointcept의 PointGroup instance segmentation 학습 설정 파일 전역의 파라미터를 한글로 설명하고, 각 파라미터의 수정 가이드라인을 정리한 것이다.

기준 파일:

  • configs/scannet/insseg-pointgroup-v1m1-0-spunet-base.py (주 설정)
  • configs/_base_/default_runtime.py (상속되는 기본 런타임 설정)

설정 파일은 _base_로 기본 런타임을 상속하고, 주 설정에서 같은 이름의 변수를 다시 정의하면 덮어쓴다. 아래 표의 "기본값"은 두 파일을 합친 최종 유효값이다.

범례

  • <span style="color:blue;font-weight:bold">안전: 자유롭게 바꿔도 되는 값
  • <span style="color:orange;font-weight:bold">주의: 다른 값과 연동되거나 결과에 크게 영향
  • <span style="color:red;font-weight:bold">위험: 함부로 바꾸면 학습이 깨지거나 평가가 무의미해짐

1. 런타임 / 실행 제어 (default_runtime.py)

파라미터

기본값

설명

수정 가이드

weight

None

학습 시작 시 불러올 모델 가중치 경로. CheckpointLoader 훅이 사용

사전 학습된 backbone(예: Sonata, PTv3)으로 fine-tune할 때 지정. 키 이름이 다르면 CheckpointLoader의 keywords/replacement로 매핑

resume

False

중단된 학습을 이어서 진행. optimizer/scheduler 상태까지 복원

같은 save_path의 model_last.pth를 이어갈 때 True. 새 데이터셋으로 바꿨으면 False

evaluate

True

매 eval 주기마다 val 셋 평가 수행

평가 시간이 길면 False로 하고 나중에 test_only로 평가. 단, best checkpoint 저장이 안 됨

test_only

False

학습 없이 test만 수행

tools/test.sh가 자동으로 설정. 직접 건드릴 일 없음

seed

None

난수 시드. None이면 무작위 생성 후 기록

재현 실험 시 고정. ablation 비교는 반드시 같은 seed

save_path

"exp/default"

로그, checkpoint, config 백업 저장 경로

실험마다 다른 경로. tools/train.sh -n이 자동 설정

num_worker

12

전체 GPU에 걸친 DataLoader worker 총 수

CPU 코어 수 이하. RAM 부족(OOM kill)이면 줄임. GPU당 4~8 권장

batch_size

12

전체 GPU에 걸친 총 배치 크기. GPU당 = batch_size / GPU 수

<span style="color:orange;font-weight:bold">주의 GPU 메모리에 맞춤. 줄이면 lr도 비례해서 줄이는 것이 안전. GPU 수로 나누어떨어져야 함

gradient_accumulation_steps

1

이 횟수만큼 gradient를 누적한 뒤 한 번 update. 유효 배치 = batch_size × steps

메모리가 부족해 batch_size를 못 늘릴 때 사용. BN 통계는 누적되지 않으므로 완전한 대체는 아님

batch_size_val

None

val 배치. None이면 GPU당 1

instance seg는 scene 단위 평가라 1 유지 권장

batch_size_test

None

test 배치. None이면 GPU당 1

1 유지

epoch

800

총 학습 epoch

<span style="color:orange;font-weight:bold">주의 데이터가 100장→700장으로 늘면 같은 epoch라도 iteration이 7배. 총 iteration 기준으로 재설정. 수렴 곡선 보고 결정

eval_epoch

100

평가/checkpoint 주기 계산용. 데이터 loop 수 = epoch // eval_epoch

epoch을 바꾸면 같이 조정. 평가를 더 자주 보려면 값을 낮춤

clip_grad

None

gradient norm clipping 값. None이면 비활성

loss가 NaN/발산하면 1.0~10.0 설정

sync_bn

False

멀티 GPU에서 BatchNorm 통계 동기화

GPU당 배치가 2 이하로 작으면 True 권장. 속도는 약간 느려짐

enable_amp

True

자동 혼합 정밀도(AMP) 사용

메모리/속도 이득 큼. NaN 발생 시 False로 확인

amp_dtype

"float16"

AMP 자료형

Ampere 이상 GPU면 "bfloat16"이 수치적으로 더 안정

empty_cache

False

매 iteration마다 CUDA 캐시 비움

매우 느려짐. OOM이 간헐적일 때만 True

empty_cache_per_epoch

False

epoch마다 CUDA 캐시 비움

위와 동일, 부담이 적은 대안

find_unused_parameters

False

DDP에서 사용되지 않는 파라미터 허용

모델 일부를 freeze했을 때 에러가 나면 True

enable_wandb

True

Weights & Biases 로깅

오프라인 환경이면 False

wandb_project

"pointcept"

wandb 프로젝트 이름

자유롭게

wandb_key

None

wandb API 토큰. None이면 터미널 로그인 사용

자유롭게

mix_prob

0

배치 내 scene 두 개를 섞는 CutMix 계열 augmentation 확률

<span style="color:red;font-weight:bold">위험 instance seg에서는 반드시 0. 섞으면 instance id가 충돌함

param_dicts

None

키워드별 learning rate 배율. 예: [dict(keyword="backbone", lr_scale=0.1)]

사전 학습 backbone을 fine-tune할 때 backbone lr을 낮추는 용도

2. 클래스 정의

파라미터

기본값

설명

수정 가이드

class_names

ScanNet 20개

클래스 이름 목록. 순서가 라벨 정수와 대응

<span style="color:red;font-weight:bold">위험 사용자 데이터셋의 라벨 인덱스와 정확히 일치해야 함. 순서 바꾸면 평가 결과가 뒤바뀜

num_classes

20

semantic 클래스 수

len(class_names)와 동일해야 함

segment_ignore_index

(-1, 0, 1)

instance 대상에서 제외할 semantic 라벨. -1은 unlabeled, 0/1은 ScanNet의 wall/floor

<span style="color:red;font-weight:bold">위험 모델의 클러스터링, InstanceParser, evaluator, tester 네 곳에 동일하게 전달됨. 사용자 데이터에서 "배경" 클래스 인덱스로 재정의. 여기 포함된 클래스는 instance로 절대 검출되지 않음

3. 모델

3.1 최상위 (PG-v1m1)

파라미터

기본값

설명

수정 가이드

type

"PG-v1m1"

모델 레지스트리 이름

PTv3 backbone을 쓰려면 "PG-v1m2" + PT-v3m1 backbone 조합 참고(configs/scannetpp/insseg-pointgroup-v1m2-0-ptv3-base.py)

backbone_out_channels

96

backbone 출력 feature 차원. seg_head, bias_head의 입력

backbone channels의 마지막 값과 일치해야 함

semantic_num_classes

num_classes

semantic head 출력 수

num_classes 그대로

semantic_ignore_index

-1

CE loss에서 무시할 라벨

데이터의 unlabeled 값과 맞춤

segment_ignore_index

(-1, 0, 1)

추론 시 이 semantic 예측을 받은 점은 클러스터링에서 제외

2절 참조

instance_ignore_index

-1

offset loss에서 제외할 instance 라벨

InstanceParser의 값과 동일해야 함

cluster_thresh

1.5

ball query 반경. 복셀 단위(grid_size 0.02면 3cm). 중심 예측이 이 거리 안이면 같은 클러스터 후보

<span style="color:orange;font-weight:bold">주의 작은 객체가 이웃과 병합되면 줄이고(1.0~1.2), 하나의 객체가 여러 조각으로 쪼개지면 늘림(2.0). grid_size를 바꾸면 물리 거리가 달라지므로 재조정

cluster_closed_points

300

ball query에서 한 점당 최대 이웃 수

점 밀도가 매우 높으면 늘림. 속도/메모리에 영향

cluster_min_points

50

BFS 클러스터링에서 이 점 수 미만인 클러스터는 생성하지 않음

<span style="color:orange;font-weight:bold">주의 작은 객체 미검출의 직접 원인. 10~20으로 낮춰 실험. 너무 낮추면 노이즈 proposal 증가

cluster_propose_points

100

생성된 proposal 중 이 점 수 이하는 폐기

<span style="color:orange;font-weight:bold">주의 작은 객체 미검출의 직접 원인. cluster_min_points와 함께 낮춤. evaluator min_region_sizes와 맞춰야 평가에 반영됨

voxel_size

0.02

추론 시 중심 예측 좌표를 복셀 단위로 변환하는 나눗셈 값

<span style="color:red;font-weight:bold">위험 GridSample grid_size와 반드시 동일. 다르면 cluster_thresh의 의미가 깨짐

Loss 구성 (코드 고정, config에서 조정 불가)

  • loss = seg_loss + bias_l1_loss + bias_cosine_loss
  • seg_loss: semantic CrossEntropy (class weight 없음)
  • bias_l1_loss: 점→instance 중심 offset의 L1. 점 단위 평균이라 큰 객체가 지배
  • bias_cosine_loss: offset 방향의 cosine 유사도
  • 작은 객체 가중치를 주려면 point_group_v1m1_base.py의 loss 부분을 직접 수정해야 함

3.2 Backbone (SpUNet-v1m1)

파라미터

기본값

설명

수정 가이드

type

"SpUNet-v1m1"

spconv 기반 sparse 3D UNet

그대로

in_channels

6

입력 feature 차원. Collect feat_keys의 합(color 3 + normal 3)

<span style="color:red;font-weight:bold">위험 feat_keys를 바꾸면 반드시 같이 수정. color만 쓰면 3, 좌표까지 넣으면 9

num_classes

0

backbone 자체 분류 head 수. 0이면 head 없이 feature만 출력

PointGroup에서는 0 유지 (head는 PG 쪽에 있음)

channels

(32, 64, 128, 256, 256, 128, 96, 96)

인코더 4단계 + 디코더 4단계 채널. 앞 절반 인코더, 뒤 절반 디코더

마지막 값 = backbone_out_channels. 작은 객체를 위해 얕은 단계(32, 64) 채널을 키우는 것이 깊은 단계보다 효과적. 메모리 증가

layers

(2, 3, 4, 6, 2, 2, 2, 2)

각 단계의 residual block 수

channels와 길이가 같아야 하고 짝수. 늘리면 용량 증가, 속도 저하

4. Optimizer / Scheduler

파라미터

기본값

설명

수정 가이드

optimizer.type

"SGD"

최적화 알고리즘

SpUNet은 SGD가 표준. PTv3 backbone이면 AdamW(lr 0.002~0.006)

optimizer.lr

0.1

초기 learning rate

<span style="color:orange;font-weight:bold">주의 batch_size 12 기준. 배치를 절반으로 줄이면 0.05. 발산하면 절반씩 줄임

optimizer.momentum

0.9

SGD momentum

그대로

optimizer.weight_decay

0.0001

L2 정규화

과적합이면 0.0005까지. 데이터가 적을수록 올리는 편

optimizer.nesterov

True

Nesterov momentum

그대로

scheduler.type

"PolyLR" || lr = lr₀ × (1 − step/total)^0.9. 총 step에 걸쳐 0으로 감소

epoch을 바꾸면 자동으로 total_steps가 바뀜. warmup이 필요하면 "OneCycleLR" 고려

5. 데이터셋 공통

파라미터

기본값

설명

수정 가이드

dataset_type

"ScanNetDataset"

데이터셋 클래스

사용자 데이터면 pointcept/datasets/에 클래스 추가하거나 "DefaultDataset" 사용

data_root

"data/scannet"

전처리된 데이터 루트. 하위에 train/val 디렉터리

전처리 결과 경로

data.num_classes

num_classes

데이터셋 메타

2절과 동일

data.ignore_index

-1

데이터셋 메타

2절과 동일

data.names

class_names

evaluator가 클래스별 AP 출력에 사용

2절과 동일

train/val/test.split

"train" / "val" / "val"

사용할 split 디렉터리

test는 별도 split이 있으면 "test"로. 라벨 없는 test는 현재 tester가 지원하지 않음

test_mode

False

True면 GridSample test 모드(전체 복셀 순회)와 TTA 활성

instance seg는 아직 test_mode 미지원. False 유지

6. Train transform (augmentation 파이프라인)

순서대로 적용된다. 순서 자체가 의미를 가진다. 기하 augmentation → 색상 augmentation → 복셀화 → crop → 정규화 → 라벨 파싱 → tensor 변환.

Transform

파라미터

기본값

설명

수정 가이드

CenterShift

apply_z

True

점군의 xy(그리고 z) 최소/최대 중앙을 원점으로 이동

그대로. 첫 단계로 필수

RandomDropout

dropout_ratio

0.2

점의 20%를 무작위 제거

<span style="color:orange;font-weight:bold">주의 작은 객체는 점이 적어 dropout에 취약. 0.1로 낮추거나 제거 실험

dropout_application_ratio

0.5

이 확률로 dropout 적용

위와 함께 조정

RandomRotate (z)

angle

[-1, 1]

π 단위. [-π, π] 범위 무작위 z축 회전

실내 scene은 그대로. 방향이 고정된 데이터(예: 항상 정면)면 범위 축소

axis

"z"

회전축

그대로

center

[0, 0, 0]

회전 중심

CenterShift 후이므로 원점

p

0.5

적용 확률

그대로

RandomRotate (x, y)

angle

[-1/64, 1/64]

±2.8° 기울임. 센서 기울기 시뮬레이션

지면이 항상 수평이면 제거 가능

RandomScale

scale

[0.9, 1.1]

등방성 무작위 스케일

<span style="color:orange;font-weight:bold">주의 작은 객체 검출 강화에는 [0.8, 1.2]로 넓히는 것이 도움될 수 있음. 단, cluster_thresh는 복셀 단위라 스케일 변화가 물리 크기 감각을 흔듦

anisotropic

False

축별 다른 스케일

일반적으로 False

RandomFlip

p

0.5

x 또는 y축 반전

좌우 비대칭이 의미 있는 데이터가 아니면 그대로

RandomJitter

sigma

0.005

점별 가우시안 노이즈 표준편차(m)

센서 노이즈 수준에 맞춤. 5mm는 RGB-D 기준

clip

0.02

노이즈 최대 절댓값(m)

그대로

ElasticDistortion

distortion_params

[[0.2, 0.4], [0.8, 1.6]]

[격자 크기(m), 변형 크기] 쌍. 20cm/80cm 격자로 비선형 왜곡

<span style="color:orange;font-weight:bold">주의 작은 객체의 형태를 무너뜨릴 수 있음. 미검출 원인 실험 시 제거해서 비교

ChromaticAutoContrast

p

0.2

색상 대비 자동 조정 확률

그대로

blend_factor

None

원본과 혼합 비율. None이면 무작위

그대로

ChromaticTranslation

p

0.95

전체 색상에 일정 오프셋 더할 확률

그대로

ratio

0.1

오프셋 범위 (255 기준 ±10%)

조명 변화가 크면 유지, 색상이 중요한 클래스면 낮춤

ChromaticJitter

p

0.95

점별 색상 노이즈 확률

그대로

std

0.05

노이즈 표준편차 (255 기준)

그대로

GridSample

grid_size

0.02

복셀 크기(m). 같은 복셀의 점은 하나로 병합

<span style="color:red;font-weight:bold">위험 가장 영향이 큰 값. 작은 객체 위해 0.01로 줄이면 점 수 2~8배, 메모리 그만큼 증가. 모델 voxel_size, val/test의 grid_size와 반드시 동일. cluster_* 값 재조정 필요

hash_type

"fnv"

복셀 해시 함수

그대로

mode

"train"

복셀당 무작위 1점 선택

train은 "train" 고정

return_grid_coord

True

정수 복셀 좌표 반환. spconv 입력에 필수

True 고정

SphereCrop

sample_rate

0.8

무작위 중심에서 가까운 80% 점만 유지

<span style="color:orange;font-weight:bold">주의 20%가 잘려나가며 작은 객체가 통째로 사라질 수 있음. 1.0 또는 제거 실험. 메모리 여유 있으면 point_max 방식으로 전환

mode

"random"

중심 선택 방식

train은 random

NormalizeColor

(없음)

색상을 [0,255] → [-1,1]로 정규화

색상이 이미 정규화되어 있으면 제거. 없는 경우 색상 0 채우기

InstanceParser

segment_ignore_index

(-1, 0, 1)

이 semantic의 instance를 -1로 바꾸고 각 instance의 centroid, bbox 계산

2절과 동일 값

instance_ignore_index

-1

무시 instance 값

모델 값과 동일

ToTensor

(없음)

numpy → torch 변환

그대로

Collect

keys

coord, grid_coord, segment, instance, instance_centroid, bbox

모델에 전달할 키 목록

모델 forward가 요구하는 키. 그대로

feat_keys

("color", "normal")

이 키들을 concat해 feat 생성

<span style="color:red;font-weight:bold">위험 바꾸면 backbone in_channels 동시 수정. normal이 없는 데이터면 ("color",) + in_channels=3

7. Val / Test transform

augmentation 없이 확정적으로 처리한다. train과 다른 점만 정리한다.

Transform

파라미터

기본값

설명

수정 가이드

Copy

keys_dict

coord→origin_coord, segment→origin_segment, instance→origin_instance

복셀화 전 원본 점을 보존. evaluator가 원본 해상도로 AP 계산

그대로. 제거하면 평가 불가

GridSample

grid_size

0.02

train과 동일해야 함

<span style="color:red;font-weight:bold">위험 train과 항상 동일

SphereCrop (주석)

point_max

1000000

메모리 초과 시 활성화

매우 큰 scene에서 OOM이면 주석 해제

CenterShift

apply_z

False

GridSample 후 xy만 재중심

그대로

Collect

keys

train 키 + origin_*, name

원본 좌표/라벨과 scene 이름 전달

그대로

offset_keys_dict

offset→coord, origin_offset→origin_coord

배치 내 scene 경계 offset을 두 해상도로 생성

그대로

8. Hooks

Hook

파라미터

기본값

설명

수정 가이드

CheckpointLoader

keywords / replacement

"module." / "module."

weight 로드 시 state_dict 키 치환

다른 프레임워크 가중치를 쓸 때 prefix 매핑

IterationTimer

warmup_iter

2

처음 N iteration은 시간 측정에서 제외

그대로

InformationWriter

(없음)

loss, lr을 로그/tensorboard/wandb 기록

그대로

InsSegEvaluator

segment_ignore_index

(-1, 0, 1)

평가에서 제외할 클래스

2절과 동일

instance_ignore_index

-1

동일

(코드 내부) min_region_sizes

100

100점 미만 예측은 평가 제외

<span style="color:orange;font-weight:bold">주의 config에서 노출되지 않음. evaluator.py:339를 직접 수정. cluster_propose_points와 맞춤

(코드 내부) overlaps

0.5~0.95 + 0.25

AP 계산 IoU 임계값. mAP, AP50, AP25 산출

그대로

CheckpointSaver

save_freq

None

None이면 model_last + model_best만 저장. 정수면 N epoch마다 추가 저장

디스크 여유 있으면 100 등으로 설정해 중간 복구 가능하게

PreciseEvaluator

test_last

False

학습 종료 후 tester로 정밀 평가. False면 best, True면 last checkpoint

그대로

9. Tester

파라미터

기본값

설명

수정 가이드

test.type

"InsSegTester"

instance seg 전용 tester

그대로

segment_ignore_index

(-1, 0, 1)

2절과 동일

동일

instance_ignore_index

-1

동일

verbose

False

scene별 결과 상세 출력

실패 유형 분석 시 True

10. 연동 관계 요약

한 값을 바꾸면 반드시 함께 바꿔야 하는 묶음이다.

묶음

함께 바꿀 항목

복셀 크기

train.GridSample.grid_size = val.GridSample.grid_size = test.GridSample.grid_size = model.voxel_size. 바꾸면 cluster_thresh, cluster_min_points, cluster_propose_points, evaluator min_region_sizes도 재조정

무시 클래스

segment_ignore_index 한 변수로 모델, InstanceParser(train/val/test), InsSegEvaluator, InsSegTester에 전달. 변수만 바꾸면 됨

입력 feature

Collect.feat_keys ↔ backbone.in_channels

backbone 출력

backbone.channels[-1] ↔ backbone_out_channels

클래스 수

class_names 길이 = num_classes = semantic_num_classes = data.num_classes

배치와 lr

batch_size 변경 시 optimizer.lr 비례 조정

epoch

epoch 변경 시 eval_epoch 조정. PolyLR total_steps는 자동

작은 객체 필터

cluster_min_points ≤ cluster_propose_points ≈ evaluator min_region_sizes

11. 작은 객체 개선을 위한 권장 수정 순서

  1. 재훈련 없이: cluster_min_points 50→10, cluster_propose_points 100→20, evaluator min_region_sizes 100→20 후 test 재실행
  2. 재훈련 필요, 저비용: SphereCrop 제거 또는 sample_rate 1.0, RandomDropout dropout_ratio 0.1, ElasticDistortion 제거
  3. 재훈련 필요, 고비용: grid_size 0.02→0.01 (+ voxel_size, cluster_* 재조정, batch_size 절반, lr 절반)
  4. 코드 수정: seg_loss에 class weight, bias_l1_loss를 instance 단위 평균으로 변경

12. PTv3 backbone 사용 시 (PG-v1m2) 차이점

기준 파일: configs/scannetpp/insseg-pointgroup-v1m2-0-ptv3-base.py, 모델 코드 pointcept/models/point_group/point_group_v1m2_custom_criteria.py

위 1~11절의 파라미터 중 런타임, 클래스 정의, cluster_*, voxel_size, 데이터셋, val/test transform, hooks, tester는 그대로 동일하다. 다른 부분만 아래에 정리한다.

12.1 모델 최상위

파라미터

SpUNet (PG-v1m1)

PTv3 (PG-v1m2)

설명 / 가이드

type

"PG-v1m1"

"PG-v1m2"

v1m2는 loss를 config로 받고 backbone freeze를 지원

backbone_out_channels

96

64

PTv3 dec_channels[0]과 일치해야 함

criteria

(없음, CE 고정)

CrossEntropyLoss + LovaszLoss

<span style="color:orange;font-weight:bold">주의 v1m2에서만 사용 가능. Lovasz는 IoU를 직접 최적화해 작은 클래스에 유리. class weight를 넣으려면 CrossEntropyLoss에 weight= 추가. loss_weight로 비율 조정

freeze_backbone

(없음)

False

True면 backbone 고정, head만 학습. 사전 학습 backbone 선형 평가용

offset 회귀 loss(bias_l1, bias_cosine)는 두 버전 모두 코드 고정으로 동일하다.

12.2 Backbone (PT-v3m1)

파라미터

기본값

설명

수정 가이드

in_channels

6

입력 feature 차원

SpUNet과 동일 규칙. feat_keys와 연동

order

("z", "z-trans", "hilbert", "hilbert-trans")

점 직렬화 공간 채움 곡선 종류

그대로. 줄이면 속도 증가, 정확도 소폭 감소

stride

(2, 2, 2, 2)

각 인코더 단계의 다운샘플 배율

그대로

enc_depths

(2, 2, 2, 6, 2)

인코더 5단계의 block 수

모델 용량. 늘리면 메모리/시간 증가

enc_channels

(32, 64, 128, 256, 512)

인코더 채널

작은 객체에는 얕은 단계(32, 64) 채널 확대가 효과적

enc_num_head

(2, 4, 8, 16, 32)

인코더 attention head 수

채널 / head = 16 유지

enc_patch_size

1024 × 5

직렬화 attention의 패치(윈도우) 크기

작은 scene이면 512로 줄여도 됨. 메모리에 직접 영향

dec_depths

(2, 2, 2, 2)

디코더 4단계 block 수

그대로

dec_channels

(64, 64, 128, 256)

디코더 채널. [0]이 최종 출력

<span style="color:red;font-weight:bold">위험 dec_channels[0] = backbone_out_channels

dec_num_head

(4, 4, 8, 16)

디코더 head 수

채널 / head = 16 유지

dec_patch_size

1024 × 4

디코더 패치 크기

enc와 동일하게

mlp_ratio

4

FFN 확장 비율

그대로

qkv_bias

True

QKV projection bias

그대로

qk_scale

None

attention scale. None이면 1/√d

그대로

attn_drop / proj_drop

0.0

attention / projection dropout

과적합 시 0.1

drop_path

0.3

stochastic depth 비율

<span style="color:orange;font-weight:bold">주의 데이터가 적으면 0.3 유지, 많으면 0.1~0.2. 과소적합이면 낮춤

shuffle_orders

True

매 forward마다 직렬화 순서를 섞음 (augmentation 효과)

그대로

pre_norm

True

Pre-LayerNorm 구조

그대로

enable_rpe

False

상대 위치 인코딩

정확도 소폭 상승, 속도 저하. flash attention과 동시 사용 불가

enable_flash

True

FlashAttention 사용

<span style="color:orange;font-weight:bold">주의 flash-attn 미설치 GPU면 False. False면 upcast_*가 의미를 가짐

upcast_attention / upcast_softmax

False

attention을 fp32로 계산

flash 비활성 + AMP에서 NaN이면 True

enc_mode

False

True면 인코더만 (분류용)

segmentation은 False

pdnorm_*

bn/ln False, decouple True, adaptive False, affine True

다중 데이터셋 조건부 정규화(PPT) 설정

단일 데이터셋이면 전부 기본값 유지. pdnorm_conditions는 무시됨

12.3 Optimizer / Scheduler

파라미터

SpUNet

PTv3

설명 / 가이드

optimizer

SGD, lr 0.1, wd 1e-4

AdamW, lr 0.006, wd 0.05

<span style="color:red;font-weight:bold">위험 Transformer는 SGD로 잘 수렴하지 않음. PTv3는 반드시 AdamW

scheduler

PolyLR

OneCycleLR

warmup(pct_start 5%) 후 cosine 감소. max_lr은 param group별 리스트

scheduler.max_lr

-

[0.006, 0.0006]

[기본 그룹, block 그룹]. param_dicts와 순서 대응

scheduler.pct_start

-

0.05

전체 step 중 warmup 비율

scheduler.anneal_strategy

-

"cos"

warmup 이후 감소 곡선

scheduler.div_factor

-

10.0

시작 lr = max_lr / 10

scheduler.final_div_factor

-

1000.0

최종 lr = 시작 lr / 1000

param_dicts

None

[dict(keyword="block", lr=0.0006)]

<span style="color:orange;font-weight:bold">주의 attention block은 lr을 1/10로. 사전 학습 backbone fine-tune 시 표준 설정

12.4 Train transform 차이

Transform

SpUNet

PTv3

비고

RandomDropout.dropout_application_ratio

0.5

0.2

PTv3 쪽이 dropout을 덜 적용. 작은 객체에는 PTv3 값이 유리

ChromaticTranslation.ratio

0.1

0.05

색상 오프셋이 절반

SphereCrop

| point_max=204800

<span style="color:orange;font-weight:bold">주의 비율 crop이 아니라 점 수 상한. scene이 204800점 이하면 crop이 전혀 일어나지 않아 작은 객체가 잘리지 않음

GridSample 뒤 CenterShift(apply_z=False)

없음

있음

PTv3는 좌표를 위치 인코딩에 쓰므로 복셀화 후 재중심 필요

12.5 요약

  • 동일: cluster_thresh, cluster_closed_points, cluster_min_points, cluster_propose_points, voxel_size, segment_ignore_index, GridSample 0.02, evaluator min_region_sizes 100
  • 다름: backbone 전체, backbone_out_channels(96→64), criteria(CE→CE+Lovasz), optimizer(SGD→AdamW), scheduler(PolyLR→OneCycleLR), param_dicts, SphereCrop 방식, 일부 augmentation 강도
  • 작은 객체 관점에서 PTv3 config는 SphereCrop이 비율 방식이 아니고 dropout 적용 확률이 낮아 SpUNet config보다 덜 공격적이다. 단, 클러스터링 단계의 크기 필터는 완전히 동일하므로 backbone을 바꿔도 11절의 필터 완화는 그대로 필요하다.

See also

lastmod 2026-09-14created 2026-09-14author Zer0 sitemap