Ultralytics YOLO27:

머신 러닝 모범 사례 및 모델 학습 팁#

소개#

컴퓨터 비전 프로젝트를 진행할 때 가장 중요한 단계 중 하나는 모델 학습입니다. 이 단계에 도달하기 전에 목표를 정의하고 데이터를 수집하고 어노테이션해야 합니다. 데이터가 정제되고 일관적인지 확인하기 위해 데이터를 전처리한 후 모델 학습을 진행할 수 있습니다.

모델 학습은 모델이 데이터에서 시각적 패턴을 인식하고 예측하도록 가르치는 과정이며, 애플리케이션의 정확도에 직접적인 영향을 줍니다. 이 가이드에서는 컴퓨터 비전 모델을 효과적으로 학습하는 데 도움이 되는 모범 사례, 최적화 기법 및 문제 해결 팁을 살펴봅니다.



Watch: Model Training Tips | How to Handle Large Datasets | Batch Size, GPU Utilization and Mixed Precision

머신 러닝 모델 학습 방법#

컴퓨터 비전 모델은 오류를 최소화하도록 내부 파라미터를 조정하여 학습합니다. 처음에는 레이블이 지정된 대량의 이미지가 모델에 입력됩니다. 모델은 이미지에 무엇이 있는지 예측하고, 해당 예측을 실제 레이블 또는 콘텐츠와 비교하여 오류를 계산합니다. 이러한 오류는 모델의 예측이 실제 값에서 얼마나 벗어났는지를 보여줍니다.

학습 중 모델은 반복적으로 예측을 수행하고 오류를 계산한 다음 역전파라는 과정을 통해 파라미터를 업데이트합니다. 이 과정에서 모델은 오류를 줄이기 위해 내부 파라미터(가중치와 편향)를 조정합니다. 이 주기를 여러 번 반복하면 모델의 정확도가 점진적으로 향상됩니다. 시간이 지나면서 도형, 색상, 텍스처와 같은 복잡한 패턴을 인식하게 됩니다.

What is Backpropagation?

이러한 학습 과정을 통해 컴퓨터 비전 모델은 객체 감지, 인스턴스 세그멘테이션, 시맨틱 세그멘테이션, 이미지 분류를 비롯한 다양한 작업을 수행할 수 있습니다. 궁극적인 목표는 모델이 학습한 내용을 새롭고 보지 못한 이미지에 일반화하여 실제 애플리케이션에서 시각적 데이터를 정확하게 이해하도록 하는 것입니다.

이제 모델을 학습할 때 내부적으로 어떤 일이 일어나는지 알아보았으므로, 모델 학습 시 고려해야 할 사항을 살펴보겠습니다.

대규모 데이터셋을 사용한 학습#

대규모 데이터셋으로 모델을 학습할 계획이라면 고려해야 할 몇 가지 측면이 있습니다. 예를 들어 배치 크기를 조정하고, GPU 사용률을 제어하며, 멀티스케일 학습을 사용할 수 있습니다. 이러한 옵션을 각각 자세히 살펴보겠습니다.

배치 크기 및 GPU 사용률#

대규모 데이터셋으로 모델을 학습할 때는 GPU를 효율적으로 활용하는 것이 핵심입니다. 배치 크기는 중요한 요소입니다. 배치 크기는 머신 러닝 모델이 한 번의 학습 반복에서 처리하는 데이터 샘플 수입니다. GPU에서 지원하는 최대 배치 크기를 사용하면 GPU의 성능을 최대한 활용하고 모델 학습에 걸리는 시간을 줄일 수 있습니다. 그러나 GPU 메모리가 부족해지는 상황은 피해야 합니다. 메모리 오류가 발생하면 모델이 원활하게 학습될 때까지 배치 크기를 조금씩 줄이십시오.



Watch: How to Use Batch Inference with Ultralytics YOLO26 | Speed Up Object Detection in Python 🎉

YOLO26에서는 Train mode argumentsbatch 파라미터를 GPU 용량에 맞게 설정할 수 있습니다. 단일 가속기에서는 batch=-1가 모델을 프로파일링하고 메모리 사용률을 약 60%로 목표로 하는 배치 크기를 선택합니다. batch=0.70와 같은 비율은 다른 사용 비율을 목표로 합니다. Multi-GPU 실행에는 디바이스 수의 배수인 명시적 전역 배치 크기가 필요합니다. CPU 및 Apple silicon에서는 AutoBatch가 경고를 표시하고 batch=16로 대체합니다.

부분집합 학습#

부분집합 학습은 더 큰 데이터셋을 대표하는 소규모 데이터 세트로 모델을 학습하는 효율적인 전략입니다. 특히 초기 모델 개발 및 테스트 단계에서 시간과 리소스를 절약할 수 있습니다. 시간이 부족하거나 다양한 모델 구성을 실험하는 경우 부분집합 학습이 좋은 선택입니다.

YOLO26에서는 fraction 파라미터를 사용하여 부분집합 학습을 쉽게 구현할 수 있습니다. 학습 데이터의 10%에는 fraction=0.1과 같은 비율을, 정확히 300개의 학습 이미지에는 fraction=300와 같은 정수를 사용하거나, 각 분할을 제한하고 테스트 이미지를 건너뛰려면 [train, val, test] 목록인 fraction=[300, 100, 0]를 사용할 수 있습니다. [300, 100]와 같은 두 항목 목록은 테스트 분할을 전체로 유지합니다. NDJSON 데이터셋은 다운로드하기 전에 균등한 간격으로 레코드를 선택하므로 반복 실행 시 정확히 동일한 부분집합을 재사용합니다. 이 기법을 사용하면 전체 데이터셋을 사용하기 전에 빠르게 반복하고 튜닝할 수 있습니다.

멀티스케일 학습#

멀티스케일 학습은 다양한 크기의 이미지로 모델을 학습하여 모델의 일반화 능력을 향상시키는 기법입니다. 모델은 서로 다른 크기와 거리의 객체를 감지하는 방법을 학습하여 더욱 강건해질 수 있습니다.

예를 들어 YOLO26을 학습할 때 scale 파라미터를 설정하여 스케일 증강을 활성화할 수 있습니다. 이 파라미터는 지정된 배율에 따라 학습 이미지의 크기를 조정하여 서로 다른 거리에 있는 객체를 시뮬레이션합니다. 예를 들어 scale=0.5로 설정하면 학습 중 학습 이미지가 0.5에서 1.5 사이의 배율로 무작위 확대 또는 축소됩니다. 이 파라미터를 구성하면 모델이 다양한 이미지 스케일을 경험하게 되어 여러 객체 크기와 시나리오에서 감지 성능을 향상시킬 수 있습니다.

Ultralytics는 multi_scale 파라미터를 통한 이미지 크기 멀티스케일 학습도 지원합니다. 이미지를 확대 또는 축소한 후 imgsz로 패딩하거나 크롭하는 scale과 달리, multi_scale은 매 배치마다 imgsz 자체를 변경합니다(모델 stride에 맞게 반올림). 예를 들어 imgsz=640multi_scale=0.25을 사용하면 학습 크기가 stride 단계에 따라 480에서 800까지 샘플링됩니다(예: 480, 512, 544, ..., 800). 반면 multi_scale=0.0은 고정된 크기를 유지합니다.

캐싱#

캐싱은 머신 러닝 모델 학습의 효율성을 향상시키는 중요한 기법입니다. 전처리된 이미지를 메모리에 저장하면 캐싱을 통해 GPU가 디스크에서 데이터를 로드하기 위해 대기하는 시간을 줄일 수 있습니다. 모델은 디스크 I/O 작업으로 인한 지연 없이 데이터를 지속적으로 받을 수 있습니다.

cache 파라미터를 사용하여 YOLO26 학습 시 캐싱을 제어할 수 있습니다:

  • cache=True: 데이터셋 이미지를 RAM에 저장하여 가장 빠른 액세스 속도를 제공하지만 메모리 사용량이 증가합니다.
  • cache='disk': 이미지를 디스크에 저장합니다. RAM보다 느리지만 매번 새 데이터를 로드하는 것보다 빠릅니다.
  • cache=False: 캐싱을 비활성화하고 전적으로 디스크 I/O에 의존하므로 가장 느린 옵션입니다.

혼합 정밀도 학습#

혼합 정밀도 학습은 16비트(FP16)와 32비트(FP32) 부동소수점 타입을 모두 사용합니다. 더 빠른 연산에는 FP16을 사용하고 필요한 경우 정밀도를 유지하기 위해 FP32를 사용하여 두 타입의 장점을 활용합니다. 신경망 연산의 대부분은 더 빠른 연산과 낮은 메모리 사용량의 이점을 얻기 위해 FP16으로 수행됩니다. 그러나 가중치 업데이트 단계에서 정확도를 보장하기 위해 모델 가중치의 마스터 사본은 FP32로 유지됩니다. 동일한 하드웨어 제약 조건에서 더 큰 모델이나 더 큰 배치 크기를 처리할 수 있습니다.

Mixed precision FP16 training benefits

혼합 정밀도 학습을 구현하려면 학습 스크립트를 수정하고 하드웨어(예: GPU)가 이를 지원하는지 확인해야 합니다. PyTorchTensorFlow와 같은 최신 딥 러닝 프레임워크 대부분은 혼합 정밀도를 기본적으로 지원합니다.

YOLO26에서는 혼합 정밀도 학습을 간단하게 사용할 수 있습니다. AMP가 기본적으로 이미 활성화되어 있습니다(amp=True). CUDA GPU에서 YOLO는 학습 시작 시 한 번만 기능 검사를 수행하며, 검사에 실패하면 전체 FP32로 대체합니다. CPU 및 Apple silicon에서는 AMP를 완전히 건너뜁니다. FP32를 강제하려면 amp=False을 설정하십시오.

사전 학습된 가중치#

사전 학습된 가중치를 사용하면 모델 학습 프로세스를 효율적으로 가속할 수 있습니다. 사전 학습된 가중치는 대규모 데이터셋으로 이미 학습된 모델에서 가져오므로 모델 학습을 유리하게 시작할 수 있습니다. 전이 학습은 사전 학습된 모델을 새롭고 관련된 작업에 맞게 조정합니다. 사전 학습된 모델을 파인튜닝할 때는 이러한 가중치로 시작한 다음 특정 데이터셋으로 학습을 계속합니다. 모델이 기본적인 특징을 이미 잘 이해한 상태에서 시작하므로 이 학습 방법은 더 빠른 학습 시간과 향상된 성능을 제공하는 경우가 많습니다.

사전 학습된 가중치는 model 인자에서 가져오므로 model=yolo26n.pt은 이미 COCO 가중치로 시작합니다. pretrained 파라미터는 해당 가중치를 유지할지(True, 기본값), 폐기할지(False), 또는 다른 체크포인트로 대체할지(pretrained=path/to/best.pt)를 제어합니다. *.yaml 모델에서 pretrained=True을 설정해도 자체적으로 가중치를 가져오지는 않습니다. 전체 전이 학습 워크플로는 사용자 지정 데이터셋에서 YOLO를 파인튜닝하는 방법을 참조하십시오.

대규모 데이터셋을 처리할 때 고려할 기타 기법#

대규모 데이터셋을 처리할 때 고려할 수 있는 몇 가지 다른 기법이 있습니다:

  • 학습률 스케줄러: 학습률 스케줄러를 구현하면 학습 중 학습률을 동적으로 조정할 수 있습니다. 잘 조정된 학습률은 모델이 최솟값을 지나치게 벗어나는 것을 방지하고 안정성을 향상시킬 수 있습니다. YOLO26을 학습할 때 lrf 파라미터는 최종 학습률을 초기 학습률의 비율로 설정하여 학습률 스케줄링을 관리합니다. 레이어별 학습률이나 그래디언트 클리핑과 같이 인자로 노출되지 않는 동작을 사용하려면 트레이너를 서브클래싱하십시오.
  • 분산 학습: 대규모 데이터셋을 처리할 때 분산 학습은 획기적인 방법이 될 수 있습니다. 여러 GPU 또는 머신에 학습 작업을 분산하여 학습 시간을 줄일 수 있습니다. 이 접근 방식은 상당한 컴퓨팅 리소스를 사용하는 엔터프라이즈급 프로젝트에 특히 유용합니다.
  • 채널 마지막 메모리 형식(Channels-last memory format): CUDA 학습은 Windows를 제외한 PyTorch 1.11 이상 버전에서 더 빠른 NHWC 메모리 레이아웃을 자동으로 사용하며, Windows에서는 속도가 더 느린 것으로 측정되었습니다. 이를 강제하려면 channels_last=True을 설정하고 NCHW를 유지하려면 channels_last=False을 설정하십시오. PyTorch 1.10 이하 버전, CPU 및 MPS는 기본적으로 NCHW를 유지합니다.

학습할 에포크 수#

모델 학습에서 에포크는 전체 학습 데이터셋을 한 번 완전히 통과하는 것을 의미합니다. 한 에포크 동안 모델은 학습 세트의 각 예제를 한 번씩 처리하고 학습 알고리즘에 따라 파라미터를 업데이트합니다. 모델이 시간이 지나면서 파라미터를 학습하고 개선할 수 있도록 일반적으로 여러 에포크가 필요합니다.

모델을 몇 에포크 동안 학습해야 하는지 결정하는 방법은 흔히 제기되는 질문입니다. 좋은 시작점은 300 에포크입니다. 모델이 일찍 과적합되면 에포크 수를 줄일 수 있습니다. 300 에포크 후에도 과적합이 발생하지 않으면 학습을 600, 1200 또는 그 이상의 에포크로 연장할 수 있습니다.

그러나 이상적인 에포크 수는 데이터셋의 크기와 프로젝트 목표에 따라 달라질 수 있습니다. 대규모 데이터셋은 모델이 효과적으로 학습하기 위해 더 많은 에포크가 필요할 수 있으며, 소규모 데이터셋은 과적합을 방지하기 위해 더 적은 에포크가 필요할 수 있습니다. YOLO26에서는 학습 스크립트에서 epochs 파라미터를 설정할 수 있습니다.

조기 중단#

조기 중단은 모델 학습을 최적화하는 데 유용한 기법입니다. 검증 성능을 모니터링하여 모델의 성능이 더 이상 향상되지 않으면 학습을 중단할 수 있습니다. 이를 통해 컴퓨팅 리소스를 절약하고 과적합을 방지할 수 있습니다.

이 과정에서는 검증 메트릭이 향상될 때까지 학습을 중단하지 않고 기다릴 에포크 수를 결정하는 patience 파라미터를 설정합니다. 해당 에포크 내에 모델 성능이 향상되지 않으면 시간과 리소스 낭비를 방지하기 위해 학습을 중단합니다.

Early stopping to prevent model overfitting

YOLO26에서는 학습 구성에서 patience 파라미터를 설정하여 조기 중단을 활성화할 수 있습니다. 예를 들어 patience=5은 검증 메트릭이 5회 연속 에포크 동안 향상되지 않으면 학습을 중단한다는 의미입니다. 이 방법을 사용하면 과도한 연산 없이 학습 프로세스를 효율적으로 유지하고 최적의 성능을 달성할 수 있습니다.

클라우드 학습과 로컬 학습 중 선택#

모델을 학습하는 방법에는 클라우드 학습과 로컬 학습이라는 두 가지 옵션이 있습니다.

클라우드 학습은 확장성과 강력한 하드웨어를 제공하므로 대규모 데이터셋과 복잡한 모델을 처리하는 데 적합합니다. Google Cloud, AWS, Azure와 같은 플랫폼은 고성능 GPU 및 TPU에 대한 온디맨드 액세스를 제공하여 학습 시간을 단축하고 더 큰 모델을 사용한 실험을 가능하게 합니다. 그러나 클라우드 학습은 특히 장기간 사용하는 경우 비용이 많이 들 수 있으며, 데이터 전송으로 인해 비용과 지연 시간이 증가할 수 있습니다.

로컬 학습은 더 높은 수준의 제어와 사용자 지정을 제공하므로 특정 요구 사항에 맞게 환경을 조정하고 지속적인 클라우드 비용을 피할 수 있습니다. 장기 프로젝트에서 더 경제적일 수 있으며, 데이터가 온프레미스에 유지되므로 보안성도 높습니다. 그러나 로컬 하드웨어에는 리소스 제한이 있을 수 있고 유지 관리가 필요하므로 대규모 모델의 학습 시간이 길어질 수 있습니다.

옵티마이저 선택#

옵티마이저는 모델의 성능을 측정하는 손실 함수를 최소화하도록 신경망의 가중치를 조정하는 알고리즘입니다. 쉽게 말해 옵티마이저는 오류를 줄이도록 파라미터를 조정하여 모델이 학습하도록 돕습니다. 적절한 옵티마이저를 선택하면 모델의 학습 속도와 정확도에 직접적인 영향을 줍니다.

모델 성능을 향상시키기 위해 옵티마이저 파라미터를 파인튜닝할 수도 있습니다. 학습률을 조정하면 파라미터 업데이트 단계의 크기가 결정됩니다. 안정성을 위해 중간 정도의 학습률로 시작한 다음 시간이 지남에 따라 점진적으로 낮추면 장기적인 학습을 개선할 수 있습니다. 또한 모멘텀을 설정하면 과거 업데이트가 현재 업데이트에 미치는 영향이 결정됩니다. 모멘텀의 일반적인 값은 약 0.9이며, 대체로 균형이 좋습니다.

일반적인 옵티마이저#

옵티마이저마다 다양한 장단점이 있습니다. 몇 가지 일반적인 옵티마이저를 간단히 살펴보겠습니다.

  • SGD (확률적 경사 하강법):

    • 파라미터에 대한 손실 함수의 그래디언트를 사용하여 모델 파라미터를 업데이트합니다.
    • 단순하고 효율적이지만 수렴이 느릴 수 있으며 로컬 최솟값에 갇힐 수 있습니다.
  • Adam (적응적 모멘트 추정):

    • 모멘텀이 적용된 SGD와 RMSProp의 장점을 결합합니다.
    • 그래디언트의 1차 및 2차 모멘트 추정값을 기반으로 각 파라미터의 학습률을 조정합니다.
    • 노이즈가 많은 데이터와 희소 그래디언트에 적합합니다.
    • 효율적이며 일반적으로 튜닝이 덜 필요합니다. YOLO26의 optimizer=auto은 짧은 학습 실행에서 Adam 자체가 아닌 밀접하게 관련된 AdamW를 선택합니다.
  • RMSProp (제곱평균제곱근 전파):

    • 최근 그래디언트 크기의 이동 평균으로 그래디언트를 나누어 각 파라미터의 학습률을 조정합니다.
    • 그래디언트 소실 문제를 처리하는 데 도움이 되며 순환 신경망에 효과적입니다.
  • MuSGD (Muon + SGD 하이브리드):

    • SGD 방식의 업데이트와 Muon에서 영감을 받은 동작을 결합하여 대규모 학습에서 안정성을 향상시킵니다.
    • SGD와 유사한 일반화 성능을 원하면서 기본 SGD보다 더 원활한 수렴이 필요한 경우 좋은 선택입니다.
    • 특히 YOLO26 학습 레시피에 적합합니다. 확실하지 않다면 optimizer=auto로 시작하고 데이터셋에서 MuSGD와 비교해 보십시오.

YOLO26에서는 optimizer 파라미터를 통해 SGD, MuSGD, Adam, Adamax, AdamW, NAdam, RAdam 및 RMSProp를 포함한 다양한 옵티마이저 중에서 선택할 수 있습니다. 또는 학습 반복 횟수에 따라 자동으로 선택하도록 auto로 설정할 수 있습니다.

yolo train model=yolo26n.pt data=coco8.yaml optimizer=MuSGD

커뮤니티와 소통하기#

컴퓨터 비전 애호가 커뮤니티에 참여하면 문제를 해결하고 더 빠르게 학습하는 데 도움이 될 수 있습니다. 소통하고 도움을 받으며 아이디어를 공유할 수 있는 몇 가지 방법은 다음과 같습니다.

커뮤니티 리소스#

  • GitHub Issues: YOLO26 GitHub 저장소를 방문하여 Issues 탭에서 질문하고 버그를 보고하며 새로운 기능을 제안하십시오. 커뮤니티와 유지 관리자들은 매우 활발하게 활동하며 언제든지 도움을 드릴 준비가 되어 있습니다.
  • Ultralytics Discord 서버: Ultralytics Discord 서버에 참여하여 다른 사용자 및 개발자와 대화하고 지원을 받으며 경험을 공유하십시오.

공식 문서#

  • Ultralytics YOLO26 문서: 다양한 컴퓨터 비전 프로젝트에 대한 자세한 가이드와 유용한 팁은 YOLO26 공식 문서를 확인하십시오.

이러한 리소스를 활용하면 문제를 해결하고 컴퓨터 비전 커뮤니티의 최신 동향과 모범 사례를 파악하는 데 도움이 됩니다.

핵심 요점#

컴퓨터 비전 모델을 학습하려면 모범 사례를 따르고 전략을 최적화하며 발생하는 문제를 해결해야 합니다. 배치 크기 조정, 혼합 정밀도 학습, 사전 학습된 가중치로 시작하기와 같은 기법을 사용하면 모델의 성능을 높이고 학습 속도를 향상시킬 수 있습니다. 부분집합 학습 및 조기 중단과 같은 방법은 시간과 리소스를 절약하는 데 도움이 됩니다. 커뮤니티와 소통하고 새로운 동향을 파악하면 모델 학습 역량을 계속 향상시킬 수 있습니다.

FAQ#

  • GPU 사용률을 향상시키려면 batch 파라미터를 GPU에서 지원하는 최대 크기로 설정하십시오. 단일 가속기에서는 batch=-1이 모델을 프로파일링하고 메모리 사용률을 약 60%로 목표로 합니다. CPU 및 Apple silicon에서는 batch=16로 대체되며, Multi-GPU 실행에는 디바이스 수의 배수인 명시적 전역 배치 크기가 필요합니다. 자세한 내용은 Train mode arguments를 참조하십시오.

  • 혼합 정밀도 학습은 연산 속도와 정밀도의 균형을 맞추기 위해 16비트(FP16)와 32비트(FP32) 부동소수점 타입을 모두 사용합니다. YOLO26에서는 amp=True을 통해 기본적으로 활성화되어 있으며, FP32를 강제하려면 amp=False을 설정하십시오. CPU 및 Apple silicon에서는 AMP를 건너뜁니다. 자세한 내용은 Train mode arguments를 참조하십시오.

  • 멀티스케일 학습은 다양한 크기의 이미지로 학습하여 모델이 여러 스케일과 거리에서 더 잘 일반화하도록 함으로써 모델 성능을 향상시킵니다. YOLO26은 이를 위해 서로 다른 두 파라미터를 제공합니다. scale=0.5은 0.5에서 1.5 사이의 확대·축소 배율을 샘플링한 다음 고정된 imgsz로 패딩하거나 크롭합니다. 반면 multi_scale=0.25는 각 배치에서 stride 단계에 따라 imgsz 자체를 변경합니다. 설정 및 자세한 내용은 Train mode documentation을 확인하십시오.

  • 기본적인 시각적 특징을 이미 학습한 모델을 활용하면 사전 학습된 가중치를 통해 학습을 크게 가속하고 모델 정확도를 향상시킬 수 있습니다. model 인자를 통해 model=yolo26n.pt과 같이 가중치를 로드하십시오. 그런 다음 pretrained가 가중치를 유지할지(True, 기본값), 폐기할지(False), 또는 다른 체크포인트로 대체할지(pretrained=path/to/best.pt, 가중치를 model=*.yaml 빌드로 전이하는 방법)를 결정합니다. 자세한 내용은 Train mode documentation을 참조하십시오.

  • 에포크 수는 모델 학습 중 학습 데이터셋을 완전히 통과하는 횟수를 의미합니다. 일반적인 시작점은 300 에포크입니다. 모델이 일찍 과적합되면 에포크 수를 줄일 수 있습니다. 반대로 과적합이 관찰되지 않으면 학습을 600, 1200 또는 그 이상의 에포크로 연장할 수 있습니다. YOLO26에서 이 값을 설정하려면 학습 스크립트에서 epochs 파라미터를 사용하십시오. 이상적인 에포크 수를 결정하는 방법에 대한 추가 조언은 에포크 수 섹션을 참조하십시오.

댓글