머신러닝 모범 사례 및 모델 학습을 위한 팁#
소개#
컴퓨터 비전 프로젝트를 진행할 때 가장 중요한 단계 중 하나는 모델 학습입니다. 이 단계에 도달하기 전에 목표를 정의하고 데이터를 수집 및 주석(annotation) 처리해야 합니다. 데이터가 깨끗하고 일관성 있는지 확인하기 위해 데이터 전처리를 거친 후 모델 학습으로 넘어갈 수 있습니다.
모델 학습은 모델에게 시각적 패턴을 인식하고 데이터로부터 예측하는 방법을 가르치는 과정이며, 애플리케이션의 정확도에 직접적인 영향을 미칩니다. 이 가이드에서는 컴퓨터 비전 모델을 효과적으로 학습할 수 있도록 돕는 모범 사례, 최적화 기법 및 문제 해결 팁을 다룹니다.
Watch: Model Training Tips | How to Handle Large Datasets | Batch Size, GPU Utilization and Mixed Precision
머신러닝 모델을 학습시키는 방법#
컴퓨터 비전 모델은 내부 파라미터를 조정하여 오차를 최소화하는 방식으로 학습됩니다. 처음에 모델에는 대량의 라벨링된 이미지 세트가 제공됩니다. 모델은 이미지에 무엇이 있는지 예측하며, 이 예측값을 실제 라벨이나 내용과 비교하여 오차를 계산합니다. 이러한 오차는 모델의 예측값이 실제 값과 얼마나 차이가 나는지를 보여줍니다.
학습 중에 모델은 역전파(backpropagation)라는 과정을 통해 반복적으로 예측을 수행하고, 오차를 계산하며, 매개변수를 업데이트합니다. 이 과정에서 모델은 오차를 줄이기 위해 내부 매개변수(가중치와 편향)를 조정합니다. 이 주기를 여러 번 반복함으로써 모델은 점진적으로 정확도를 향상시킵니다. 시간이 지남에 따라 형태, 색상, 텍스처와 같은 복잡한 패턴을 인식하는 법을 배우게 됩니다.
이 학습 과정을 통해 computer vision 모델은 object detection, instance segmentation, semantic segmentation, image classification을 포함한 다양한 tasks를 수행할 수 있게 됩니다. 최종 목표는 새로운 본 적 없는 이미지에도 학습 내용을 일반화하여 실제 애플리케이션에서 시각적 데이터를 정확하게 이해할 수 있는 모델을 만드는 것입니다.
이제 모델을 학습시킬 때 내부적으로 어떤 일이 일어나는지 알았으니, 모델 학습 시 고려해야 할 사항들을 살펴보겠습니다.
대규모 데이터셋 학습#
대규모 데이터셋을 사용하여 모델을 학습시킬 계획이라면 고려해야 할 몇 가지 측면이 있습니다. 예를 들어 배치 크기를 조정하거나, GPU 활용도를 제어하거나, 다중 스케일 학습을 사용하는 등의 작업을 할 수 있습니다. 이러한 각 옵션을 자세히 살펴보겠습니다.
배치 크기 및 GPU 활용도#
대규모 데이터셋으로 모델을 학습시킬 때는 GPU를 효율적으로 활용하는 것이 핵심입니다. 배치 크기는 중요한 요소입니다. 배치 크기는 머신러닝 모델이 한 번의 학습 반복에서 처리하는 데이터 샘플의 수입니다. GPU가 지원하는 최대 배치 크기를 사용하면 GPU의 성능을 최대한 활용하고 모델 학습 시간을 단축할 수 있습니다. 하지만 GPU 메모리가 부족해지지 않도록 주의해야 합니다. 메모리 오류가 발생하면 모델이 원활하게 학습될 때까지 배치 크기를 점진적으로 줄이십시오.
Watch: How to Use Batch Inference with Ultralytics YOLO26 | Speed Up Object Detection in Python 🎉
YOLO26의 경우, GPU 용량에 맞게 training configuration에서 batch 파라미터를 설정할 수 있습니다. 또한, 학습 스크립트에서 batch=-1를 설정하면 디바이스의 성능에 따라 효율적으로 처리할 수 있는 batch size가 자동으로 결정됩니다. 배치 사이즈를 미세 조정함으로써 GPU 리소스를 최대한 활용하고 전반적인 학습 프로세스를 개선할 수 있습니다.
부분 집합(Subset) 학습#
부분 집합 학습은 더 큰 데이터셋을 대표하는 더 작은 데이터 세트로 모델을 학습시키는 스마트한 전략입니다. 특히 초기 모델 개발 및 테스트 중에 시간과 리소스를 절약할 수 있습니다. 시간이 부족하거나 다양한 모델 구성을 실험하는 경우 부분 집합 학습이 좋은 선택입니다.
YOLO26을 사용할 때 fraction 파라미터를 사용하여 서브셋(subset) 학습을 손쉽게 구현할 수 있습니다. 이 파라미터를 통해 학습에 사용할 데이터셋의 비율을 지정할 수 있습니다. 예를 들어, fraction=0.1로 설정하면 데이터의 10%로 모델을 학습시킵니다. 전체 데이터셋을 사용하는 학습을 확정하기 전에 빠른 반복과 모델 튜닝을 위해 이 기법을 사용할 수 있습니다. 서브셋 학습은 빠른 진행을 돕고 잠재적인 문제를 조기에 파악하는 데 유용합니다.
다중 스케일(Multi-scale) 학습#
다중 스케일 학습은 다양한 크기의 이미지로 학습시켜 모델의 일반화 능력을 향상시키는 기법입니다. 모델은 서로 다른 스케일과 거리에서 객체를 감지하는 법을 배우고 더욱 강력해집니다.
예를 들어, YOLO26을 학습할 때 scale 파라미터를 설정하여 멀티스케일(multiscale) 학습을 활성화할 수 있습니다. 이 파라미터는 지정된 비율로 학습 이미지의 크기를 조정하여 다양한 거리에 있는 객체를 시뮬레이션합니다. 예를 들어, 학습 중에 scale=0.5로 설정하면 학습 이미지의 크기가 0.5에서 1.5 사이의 비율로 무작위로 확대/축소됩니다. 이 파라미터를 설정하면 모델이 다양한 이미지 스케일을 경험하고 다양한 객체 크기와 시나리오 전반에서 검출 능력을 향상시킬 수 있습니다.
Ultralytics는 multi_scale 파라미터를 통한 이미지 크기 다중 스케일 학습도 지원합니다. 이미지를 확대하고 다시 imgsz로 패딩/크롭하는 scale과 달리, multi_scale은 매 배치마다 imgsz 자체를 변경합니다(모델 스트라이드로 반올림됨). 예를 들어 imgsz=640 및 multi_scale=0.25을 사용하면 학습 크기가 스트라이드 단계에 따라 480에서 최대 800까지 샘플링되고(예: 480, 512, 544, ..., 800), 반면 multi_scale=0.0은 고정 크기를 유지합니다.
캐싱(Caching)#
캐싱은 머신러닝 모델 학습 효율을 높이기 위한 중요한 기법입니다. 전처리된 이미지를 메모리에 저장함으로써 캐싱은 GPU가 디스크에서 데이터가 로드되기를 기다리는 시간을 줄여줍니다. 모델은 디스크 I/O 작업으로 인한 지연 없이 지속적으로 데이터를 수신할 수 있습니다.
cache 파라미터를 사용하여 YOLO26 학습 시 캐싱을 제어할 수 있습니다:
cache=True: 데이터셋 이미지를 RAM에 저장하여 가장 빠른 액세스 속도를 제공하지만, 메모리 사용량이 증가하는 단점이 있습니다.cache='disk': 이미지를 디스크에 저장하며, RAM보다는 느리지만 매번 새로운 데이터를 로드하는 것보다는 빠릅니다.cache=False: 캐싱을 비활성화하고 디스크 I/O에 전적으로 의존하므로 가장 느린 옵션입니다.
혼합 정밀도(Mixed Precision) 학습#
혼합 정밀도(mixed precision) 학습은 16비트(FP16) 및 32비트(FP32) 부동 소수점 형식을 모두 사용합니다. 빠른 연산을 위해 FP16을 사용하고 필요한 곳에 정밀도를 유지하기 위해 FP32를 사용하여 FP16과 FP32의 장점을 모두 활용합니다. 신경망(neural network) 연산의 대부분은 더 빠른 연산과 낮은 메모리 사용량의 이점을 얻기 위해 FP16으로 수행됩니다. 그러나 가중치 업데이트 단계에서 정확도를 보장하기 위해 모델 가중치의 마스터 복사본은 FP32로 유지됩니다. 동일한 하드웨어 제약 내에서 더 큰 모델이나 더 큰 배치 크기를 처리할 수 있습니다.
혼합 정밀도 학습을 구현하려면 학습 스크립트를 수정하고 하드웨어(예: GPU)가 이를 지원하는지 확인해야 합니다. PyTorch 및 TensorFlow와 같은 많은 현대 deep learning 프레임워크는 혼합 정밀도에 대한 기본 지원을 제공합니다.
YOLO26을 사용할 때 혼합 정밀도 학습은 매우 간단합니다. 학습 설정에서 amp 플래그를 사용할 수 있습니다. amp=True을 설정하면 자동 혼합 정밀도(AMP) 학습이 활성화됩니다. 혼합 정밀도 학습은 모델 학습 프로세스를 최적화하는 간단하면서도 효과적인 방법입니다.
사전 학습된 가중치#
사전 학습된(pretrained) 가중치를 사용하는 것은 모델의 학습 과정을 가속화하는 현명한 방법입니다. 사전 학습된 가중치는 대규모 데이터셋에서 이미 학습된 모델에서 비롯되므로 모델에 유리한 출발점을 제공합니다. 전이 학습(transfer learning)은 사전 학습된 모델을 새롭고 관련된 작업에 적응시킵니다. 사전 학습된 모델의 미세 조정(fine-tuning)은 이러한 가중치로 시작하여 특정 데이터셋에서 학습을 계속하는 것을 포함합니다. 이 학습 방법은 모델이 기본 기능에 대한 탄탄한 이해를 가지고 시작하기 때문에 더 빠른 학습 시간과 대개 더 나은 성능을 가져다줍니다.
pretrained 파라미터를 사용하면 YOLO26에서 전이 학습을 쉽게 수행할 수 있습니다. pretrained=True을 설정하면 기본 사전 학습된 가중치가 사용되거나, 커스텀 사전 학습된 모델의 경로를 지정할 수 있습니다. 사전 학습된 가중치와 전이 학습을 효과적으로 사용하면 모델의 역량이 향상되고 학습 비용이 절감됩니다.
대규모 데이터셋을 다룰 때 고려해야 할 다른 기법들#
대규모 데이터셋을 다룰 때 고려해야 할 몇 가지 다른 기법이 있습니다:
- 학습률(Learning Rate) 스케줄러: 학습률 스케줄러를 구현하면 학습 중에 학습률이 동적으로 조정됩니다. 잘 조정된 학습률은 모델이 최소값(minima)을 지나치는 것을 방지하고 안정성을 향상시킬 수 있습니다. YOLO26을 학습할 때,
lrf파라미터는 초기 학습률의 비율로 최종 학습률을 설정하여 학습률 스케줄링을 관리하는 데 도움을 줍니다. - 분산 학습(Distributed Training): 대규모 데이터셋을 처리할 때 분산 학습은 판도를 바꿀 수 있습니다. 학습 워크로드를 여러 GPU나 머신에 분산시켜 학습 시간을 단축할 수 있습니다. 이 접근 방식은 상당한 계산 리소스가 필요한 엔터프라이즈급 프로젝트에 특히 유용합니다.
학습할 에폭(Epochs) 수#
모델을 학습할 때 에폭(epoch)이란 전체 학습 데이터셋을 한 번 완전히 통과하는 것을 의미합니다. 에폭 동안 모델은 학습 세트의 각 예제를 한 번씩 처리하고 학습 알고리즘을 기반으로 매개변수를 업데이트합니다. 모델이 시간이 지남에 따라 학습하고 매개변수를 구체화할 수 있도록 보통 여러 에폭이 필요합니다.
자주 제기되는 질문 중 하나는 모델을 학습할 에폭 수를 결정하는 방법입니다. 좋은 시작점은 300에폭입니다. 모델이 너무 일찍 과적합(overfitting)되면 에폭 수를 줄일 수 있습니다. 300에폭 후에 과적합이 발생하지 않으면 학습을 600, 1200에폭 또는 그 이상으로 연장할 수 있습니다.
그러나 이상적인 에폭 수는 데이터셋의 크기와 프로젝트 목표에 따라 다를 수 있습니다. 더 큰 데이터셋은 모델이 효과적으로 학습하기 위해 더 많은 에폭이 필요할 수 있으며, 더 작은 데이터셋은 과적합을 피하기 위해 더 적은 에폭이 필요할 수 있습니다. YOLO26과 관련하여 학습 스크립트에서 epochs 파라미터를 설정할 수 있습니다.
조기 종료(Early Stopping)#
조기 종료는 모델 학습 최적화를 위한 가치 있는 기법입니다. 검증 성능을 모니터링함으로써 모델 개선이 멈출 때 학습을 중단할 수 있습니다. 계산 리소스를 절약하고 과적합을 방지할 수 있습니다.
이 과정에는 학습을 중단하기 전에 검증 지표의 개선을 기다릴 에폭 수를 결정하는 인내심(patience) 파라미터를 설정하는 과정이 포함됩니다. 이 에폭 수 내에서 모델 성능이 개선되지 않으면 시간과 리소스 낭비를 방지하기 위해 학습이 중단됩니다.
YOLO26의 경우, 학습 설정에서 patience 파라미터를 설정하여 조기 종료(early stopping)를 활성화할 수 있습니다. 예를 들어, patience=5은 5 에폭 연속으로 검증 지표가 향상되지 않으면 학습이 중지됨을 의미합니다. 이 방법을 사용하면 과도한 연산 없이 학습 프로세스가 효율적으로 유지되고 최적의 성능을 달성할 수 있습니다.
클라우드 학습과 로컬 학습 간의 선택#
모델을 학습시키는 방법에는 클라우드 학습과 로컬 학습이라는 두 가지 옵션이 있습니다.
클라우드 학습은 확장성과 강력한 하드웨어를 제공하며 대규모 데이터셋과 복잡한 모델을 처리하는 데 이상적입니다. Google Cloud, AWS, Azure와 같은 플랫폼은 고성능 GPU와 TPU에 대한 온디맨드 액세스를 제공하여 학습 시간을 단축하고 더 큰 모델로 실험할 수 있게 해줍니다. 그러나 클라우드 학습은 특히 오랜 기간 동안 비용이 많이 들 수 있으며, 데이터 전송으로 인해 비용과 지연 시간이 추가될 수 있습니다.
로컬 학습은 더 큰 제어와 사용자 정의를 제공하며 특정 요구 사항에 환경을 맞추고 지속적인 클라우드 비용을 피할 수 있게 합니다. 장기 프로젝트에는 더 경제적일 수 있으며 데이터가 온프레미스에 유지되므로 더 안전합니다. 그러나 로컬 하드웨어는 리소스 제한이 있을 수 있고 유지 관리가 필요하므로 대규모 모델의 경우 학습 시간이 길어질 수 있습니다.
옵티마이저 선택#
옵티마이저(optimizer)는 모델의 성능이 얼마나 좋은지 측정하는 손실 함수(loss function)를 최소화하기 위해 신경망의 가중치를 조정하는 알고리즘입니다. 더 쉽게 말해, 옵티마이저는 오차를 줄이기 위해 매개변수를 조정함으로써 모델이 학습하는 것을 돕습니다. 올바른 옵티마이저를 선택하는 것은 모델이 얼마나 빠르고 정확하게 학습하는지에 직접적인 영향을 미칩니다.
모델 성능을 개선하기 위해 옵티마이저 파라미터를 미세 조정할 수도 있습니다. 학습률을 조정하면 파라미터를 업데이트할 때 단계의 크기가 설정됩니다. 안정성을 위해 적당한 학습률로 시작하여 시간이 지남에 따라 점진적으로 낮추면 장기적인 학습을 개선할 수 있습니다. 또한 모멘텀(momentum)을 설정하면 과거 업데이트가 현재 업데이트에 미치는 영향 정도를 결정할 수 있습니다. 모멘텀의 일반적인 값은 약 0.9입니다. 이는 대체로 좋은 균형을 제공합니다.
일반적인 옵티마이저#
옵티마이저마다 다양한 장단점이 있습니다. 몇 가지 일반적인 옵티마이저를 간단히 살펴보겠습니다.
-
SGD(Stochastic Gradient Descent):
- 파라미터에 대한 손실 함수의 그래디언트를 사용하여 모델 파라미터를 업데이트합니다.
- 단순하고 효율적이지만 수렴이 느릴 수 있으며 지역 최솟값(local minima)에 빠질 위험이 있습니다.
-
Adam (Adaptive Moment Estimation):
- 모멘텀을 사용하는 SGD와 RMSProp의 장점을 결합했습니다.
- 그래디언트의 1차 및 2차 모멘트 추정치를 기반으로 각 파라미터의 학습률을 조정합니다.
- 노이즈가 많은 데이터와 희소 그래디언트에 적합합니다.
- 효율적이며 일반적으로 튜닝이 덜 필요합니다. 짧은 학습 실행의 경우, YOLO26의
optimizer=auto은 Adam 자체보다는 이와 긴밀히 연관된 AdamW를 선택합니다.
-
RMSProp(Root Mean Square Propagation):
- 최근 그래디언트 크기의 이동 평균으로 그래디언트를 나누어 각 파라미터의 학습률을 조정합니다.
- 기울기 소실(vanishing gradient) 문제를 해결하는 데 도움이 되며 순환 신경망(recurrent neural networks)에 효과적입니다.
-
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 Server: Ultralytics Discord 서버에 가입하여 다른 사용자 및 개발자들과 소통하고, 지원을 받으며, 경험을 공유하세요.
공식 문서#
- Ultralytics YOLO26 Documentation: 다양한 컴퓨터 비전 프로젝트에 대한 자세한 가이드와 유용한 팁을 보려면 공식 YOLO26 문서(documentation)를 확인하세요.
이 리소스들을 활용하면 당면한 과제를 해결하고 컴퓨터 비전 커뮤니티의 최신 트렌드와 모범 사례를 유지하는 데 도움이 될 것입니다.
핵심 요약#
컴퓨터 비전 모델 학습에는 모범 사례 준수, 전략 최적화, 발생하는 문제 해결이 포함됩니다. 배치 크기 조정, 혼합 정밀도(precision) 학습, 사전 학습된 가중치로 시작하기와 같은 기법은 모델의 성능을 높이고 학습 속도를 빠르게 만들어 줍니다. 서브셋 학습 및 조기 종료와 같은 방법은 시간과 리소스를 절약하는 데 도움이 됩니다. 커뮤니티와 소통하고 새로운 트렌드를 따라가는 것은 모델 학습 기술을 지속적으로 향상시키는 데 도움이 될 것입니다.
FAQ#
Ultralytics YOLO로 대규모 데이터셋을 학습할 때 GPU 활용도를 어떻게 개선할 수 있나요?#
GPU 활용률을 높이려면 학습 설정에서 batch 파라미터를 GPU가 지원하는 최대 크기로 설정하세요. 이를 통해 GPU의 기능을 최대한 활용하여 학습 시간을 단축할 수 있습니다. 메모리 오류가 발생하는 경우, 학습이 원활하게 실행될 때까지 배치 크기를 점진적으로 줄이세요. YOLO26의 경우 학습 스크립트에서 batch=-1을 설정하면 효율적인 처리를 위한 최적의 배치 크기가 자동으로 결정됩니다. 자세한 내용은 학습 설정(training configuration)을 참조하세요.
혼합 정밀도 학습이란 무엇이며 YOLO26에서 어떻게 활성화하나요?#
혼합 정밀도 학습은 연산 속도와 정밀도의 균형을 맞추기 위해 16비트(FP16) 및 32비트(FP32) 부동 소수점 형식을 모두 활용합니다. 이 접근 방식은 모델 정확도를(accuracy) 희생하지 않으면서 학습을 가속화하고 메모리 사용량을 줄입니다. YOLO26에서 혼합 정밀도 학습을 활성화하려면 학습 설정에서 amp 파라미터를 True로 설정하세요. 이렇게 하면 자동 혼합 정밀도(AMP) 학습이 활성화됩니다. 이 최적화 기법에 대한 자세한 내용은 학습 설정(training configuration)을 참조하세요.
다중 스케일 학습은 YOLO26 모델 성능을 어떻게 향상시키나요?#
멀티스케일 학습은 다양한 크기의 이미지로 학습하여 모델 성능을 향상시키며, 모델이 다양한 스케일과 거리에 걸쳐 더 잘 일반화할 수 있도록 합니다. YOLO26에서는 학습 설정에서 scale 파라미터를 설정하여 멀티스케일 학습을 활성화할 수 있습니다. 예를 들어, scale=0.5은 0.5에서 1.5 사이의 줌(zoom) 인수를 샘플링한 다음 imgsz로 패딩/크롭합니다. 이 기법은 다양한 거리의 객체를 시뮬레이션하여 모델이 다양한 시나리오에서 더 강건해지도록 만듭니다. 설정 및 자세한 내용은 학습 설정(training configuration)을 확인하세요.
YOLO26에서 사전 학습된 가중치를 사용하여 학습 속도를 어떻게 높일 수 있나요?#
사전 학습된 가중치를 사용하면 기본 시각적 피처에 이미 익숙한 모델을 활용하여 학습을 크게 가속화하고 모델 정확도를 향상시킬 수 있습니다. YOLO26에서는 학습 설정에서 pretrained 파라미터를 True로 설정하거나 커스텀 사전 학습된 가중치에 대한 경로를 제공하기만 하면 됩니다. 전이 학습이라고 불리는 이 방법을 통해 대규모 데이터셋에서 학습된 모델을 특정 애플리케이션에 효과적으로 적응시킬 수 있습니다. 사전 학습된 가중치 사용법과 그 이점에 대한 자세한 내용은 학습 설정 가이드(training configuration guide)에서 알아보세요.
모델 학습에 권장되는 에폭 수는 얼마이며 YOLO26에서 이를 어떻게 설정하나요?#
에폭 수는 모델 학습 과정에서 학습 데이터셋을 완전히 통과하는 횟수를 의미합니다. 일반적인 시작점은 300에폭입니다. 모델이 너무 일찍 과적합되면 횟수를 줄일 수 있습니다. 또는 과적합이 관찰되지 않으면 학습을 600, 1200에폭 또는 그 이상으로 연장할 수도 있습니다. YOLO26에서 이를 설정하려면 학습 스크립트에서 epochs 파라미터를 사용하세요. 이상적인 에폭 수를 결정하는 데 대한 추가 조언은 에폭 수(number of epochs)에 대한 이 섹션을 참조하세요.