YOLO fine tuning

FSA·2024년 5월 3일
0

vision

목록 보기
7/25

의문점 정리

  • model.train에서 조정해야할 parameter
    • data
      • yaml 형태로 된 custom dataset.yaml
      • TODO: coco8.yaml을 보고, 어떤 식으로 custom dataset.yaml을 설정해야할지 고민
    • epochs
      • TODO: 기본값이 100인데, fine tuning의 경우 얼마로 설정하면 좋을지
    • batch
      • TODO: -1도 괜찮은듯 (자동 조절)
    • imgsz:
      • 이미지 size 기본값 640
    • device: GPU로 설정하면 됨
    • project: TODO 훈련 출력이 저장되는 프로젝트 디렉토리 이름
    • name: TODO 훈련 실행 이름으로, 프로젝트 폴더 내에 서브디렉토리를 생성하는 데 사용
    • single_cls
      • 멀티 클래스 데이터셋을 단일 클래스로 처리합니다.
      • 이진 분류 작업이나 객체 존재에 중점을 둘 때 유용합니다. 기본값: False
      • TODO: 공 인지, 아닌지 역할로만 사용할 것이면, 해당 Option에 대해 탐구해 봐야하나?
    • resume
      • 마지막 저장된 체크포인트에서 훈련을 재개
      • 기본값이 False인데, True로 설정해야 할듯.
    • freeze
      • 모델의 첫 N 레이어 또는 인덱스로 지정된 레이어를 고정하여 훈련 가능한 매개변수 수를 줄입니다. 미세 조정이나 전이 학습에 유용합니다. 기본값: None
      • TODO: freeze를 할건지, 하면 어느 레이어까지 freeze를 할 것인지 정해야함
    • plots
      • 훈련 및 검증 지표, 예측 예시의 그래프를 생성하고 저장하여 모델 성능 및 학습 진행에 대한 시각적 통찰을 제공
      • 기본값이 False인데, True로 해야하나?

사용법

from ultralytics import YOLO

# Load a model
model = YOLO('yolov8n.yaml')  # build a new model from YAML
model = YOLO('yolov8n.pt')  # load a pretrained model (recommended for training)
model = YOLO('yolov8n.yaml').load('yolov8n.pt')  # build from YAML and transfer weights

# Train the model
results = model.train(data='coco8.yaml', epochs=100, imgsz=640, device=0)
# Train the model with 2 GPUs
results = model.train(data='coco8.yaml', epochs=100, imgsz=640, device=[0, 1])
# M1 mac
results = model.train(data='coco8.yaml', epochs=100, imgsz=640, device='mps')

사용법 2


Resuming Interrupted Trainings

  • When training is resumed, Ultralytics YOLO loads the weights from the last saved model and
  • also restores
    • the optimizer state,
    • learning rate scheduler,
    • epoch number.
  • This allows you to continue the training process seamlessly from where it was left off.
from ultralytics import YOLO

# Load a model
model = YOLO('path/to/last.pt')  # load a partially trained model

# Resume training
results = model.train(resume=True)
  • Remember that checkpoints are saved at the end of every epoch by default, or at fixed interval using the save_period argument, so you must complete at least 1 epoch to resume a training run.

model.train의 hyperparameter

  • model:
    • 사전 훈련된 .pt 모델 또는 .yaml 설정 파일의 경로를 받습니다. 모델 구조를 정의하거나 가중치를 초기화하는 데 필수적입니다. 기본값: None
  • data:
    • 데이터셋 설정 파일 경로 (예: coco8.yaml).
    • 훈련 및 검증 데이터 경로, 클래스 이름, 클래스 수 등 데이터셋 특정 파라미터를 포함. 기본값: None
    • TODO: custom dataset은 어떻게?
  • epochs:
    • 훈련할 총 에포크 수. 한 에포크는 전체 데이터셋에 대한 완전한 패스를 나타냅니다.
    • 기본값: 100
  • time:
    • 최대 훈련 시간(시간 단위).
    • 설정된 경우 에포크 인수를 무시하고 지정된 기간 후 자동으로 훈련을 중단합니다.
    • 시간 제약이 있는 훈련 시나리오에 유용합니다. 기본값: None
  • patience:
    • 검증 지표가 개선되지 않을 경우 조기 종료 전까지 대기할 에포크 수
    • 성능이 정체될 때 훈련을 중단함으로써 과적합을 방지합니다. 기본값: 100
  • batch:
    • 훈련 시 배치 크기로, 모델의 내부 매개변수가 업데이트되기 전에 처리되는 이미지 수
    • AutoBatch (batch=-1)는 GPU 메모리 사용량에 따라 동적으로 배치 크기를 조정합니다. 기본값: 16
  • imgsz:
    • 훈련을 위한 대상 이미지 크기입니다.
    • 모든 이미지는 모델에 입력되기 전 이 크기로 조정됩니다.
    • 모델 정확도와 계산 복잡성에 영향을 줍니다. 기본값: 640
  • save_period:
    • 모델 체크포인트 저장 빈도를 에포크 단위로 지정합니다.
    • -1은 이 기능을 비활성화합니다.
    • 장기 훈련 세션 중 중간 모델을 저장하는 데 유용합니다. 기본값: -1
  • cache:
    • 데이터셋 이미지를 메모리(True/ram), 디스크(disk)에 캐시하거나 비활성화(False)합니다.
    • 디스크 I/O를 줄임으로써 훈련 속도를 향상시키지만 메모리 사용량이 증가할 수 있습니다. 기본값: False
  • device:
    • 훈련을 위한 계산 장치를 지정합니다.
    • 단일 GPU (device=0), 다중 GPU (device=0,1), CPU (device=cpu), 또는 Apple 실리콘용 MPS (device=mps). 기본값: None
  • workers: 데이터 로딩을 위한 작업자 스레드 수 (멀티 GPU 훈련 시 RANK당). 데이터 전처리 및 모델로의 피딩 속도에 영향을 미칩니다. 기본값: 8
  • project:
    • 훈련 출력이 저장되는 프로젝트 디렉토리 이름입니다.
    • 서로 다른 실험을 조직적으로 저장할 수 있습니다. 기본값: None
  • name:
    • 훈련 실행 이름으로, 프로젝트 폴더 내에 서브디렉토리를 생성하는 데 사용
    • 훈련 로그 및 출력이 저장됩니다. 기본값: None
  • exist_ok:
    • True인 경우 기존의 프로젝트/이름 디렉토리를 덮어쓸 수 있습니다.
    • 수동으로 이전 출력을 지우지 않고도 반복적인 실험을 할 수 있습니다. 기본값: False
  • pretrained:
    • 사전 훈련된 모델에서 훈련을 시작할지 여부를 결정합니다.
    • 불린 값이거나 특정 모델에서 가중치를 로드할 경로일 수 있습니다.
    • 훈련 효율과 모델 성능을 향상시킵니다. 기본값: True
  • optimizer:
    • 훈련에 사용할 최적화 도구를 선택합니다. SGD, Adam, AdamW, NAdam, RAdam, RMSProp 등이 있으며, 모델 구성에 따라 자동으로 선택하도록 auto도 가능합니다. 수렴 속도 및 안정성에 영향을 줍니다. 기본값: 'auto'
  • verbose: 훈련 중 상세 출력을 활성화하여 상세 로그 및 진행 상황 업데이트를 제공합니다. 디버깅 및 훈련 과정을 면밀히 모니터링하는 데 유용합니다. 기본값: False
  • deterministic: 결정적 알고리즘 사용을 강제하여 재현성을 보장하지만, 비결정적 알고리즘에 대한 제한으로 인해 성능 및 속도가 영향을 받을 수 있습니다. 기본값: True
  • single_cls:
    • 멀티 클래스 데이터셋을 단일 클래스로 처리합니다. 이진 분류 작업이나 객체 존재에 중점을 둘 때 유용합니다. 기본값: False
  • rect:
    • 직사각형 훈련을 활성화하여 최소 패딩으로 배치 구성을 최적화합니다.
    • 효율성과 속도를 개선할 수 있지만 모델 정확도에 영향을 줄 수 있습니다. 기본값: False
  • cos_lr: 에포크를 거듭하면서 코사인 곡선을 따라 학습률을 조정하는 코사인 학습률 스케줄러를 사용합니다. 더 나은 수렴을 위해 학습률을 관리하는 데 도움이 됩니다. 기본값: False
  • close_mosaic:
    • 훈련 종료 전 마지막 N 에포크 동안 모자이크 데이터 증강을 비활성화하여 훈련을 안정화합니다. 0으로 설정하면 이 기능을 비활성화합니다. 기본값: 10
  • resume:
    • 마지막 저장된 체크포인트에서 훈련을 재개합니다. 모델 가중치, 최적화 상태 및 에포크 수를 자동으로 로드하여 훈련을 원활하게 계속합니다. 기본값: False
  • amp: 자동 혼합 정밀도(AMP) 훈련을 활성화하여 메모리 사용을 줄이고 정확도에 최소한의 영향을 미치면서 훈련 속도를 높일 수 있습니다. 기본값: True
  • fraction: 훈련에 사용할 데이터셋의 비율을 지정합니다. 실험을 위하거나 리소스가 제한될 때 전체 데이터셋의 일부를 사용하는 데 유용합니다. 기본값: 1.0
  • profile: 훈련 중 ONNX 및 TensorRT 속도 프로파일링을 활성화하여 모델 배포를 최적화하는 데 도움이 됩니다. 기본값: False
  • freeze:
    • 모델의 첫 N 레이어 또는 인덱스로 지정된 레이어를 고정하여 훈련 가능한 매개변수 수를 줄입니다. 미세 조정이나 전이 학습에 유용합니다. 기본값: None
  • lr0: 초기 학습률입니다. 이 값의 조정은 최적화 과정에서 중요하며 모델 가중치가 얼마나 빠르게 업데이트될지에 영향을 미칩니다. 기본값: 0.01
  • lrf: 초기 학습률의 비율로 최종 학습률을 설정합니다 (lr0 * lrf), 스케줄러와 함께 시간이 지남에 따라 학습률을 조정하는 데 사용됩니다. 기본값: 0.01
  • momentum:
    • SGD의 모멘텀 인자 또는 Adam 최적화 도구의 beta1 값을 나타냅니다. 현재 업데이트에서 과거 기울기를 얼마나 통합할지에 영향을 줍니다. 기본값: 0.937
  • weight_decay:
    • L2 정규화 항으로, 큰 가중치에 대한 패널티를 부과하여 과적합을 방지합니다. 기본값: 0.0005
  • warmup_epochs:
    • 학습률 워밍업을 위한 에포크 수로, 낮은 값에서 초기 학습률까지 점차적으로 학습률을 증가시켜 훈련 초기에 안정성을 높입니다. 기본값: 3.0
  • warmup_momentum:
    • 워밍업 단계의 초기 모멘텀으로, 설정된 모멘텀으로 점차 조정됩니다. 기본값: 0.8
  • warmup_bias_lr: 워밍업 단계 동안 편향 매개변수의 학습률로, 초기 에포크에서 모델 훈련을 안정화하는 데 도움이 됩니다. 기본값: 0.1
  • box: 손실 함수에서 박스 손실 구성 요소의 가중치로, 경계 상자 좌표를 정확하게 예측하는 데 얼마나 많은 강조를 두는지에 영향을 줍니다. 기본값: 7.5
  • cls: 전체 손실 함수에서 분류 손실의 가중치로, 다른 구성 요소에 비해 올바른 클래스 예측의 중요성에 영향을 줍니다. 기본값: 0.5
  • dfl: 세분화된 분류를 위해 특정 YOLO 버전에서 사용되는 분포 초점 손실의 가중치입니다. 기본값: 1.5
  • pose:
    • 자세 추정을 위해 훈련된 모델에서 자세 키포인트를 정확하게 예측하는 데 중점을 두는 자세 손실의 가중치입니다. 기본값: 12.0
    • TODO: 0으로 설정해야하나?
  • kobj:
    • 자세 추정 모델에서 키포인트 객체성 손실의 가중치로, 탐지 확신과 자세 정확성을 균형 있게 유지합니다. 기본값: 2.0
    • TODO: 0으로 설정해야하나?
  • label_smoothing: 레이블 스무딩을 적용하여 하드 레이블을 대상 레이블과 레이블에 대한 균일 분포의 혼합으로 완화시킵니다. 일반화를 개선할 수 있습니다. 기본값: 0.0
  • nbs: 손실 정규화를 위한 명목 배치 크기입니다. 기본값: 64
  • overlap_mask: 훈련 중 분할 마스크가 겹치도록 설정합니다. 인스턴스 분할 작업에 적용됩니다. 기본값: True
  • mask_ratio: 분할 마스크의 다운샘플 비율로, 훈련 중 사용되는 마스크의 해상도에 영향을 줍니다. 기본값: 4
  • dropout: 분류 작업에서 정규화를 위한 드롭아웃 비율로, 훈련 중 무작위로 유닛을 생략하여 과적합을 방지합니다. 기본값: 0.0
  • val:
    • 훈련 중 검증을 활성화하여 별도의 데이터셋에서 모델 성능을 주기적으로 평가합니다. 기본값: True
  • plots:
    • 훈련 및 검증 지표, 예측 예시의 그래프를 생성하고 저장하여 모델 성능 및 학습 진행에 대한 시각적 통찰을 제공합니다. 기본값: False

profile
모든 의사 결정 과정을 지나칠 정도로 모두 기록하고, 나중에 스스로 피드백 하는 것

0개의 댓글