Train
detection.Trainer
Object Detection 모델을 학습시키기 위한 Trainer class 입니다.
Usage
demo/train.py 참고
Windows에서는 worker가 spawn으로 시작하므로 학습 진입점을
if __name__ == "__main__": 안에 둡니다. 실행 파일로 패키징한 제품은
같은 guard 안에서 multiprocessing.freeze_support()도 호출해야 합니다.
build(config, data)
classmethod
Trainer class의 instance를 생성합니다.
Parameters:
Returns:
| Name | Type | Description |
|---|---|---|
Trainer |
Trainer
|
build가 완료된 detection.Trainer class의 instance를 반환합니다. |
to_device(device)
Trainer의 device를 변경합니다. (cpu/gpu)
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
device |
Union[device, str, int]
|
변경하고자 하는 device 입니다.
|
required |
Returns:
| Name | Type | Description |
|---|---|---|
None |
None
|
None |
train_one_step()
학습을 1스텝 수행하고, 결과를 반환합니다.
API 기본 설정은 별도 활성화 옵션 없이 pause()/resume()을 지원합니다. Pause 성공 후 또는 state 복원 도중 실패한 상태에서는 TrainingPausedError(-400324)를 반환합니다. Loss에서 NaN이 검출되면 error -413310을 반환합니다. Micro-batch 처리 중 실패하면 부분 누적 gradient를 비운 뒤 재시도할 수 있지만, 이미 소비한 batch/RNG나 변경된 weight를 되돌리지는 않습니다. 저장 시점부터 같은 학습을 재현하려면 resume()를 사용합니다. 데이터 fetch 오류는 해당 base batch를 건너뛴 뒤 원래 오류를 반환하며, 다음 호출에서 학습을 계속할 수 있습니다. Crop buffer에 이미 쌓인 patch는 유지합니다. Loader 복구 자체가 실패하면 -413338을 반환하고 학습을 차단합니다. Gradient clipping이나 optimizer/scaler/scheduler 처리 중 실패해도 학습을 차단합니다. 실패한 호출은 원래 오류를 반환하며, 이후 train_one_step()은 -400324를 반환합니다. 유효한 pause 파일이 있으면 resume()으로 복구하고, 없으면 새 Trainer를 build해야 합니다.
Returns:
validation_enabled()
Trainer가 validation이 가능한지 bool로 반환합니다.
Returns:
| Name | Type | Description |
|---|---|---|
bool |
bool
|
Trainer가 validation이 가능하면 True를, 불가능하다면 False를 반환합니다. |
validate()
post_train_process()
train 후처리를 수행하고, 해당 모델의 default inference options을 리턴합니다.
Returns:
| Name | Type | Description |
|---|---|---|
Dict |
Dict
|
get_untrainable_images()
PatchCrop 학습 모드 사용 시, 학습에 사용되지 않은 이미지들을 리턴 합니다.
Returns:
| Type | Description |
|---|---|
list[str]
|
list[str]: 학습에 사용되지 않은 이미지 |
get_class_label_counts()
save_checkpoint(checkpoint_path, metadata=None, password=None)
현재 Trainer의 상태를 암호화하여 저장합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
checkpoint_path |
str
|
checkpoint를 저장할 path 입니다. |
required |
metadata |
Optional[Dict]
|
checkpoint에 저장할 사용자 정의 dictionary. 고정된 key는 없으며 load_checkpoint()가 같은 내용을 반환합니다. 예: {"description": "demo"}. 생략하거나 None이면 {}로 저장합니다. |
None
|
password |
Optional[str]
|
checkpoint 파일에서 중요한 정보를 암호화 하는데 사용되는 password 입니다. None이면 암호화하지 않습니다. Defaults to None. |
None
|
Returns: None: None
load_checkpoint(checkpoint_path, password=None)
저장한 checkpoint로부터 Trainer의 상태를 불러오고, metadata를 반환합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
checkpoint_path |
str
|
load할 checkpoint가 저장 되어 있는 path 입니다. |
required |
password |
Optional[str]
|
checkpoint 파일에서 중요한 정보를 복호화 하는데 사용되는 password 입니다. None이면 복호화하지 않습니다. Defaults to None. |
None
|
Returns:
| Name | Type | Description |
|---|---|---|
Dict |
Dict
|
성공 시 반환 tuple (error, message, metadata)의 세 번째 값입니다. save_checkpoint()에 전달했던 사용자 정의 dictionary이며 고정된 key는 없습니다. metadata를 생략했거나 None으로 저장했다면 {}입니다. demo/train.py의 일반 checkpoint는 다음 metadata를 저장합니다. description은 API가 자동으로 추가하는 key가 아닙니다. 실패 시 error는 음수이며 세 번째 값은 None입니다. |
pause(checkpoint_path, metadata=None, password=None)
현재 step까지의 학습 상태를 저장하고 Trainer를 일시정지합니다.
train_one_step() 호출 사이에 사용합니다. 성공한 뒤 제품에서 학습 프로세스를 종료할 수 있습니다. 이 함수는 프로세스를 종료하거나 GPU를 반환하지 않습니다. 저장 실패 시 기존 checkpoint와 학습 가능 상태를 유지합니다.
완료된 optimizer step 경계에서 저장합니다. 다른 thread에서 학습 중 요청하면 micro-batch accumulation을 포함한 현재 train_one_step()이 끝날 때까지 기다립니다. Step이 실패하면 다음 step이 성공하거나 정상 resume하기 전까지 pause할 수 없습니다.
Model, optimizer/scheduler/scaler, step/epoch/epoch_step, loader의 소비 위치와 main-process RNG를 저장합니다. Crop 학습에서는 미사용 patch buffer도 저장하므로 파일이 커질 수 있습니다. 일반 save_checkpoint()의 저장 형식은 유지합니다.
API 기본 InfiniteRandomSampler 경로와 crop 학습을 지원하며 SaigeToolkit 2.8.3 이상, 2.9.0 미만이 필요합니다. Optimizer는 Adam/AdamW, scheduler는 MultiStepLR만 지원합니다. 그 외 custom 설정의 일반 학습과 save_checkpoint()는 유지하지만 pause/resume은 지원하지 않습니다.
학습 실패 시 누적 gradient를 비웁니다. Optimizer/scaler 갱신 단계 이후 실패하면 이전 pause 파일을 resume()하거나 새 Trainer를 build해야 다시 학습할 수 있습니다. Pause 성공 후 training loader를 닫습니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
checkpoint_path |
str
|
재개용 checkpoint 경로. 기존 모델 파일과 별도로 지정합니다. |
required |
metadata |
Optional[Dict[str, Any]]
|
None
|
|
password |
Optional[str]
|
checkpoint 암호화 password. None이면 암호화하지 않습니다. |
None
|
Returns:
| Name | Type | Description |
|---|---|---|
None |
None
|
반환 tuple (error, message, result)의 세 번째 값입니다. error가 0 이상이면 저장에 성공했으며 result는 None입니다. 이미 pause 상태이거나 성공한 step 경계가 아니면 error는 -413322입니다. 지원하지 않는 optimizer는 -413339, scheduler는 -413340입니다. |
resume(checkpoint_path, password=None)
pause()로 저장한 checkpoint에서 다음 step부터 학습을 재개합니다.
일시정지한 Trainer에서 바로 호출할 수 있습니다. 새 Trainer에서 재개하려면 동일한 config와 data 순서로 build하고, to_device()로 기존과 동일한 CPU/CUDA 및 AMP 설정을 선택한 후 호출합니다. 일반 save_checkpoint() 파일은 resume에 사용할 수 없습니다. Optimizer는 Adam/AdamW, scheduler는 MultiStepLR만 지원합니다.
Module의 major/minor version과 각 state의 format_version은 같아야 합니다. Patch version 차이는 허용하며, 이미지 파일 내용, transform, library 환경은 같아야 합니다. 이미지 metadata와 annotation의 dictionary 필드 순서는 달라도 되지만, 이미지 ID dictionary와 list 순서는 유지해야 합니다. 파일 content hash는 검사하지 않습니다.
DataLoader의 sample 순서와 crop buffer를 복원합니다. Toolkit은 sample 추출 순번별로 Python/NumPy/Torch CPU 기본 RNG를 제어하여 worker augmentation을 재현합니다. Prefetch한 sample도 같은 순번으로 다시 계산하며, main-process의 patch 선택 RNG와 이미 생성한 patch buffer도 복원합니다. Custom transform의 별도 numpy.random.Generator/torch.Generator, OpenCV RNG, 외부 thread의 난수 사용, CUDA augmentation이나 시간·외부 상태 의존 transform은 이 보장에 포함하지 않습니다. GPU 연산의 nondeterminism까지 없애지는 않습니다.
Module의 major/minor version이 다른 pause 파일은 -413329로 거절합니다. 재개용 학습 state가 있는지 확인한 뒤, module version을 상세 state 형식보다 먼저 검사합니다. 지원하지 않는 state format_version은 patch version과 관계없이 -413321로 거절합니다. 초기 DET 전용 loader의 pause 파일은 지원하지 않으며, 이전 버전과 같은 seed로 새 학습을 시작했을 때의 shuffle/augmentation 순서는 보장하지 않습니다.
복원 전 검사에서 거절되면 Trainer의 기존 상태를 유지합니다. State 복원을 시작한 뒤 실패하면 추가 학습은 TrainingPausedError(-400324)로 차단합니다. 유효한 pause 파일로 resume()을 다시 시도하거나 새 Trainer를 build해야 합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
checkpoint_path |
str
|
pause()로 저장한 checkpoint 경로. |
required |
password |
Optional[str]
|
checkpoint 복호화 password. |
None
|
Returns:
| Type | Description |
|---|---|
Dict[str, Any]
|
Dict[str, Any]: 성공 시 반환 tuple (error, message, metadata)의 세 번째 값입니다. pause()에 전달했던 사용자 정의 dictionary이며 고정된 key는 없습니다. metadata를 생략했거나 None으로 저장했다면 {}입니다. demo/train.py에서 100 step을 완료하고 pause한 경우의 반환 예시입니다. completed_steps는 API가 자동으로 추가하지 않습니다. demo처럼 이 key를 읽으려면 pause()의 metadata에 직접 저장해야 합니다. Trainer의 step/epoch/epoch_step, optimizer 등의 학습 상태는 내부에서 복원되며 반환 metadata에 자동으로 추가되지 않습니다. epoch/epoch_step은 저장된 step과 현재 epoch 길이를 기준으로 다시 계산합니다. 실패 시 error는 음수이며 metadata는 None입니다. 일반 모델 파일이나 잘못된 patch loader state는 -413321, module major/minor version 불일치는 -413329, config/data 순서 불일치는 -413330, device/AMP 불일치는 -413331입니다. 지원하지 않는 optimizer는 -413339, scheduler는 -413340입니다. |
Examples: