상세 컨텐츠

본문 제목

YOLOv8 학습 중단 후 재개하는 법

딥러닝

by 찐공돌이@ 2024. 10. 31. 13:36

본문

 

YOLOv8을 이용하여 모델을 학습하다보면 학습 중단 후 다시 재개하여 학습햐여 하는 상황이 발생할 수 있습니다. 특히 colab을 사용하면 중간에 런타임이 끊기는 경우가 발생하기 때문에 다시 재개할 때 아래와 같은 과정을 거치면 다시 학습을 시작할 수 있습니다. 단계는 아래와 같습니다.

1. 모델 로드

중단된 시점의 모델 가중치 파일을 로드합니다. 일반적으로 학습 도중에는 체크포인트 파일이 저장되며, 이는 runs/ 디렉토리 내에 위치합니다.

from ultralytics import YOLO

# 기존에 학습된 모델 로드 (예: 'last.pt' 또는 'best.pt')
model = YOLO('runs/detect/train/weights/last.pt')

 

2. 재학습 설정

이전 학습에서 사용한 데이터 설정 파일과 동일한 data.yaml 파일을 사용합니다. 에포크 수를 늘리기 위해 epochs 파라미터를 기존 학습한 에포크 수보다 크게 설정합니다.

# 데이터 설정 파일 경로
data_yaml = 'path/to/data.yaml'

# 총 에포크 수 설정 (예: 이전에 50에포크를 학습했고, 추가로 50에포크를 더 학습하고 싶다면 epochs=100으로 설정)
model.train(data=data_yaml, epochs=100, resume=True)

여기서 중요한 점은:

  • epochs 파라미터는 총 학습 에포크 수를 의미합니다. 이전에 학습한 에포크 수에 추가로 학습하고자 하는 에포크 수를 더한 값을 입력해야 합니다.
  • resume=True 옵션은 이전 학습의 상태(옵티마이저, 러닝 스케줄러 등)를 그대로 이어받아 학습을 재개합니다.

 

3. 학습 재개

위의 코드를 실행하면 모델이 이전 학습의 상태를 이어받아 에포크 수를 늘려서 학습을 재개합니다.

# 학습 재개
model.train(data=data_yaml, epochs=100, resume=True)

 

4. 추가 설정 및 하이퍼파라미터 조정 (선택 사항)

필요에 따라 학습률(lr0), 배치 크기(batch), 이미지 크기(imgsz) 등의 하이퍼파라미터를 조정할 수 있습니다. 그러나 resume=True 옵션을 사용하는 경우, 옵티마이저 상태를 이어받기 때문에 학습률 등의 설정을 변경하는 것은 권장되지 않습니다.

만약 하이퍼파라미터를 변경하고 싶다면 resume=False로 설정하고 학습을 진행하셔야 합니다. 이 경우 옵티마이저 상태는 초기화되지만, 모델의 가중치는 로드됩니다.

# 하이퍼파라미터를 변경하며 학습 재개 (옵티마이저 상태는 초기화됨)
model.train(
    data=data_yaml,
    epochs=100,
    lr0=0.001,     # 새로운 학습률
    batch=16,      # 새로운 배치 크기
    resume=False   # 옵티마이저 상태를 초기화하여 학습
)

 

5. 학습 상태 모니터링

학습 과정에서 로그와 메트릭을 확인하여 모델의 성능을 모니터링합니다. 필요에 따라 TensorBoard나 다른 시각화 도구를 활용할 수 있습니다.

 

주의 사항

  • 데이터 일관성 유지: 이전 학습에서 사용한 데이터셋과 동일한 데이터를 사용해야 합니다. 데이터가 변경되면 모델의 성능에 영향을 줄 수 있습니다.
  • 옵티마이저 상태: resume=True로 설정하면 옵티마이저와 러닝 스케줄러의 상태도 복원됩니다. 하이퍼파라미터를 변경하고 싶다면 resume=False로 설정해야 합니다.
  • 에포크 수 설정: epochs는 총 학습 에포크 수입니다. 추가로 학습하고자 하는 에포크 수가 아니라는 점을 유의하세요.
  • 과적합 주의: 에포크 수를 늘릴 때는 모델이 과적합되지 않도록 검증 데이터의 성능을 모니터링해야 합니다.

 

예시 코드 전체

from ultralytics import YOLO

# 1. 모델 로드
model = YOLO('runs/detect/train/weights/last.pt')

# 2. 데이터 설정 파일 경로
data_yaml = 'path/to/data.yaml'

# 3. 학습 재개
model.train(
    data=data_yaml,
    epochs=100,    # 총 학습 에포크 수 (예: 이전 50에포크 + 추가 50에포크)
    resume=True    # 이전 학습 상태를 이어서 학습
)

# 4. (선택 사항) 하이퍼파라미터를 변경하며 학습 재개
# model.train(
#     data=data_yaml,
#     epochs=100,
#     lr0=0.001,
#     batch=16,
#     resume=False   # 옵티마이저 상태 초기화
# )

 

추가 팁

  • 체크포인트 관리: 학습 도중 생성되는 체크포인트 파일(last.pt, best.pt)을 안전하게 보관하세요. 문제가 발생했을 때 복구하는 데 도움이 됩니다.
  • 로그 확인: 학습 과정에서 출력되는 로그를 주기적으로 확인하여 학습이 정상적으로 진행되는지 모니터링하세요.
  • 백업 전략: 장시간 학습을 진행할 경우, 주기적으로 모델 가중치를 저장하고 백업하는 것을 권장합니다.

관련글 더보기