머신러닝 모범 사례 및 모델 학습을 위한 팁
소개
컴퓨터 비전 프로젝트를 수행할 때 가장 중요한 단계 중 하나는 모델 학습입니다. 이 단계에 도달하기 전에 목표를 정의하고 데이터를 수집 및 라벨링해야 합니다. 데이터 전처리를 통해 데이터가 깨끗하고 일관된 상태인지 확인한 후 모델 학습을 진행할 수 있습니다.
Watch: Model Training Tips | How to Handle Large Datasets | Batch Size, GPU Utilization and Mixed Precision
그렇다면 모델 학습이란 무엇일까요? 모델 학습은 모델이 시각적 패턴을 인식하고 데이터에 기반하여 예측하도록 가르치는 과정입니다. 이는 애플리케이션의 성능과 정확도에 직접적인 영향을 미칩니다. 이 가이드에서는 컴퓨터 비전 모델을 효과적으로 학습시키는 데 도움이 되는 모범 사례, 최적화 기술 및 문제 해결 팁을 다룹니다.
머신러닝 모델 학습 방법
컴퓨터 비전 모델은 오류를 최소화하도록 내부 파라미터를 조정하여 학습됩니다. 초기에는 대규모 라벨링된 이미지 세트가 모델에 공급됩니다. 모델은 이미지 내의 내용을 예측하고, 예측값을 실제 라벨이나 내용과 비교하여 오류를 계산합니다. 이러한 오류는 모델의 예측값이 실제 값에서 얼마나 벗어났는지를 보여줍니다.
학습 중에 모델은 반복적으로 예측을 수행하고, 오류를 계산하며, 역전파(backpropagation)라고 불리는 과정을 통해 파라미터를 업데이트합니다. 이 과정에서 모델은 오류를 줄이기 위해 내부 파라미터(가중치 및 편향)를 조정합니다. 이 주기를 여러 번 반복함으로써 모델의 정확도는 점차 향상됩니다. 시간이 지남에 따라 모델은 모양, 색상, 질감과 같은 복잡한 패턴을 인식하는 법을 배웁니다.
This learning process makes it possible for the computer vision model to perform various tasks, including object detection, instance segmentation, and image classification. The ultimate goal is to create a model that can generalize its learning to new, unseen images so that it can accurately understand visual data in real-world applications.
모델 학습 시 내부적으로 어떤 일이 일어나는지 이해했으니, 이제 모델 학습 시 고려해야 할 사항들을 살펴보겠습니다.
대규모 데이터셋에서의 학습
대규모 데이터셋을 사용하여 모델을 학습시키려고 할 때 고려해야 할 몇 가지 측면이 있습니다. 예를 들어, 배치 크기 조정, GPU 활용도 제어, 다중 스케일 학습 사용 여부 등을 선택할 수 있습니다. 이러한 각 옵션을 자세히 살펴보겠습니다.
배치 크기 및 GPU 활용도
대규모 데이터셋으로 모델을 학습시킬 때 GPU를 효율적으로 활용하는 것이 핵심입니다. 배치 크기는 중요한 요소입니다. 이는 머신러닝 모델이 한 번의 학습 반복에서 처리하는 데이터 샘플의 수입니다. GPU가 지원하는 최대 배치 크기를 사용하면 GPU 기능을 최대한 활용하고 모델 학습 시간을 단축할 수 있습니다. 그러나 GPU 메모리가 부족하지 않도록 주의해야 합니다. 메모리 오류가 발생하면 모델이 원활하게 학습될 때까지 배치 크기를 점진적으로 줄이십시오.
Watch: How to Use Batch Inference with Ultralytics YOLO26 | Speed Up Object Detection in Python 🎉
With respect to YOLO26, you can set the batch_size parameter in the training configuration to match your GPU capacity. Also, setting batch=-1 in your training script will automatically determine the batch size that can be efficiently processed based on your device's capabilities. By fine-tuning the batch size, you can make the most of your GPU resources and improve the overall training process.
부분 집합(Subset) 학습
부분 집합 학습은 더 큰 데이터셋을 대표하는 더 작은 데이터 세트로 모델을 학습시키는 스마트한 전략입니다. 특히 초기 모델 개발 및 테스트 중에 시간과 리소스를 절약할 수 있습니다. 시간이 부족하거나 다양한 모델 구성을 실험하는 경우 부분 집합 학습이 좋은 선택입니다.
YOLO26의 경우 fraction 파라미터를 사용하여 부분 집합 학습을 쉽게 구현할 수 있습니다. 이 파라미터를 통해 학습에 사용할 데이터셋의 비율을 지정할 수 있습니다. 예를 들어 fraction=0.1로 설정하면 데이터의 10%로 모델을 학습시킵니다. 이 기술은 전체 데이터셋을 사용한 학습을 확정하기 전에 모델을 빠르게 반복하고 튜닝하는 데 사용할 수 있습니다. 부분 집합 학습은 빠른 진행을 돕고 잠재적인 문제를 조기에 파악하는 데 유용합니다.
다중 스케일(Multi-scale) 학습
다중 스케일 학습은 다양한 크기의 이미지로 모델을 학습시켜 일반화 능력을 향상시키는 기술입니다. 모델이 서로 다른 스케일과 거리에서 객체를 탐지하도록 학습되어 더욱 견고해질 수 있습니다.
예를 들어, YOLO26을 학습할 때 scale 파라미터를 설정하여 다중 스케일 학습을 활성화할 수 있습니다. 이 파라미터는 지정된 계수만큼 학습 이미지의 크기를 조정하여 다양한 거리의 객체를 시뮬레이션합니다. 예를 들어 scale=0.5로 설정하면 학습 중에 이미지의 크기를 0.5에서 1.5 사이의 계수로 임의로 확대/축소합니다. 이 파라미터를 구성하면 모델이 다양한 이미지 스케일을 경험하여 객체 크기와 상황에 관계없이 탐지 성능을 향상시킬 수 있습니다.
Ultralytics also supports image-size multi-scale training via the multi_scale parameter. Unlike scale, which zooms images and then pads/crops back to imgsz, multi_scale changes imgsz itself each batch (rounded to the model stride). For example, with imgsz=640 and multi_scale=0.25, the training size is sampled from 480 up to 800 in stride steps (e.g., 480, 512, 544, ..., 800), while multi_scale=0.0 keeps a fixed size.
캐싱(Caching)
캐싱은 머신러닝 모델의 학습 효율을 개선하는 중요한 기술입니다. 전처리된 이미지를 메모리에 저장함으로써 캐싱은 GPU가 디스크에서 데이터를 로드하기 위해 기다리는 시간을 줄여줍니다. 모델은 디스크 I/O 작업으로 인한 지연 없이 지속적으로 데이터를 받을 수 있습니다.
YOLO26을 학습할 때 cache 파라미터를 사용하여 캐싱을 제어할 수 있습니다:
cache=True: 데이터셋 이미지를 RAM에 저장하여 가장 빠른 액세스 속도를 제공하지만 메모리 사용량이 증가합니다.cache='disk': 이미지를 디스크에 저장하며, RAM보다는 느리지만 매번 데이터를 새로 로드하는 것보다는 빠릅니다.cache=False: 캐싱을 비활성화하며 디스크 I/O에 전적으로 의존하므로 가장 느린 옵션입니다.
혼합 정밀도(Mixed Precision) 학습
혼합 정밀도 학습은 16비트(FP16)와 32비트(FP32) 부동 소수점 유형을 모두 사용합니다. FP16을 사용하여 계산 속도를 높이고 필요한 곳에 FP32를 사용하여 정밀도를 유지함으로써 두 가지의 장점을 활용합니다. 신경망(neural network) 연산의 대부분은 더 빠른 계산과 낮은 메모리 사용량의 이점을 위해 FP16으로 수행됩니다. 그러나 가중치 업데이트 단계에서 정확도를 보장하기 위해 모델 가중치의 마스터 사본은 FP32로 유지됩니다. 동일한 하드웨어 제약 내에서 더 큰 모델이나 더 큰 배치 크기를 처리할 수 있습니다.
To implement mixed precision training, you'll need to modify your training scripts and ensure your hardware (like GPUs) supports it. Many modern deep learning frameworks, such as PyTorch and TensorFlow, offer built-in support for mixed precision.
YOLO26에서는 혼합 정밀도 학습을 쉽게 적용할 수 있습니다. 학습 구성에서 amp 플래그를 사용하면 됩니다. amp=True로 설정하면 자동 혼합 정밀도(AMP) 학습이 활성화됩니다. 혼합 정밀도 학습은 모델 학습 과정을 최적화하는 간단하면서도 효과적인 방법입니다.
사전 학습된 가중치
사전 학습된 가중치를 사용하는 것은 모델 학습 속도를 높이는 현명한 방법입니다. 사전 학습된 가중치는 이미 대규모 데이터셋으로 학습된 모델에서 가져오므로 모델이 학습을 더 빨리 시작할 수 있습니다. 전이 학습(transfer learning)은 사전 학습된 모델을 새롭고 관련된 작업에 맞게 조정합니다. 사전 학습된 모델을 미세 조정(Fine-tuning)한다는 것은 이러한 가중치에서 시작하여 특정 데이터셋에 대해 학습을 계속하는 것을 의미합니다. 이 학습 방법은 모델이 기본적인 특징에 대한 탄탄한 이해를 바탕으로 시작하기 때문에 학습 시간이 단축되고 종종 더 나은 성능을 냅니다.
pretrained 파라미터를 사용하면 YOLO26에서 전이 학습이 쉬워집니다. pretrained=True로 설정하면 기본 사전 학습 가중치가 사용되며, 사용자 정의 사전 학습 모델의 경로를 지정할 수도 있습니다. 사전 학습된 가중치와 전이 학습을 효과적으로 사용하면 모델의 성능을 향상시키고 학습 비용을 절감할 수 있습니다.
대규모 데이터셋을 다룰 때 고려해야 할 기타 기술
대규모 데이터셋을 다룰 때 고려해야 할 몇 가지 다른 기술이 있습니다:
- 학습률(Learning Rate) 스케줄러: 학습률 스케줄러를 구현하면 학습 중에 학습률이 동적으로 조정됩니다. 잘 조정된 학습률은 모델이 최소값을 지나치는 것을 방지하고 안정성을 향상시킬 수 있습니다. YOLO26을 학습할 때
lrf파라미터는 최종 학습률을 초기 학습률의 일부로 설정하여 학습률 스케줄링을 관리하는 데 도움을 줍니다. - 분산 학습(Distributed Training): 대규모 데이터셋을 다룰 때 분산 학습은 판도를 바꿀 수 있습니다. 학습 워크로드를 여러 GPU나 머신에 분산하여 학습 시간을 단축할 수 있습니다. 이 접근 방식은 상당한 컴퓨팅 리소스가 필요한 엔터프라이즈급 프로젝트에 특히 가치가 있습니다.
학습할 에폭(Epoch) 수
모델을 학습할 때 에폭(epoch)은 전체 학습 데이터셋을 한 번 완전히 통과하는 것을 의미합니다. 에폭 동안 모델은 학습 세트의 각 예제를 한 번씩 처리하고 학습 알고리즘에 따라 파라미터를 업데이트합니다. 모델이 시간이 지남에 따라 학습하고 파라미터를 개선할 수 있도록 일반적으로 여러 에폭이 필요합니다.
자주 나오는 질문은 모델을 몇 에폭 동안 학습시킬지 결정하는 방법입니다. 시작점으로는 300 에폭이 좋습니다. 모델이 조기에 과적합되면 에폭 수를 줄일 수 있습니다. 300 에폭 후에도 과적합(overfitting)이 발생하지 않으면 학습을 600, 1200 에폭 이상으로 연장할 수 있습니다.
하지만 이상적인 에폭 수는 데이터셋의 크기와 프로젝트 목표에 따라 다를 수 있습니다. 데이터셋이 크면 모델이 효과적으로 학습하기 위해 더 많은 에폭이 필요할 수 있고, 데이터셋이 작으면 과적합을 방지하기 위해 더 적은 에폭이 필요할 수 있습니다. YOLO26의 경우 학습 스크립트에서 epochs 파라미터를 설정할 수 있습니다.
조기 종료(Early Stopping)
조기 종료는 모델 학습을 최적화하는 데 유용한 기술입니다. 검증 성능을 모니터링하여 모델 개선이 멈추면 학습을 중단할 수 있습니다. 컴퓨팅 리소스를 절약하고 과적합을 방지할 수 있습니다.
이 과정에는 학습을 중단하기 전에 검증 지표가 개선되기를 기다릴 에폭 수를 결정하는 인내심(patience) 파라미터를 설정하는 과정이 포함됩니다. 이 에폭 내에 모델 성능이 향상되지 않으면 시간과 리소스 낭비를 방지하기 위해 학습이 중단됩니다.
YOLO26의 경우 학습 구성에서 patience 파라미터를 설정하여 조기 종료를 활성화할 수 있습니다. 예를 들어 patience=5는 검증 지표가 5 에폭 연속으로 개선되지 않으면 학습이 중단됨을 의미합니다. 이 방법을 사용하면 과도한 계산 없이 학습 과정을 효율적으로 유지하고 최적의 성능을 달성할 수 있습니다.
클라우드 학습과 로컬 학습 중 선택
모델을 학습시키는 방법에는 클라우드 학습과 로컬 학습 두 가지 옵션이 있습니다.
클라우드 학습은 확장성과 강력한 하드웨어를 제공하며 대규모 데이터셋과 복잡한 모델을 다루는 데 이상적입니다. Google Cloud, AWS, Azure와 같은 플랫폼은 고성능 GPU와 TPU에 대한 온디맨드 액세스를 제공하여 학습 시간을 단축하고 더 큰 모델로 실험할 수 있게 합니다. 그러나 클라우드 학습은 특히 장기간 사용할 경우 비용이 많이 들 수 있으며, 데이터 전송이 비용과 지연 시간을 증가시킬 수 있습니다.
로컬 학습은 더 큰 제어력과 사용자 정의를 제공하여 환경을 특정 요구 사항에 맞게 조정하고 지속적인 클라우드 비용을 피할 수 있게 합니다. 장기 프로젝트에는 더 경제적일 수 있으며 데이터가 온프레미스에 유지되므로 더 안전합니다. 그러나 로컬 하드웨어는 리소스 제한이 있을 수 있으며 유지 관리가 필요하여 대규모 모델의 경우 학습 시간이 더 길어질 수 있습니다.
옵티마이저 선택
옵티마이저는 모델 성능을 측정하는 손실 함수(loss function)를 최소화하기 위해 신경망의 가중치를 조정하는 알고리즘입니다. 쉽게 말해 옵티마이저는 오류를 줄이기 위해 파라미터를 조정하여 모델 학습을 돕습니다. 올바른 옵티마이저를 선택하는 것은 모델이 얼마나 빠르고 정확하게 학습하는지에 직접적인 영향을 미칩니다.
또한 모델 성능을 개선하기 위해 옵티마이저 파라미터를 미세 조정할 수도 있습니다. 학습률을 조정하면 파라미터를 업데이트할 때 단계의 크기가 결정됩니다. 안정성을 위해 적당한 학습률로 시작하여 시간이 지남에 따라 점차 낮추어 장기 학습을 개선할 수 있습니다. 또한 모멘텀을 설정하면 과거 업데이트가 현재 업데이트에 미치는 영향력이 결정됩니다. 모멘텀의 일반적인 값은 약 0.9입니다. 일반적으로 균형이 잘 잡혀 있습니다.
일반적인 옵티마이저
다양한 옵티마이저는 장단점이 있습니다. 몇 가지 일반적인 옵티마이저를 간단히 살펴보겠습니다.
-
SGD (확률적 경사 하강법):
- 파라미터에 대한 손실 함수의 그래디언트를 사용하여 모델 파라미터를 업데이트합니다.
- 간단하고 효율적이지만 수렴 속도가 느릴 수 있고 지역 최적값(local minima)에 갇힐 수 있습니다.
-
Adam (적응형 모멘트 추정):
- 모멘텀을 사용한 SGD와 RMSProp의 장점을 결합한 것입니다.
- 그래디언트의 1차 및 2차 모멘트 추정값을 기반으로 각 파라미터의 학습률을 조정합니다.
- 노이즈가 많은 데이터와 희소 그래디언트에 적합합니다.
- 효율적이며 일반적으로 튜닝이 덜 필요하여 YOLO26에 권장되는 옵티마이저입니다.
-
RMSProp (루트 평균 제곱 전파):
- 최근 그래디언트 크기의 이동 평균으로 그래디언트를 나누어 각 파라미터의 학습률을 조정합니다.
- 그래디언트 소실 문제를 처리하는 데 도움이 되며 순환 신경망(recurrent neural networks)에 효과적입니다.
-
MuSGD (Muon + SGD 하이브리드):
- 대규모 학습에서 안정성을 향상시키기 위해 SGD 방식의 업데이트와 Muon에서 영감을 받은 동작을 결합합니다.
- SGD와 같은 일반화 성능을 원하지만 기존 SGD보다 더 매끄러운 수렴을 원할 때 좋은 선택입니다.
- YOLO26 학습 레시피와 특히 관련이 있습니다. 확신이 서지 않으면
optimizer=auto로 시작하여 데이터셋에서 MuSGD와 비교해 보십시오.
YOLO26의 경우 optimizer 파라미터를 통해 SGD, MuSGD, Adam, 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 문서를 확인하십시오.
이러한 리소스를 활용하면 문제를 해결하고 컴퓨터 비전 커뮤니티의 최신 트렌드와 관행을 최신 상태로 유지하는 데 도움이 됩니다.
핵심 요약
컴퓨터 비전 모델 학습에는 좋은 사례를 따르고, 전략을 최적화하며, 문제가 발생할 때마다 해결하는 과정이 포함됩니다. 배치 크기 조정, 혼합 정밀도(precision) 학습, 사전 학습된 가중치로 시작하기와 같은 기술은 모델의 성능을 향상시키고 학습 속도를 높일 수 있습니다. 부분 집합 학습 및 조기 종료와 같은 방법은 시간과 리소스를 절약하는 데 도움이 됩니다. 커뮤니티와 계속 소통하고 새로운 트렌드를 파악하면 모델 학습 기술을 계속 향상시킬 수 있을 것입니다.
FAQ
Ultralytics YOLO로 대규모 데이터셋을 학습할 때 GPU 활용도를 어떻게 개선할 수 있을까요?
GPU 활용도를 개선하려면 학습 구성의 batch_size 파라미터를 GPU가 지원하는 최대 크기로 설정하십시오. 이렇게 하면 GPU 기능을 최대한 활용하여 학습 시간을 줄일 수 있습니다. 메모리 오류가 발생하면 학습이 원활하게 진행될 때까지 배치 크기를 점진적으로 줄이십시오. YOLO26의 경우 학습 스크립트에서 batch=-1로 설정하면 효율적인 처리를 위해 최적의 배치 크기가 자동으로 결정됩니다. 자세한 내용은 학습 구성을 참조하십시오.
혼합 정밀도 학습이란 무엇이며 YOLO26에서 어떻게 활성화하나요?
혼합 정밀도 학습은 16비트(FP16)와 32비트(FP32) 부동 소수점 유형을 모두 활용하여 계산 속도와 정밀도의 균형을 맞춥니다. 이 접근 방식은 모델 정확도(accuracy)를 저하시키지 않으면서 학습 속도를 높이고 메모리 사용량을 줄입니다. YOLO26에서 혼합 정밀도 학습을 활성화하려면 학습 구성에서 amp 파라미터를 True로 설정하십시오. 이렇게 하면 자동 혼합 정밀도(AMP) 학습이 활성화됩니다. 이 최적화 기술에 대한 자세한 내용은 학습 구성을 참조하십시오.
다중 스케일 학습은 YOLO26 모델 성능을 어떻게 향상시키나요?
다중 스케일 학습은 다양한 크기의 이미지로 학습하여 모델이 서로 다른 스케일과 거리에서 더 잘 일반화할 수 있도록 함으로써 모델 성능을 향상시킵니다. YOLO26에서는 학습 구성에서 scale 파라미터를 설정하여 다중 스케일 학습을 활성화할 수 있습니다. 예를 들어 scale=0.5는 0.5에서 1.5 사이의 확대/축소 계수를 샘플링한 다음 imgsz로 다시 패딩/크롭합니다. 이 기술은 다양한 거리의 객체를 시뮬레이션하여 다양한 상황에서 모델을 더욱 견고하게 만듭니다. 설정 및 자세한 내용은 학습 구성을 확인하십시오.
YOLO26에서 사전 학습된 가중치를 사용하여 학습 속도를 높이려면 어떻게 해야 하나요?
사전 학습된 가중치를 사용하면 기본적인 시각적 특징을 이미 알고 있는 모델을 활용하여 학습 속도를 크게 높이고 모델 정확도를 향상시킬 수 있습니다. YOLO26에서는 학습 구성에서 pretrained 파라미터를 True로 설정하거나 사용자 정의 사전 학습 가중치의 경로를 제공하기만 하면 됩니다. 전이 학습이라고 불리는 이 방법을 통해 대규모 데이터셋으로 학습된 모델을 특정 애플리케이션에 효과적으로 적용할 수 있습니다. 사전 학습된 가중치 사용 방법과 그 이점에 대한 자세한 내용은 학습 구성 가이드를 참조하십시오.
모델 학습에 권장되는 에폭 수는 얼마이며 YOLO26에서는 어떻게 설정하나요?
에폭 수는 모델 학습 중 전체 학습 데이터셋을 통과하는 횟수를 의미합니다. 일반적인 시작점은 300 에폭입니다. 모델이 조기에 과적합되면 이 수를 줄일 수 있습니다. 반대로 과적합이 관찰되지 않으면 학습을 600, 1200 에폭 이상으로 연장할 수 있습니다. YOLO26에서 이를 설정하려면 학습 스크립트에서 epochs 파라미터를 사용하십시오. 이상적인 에폭 수 결정에 대한 추가 조언은 학습할 에폭 수 섹션을 참조하십시오.