사용자 정의 데이터셋 YOLO 미세 조정하는 방법
파인 튜닝은 무작위 초기화 대신 학습된 가중치를 기반으로 하여, 사전 학습된 모델을 새로운 클래스를 인식하도록 조정하는 과정입니다. 수백 에포크에 걸쳐 처음부터 훈련하는 대신, 파인 튜닝은 사전 학습된 모델을 활용합니다 COCO 특징을 활용하여 훨씬 짧은 시간 내에 사용자 지정 데이터에 대해 수렴합니다.
이 가이드에서는 기본 사용법부터 레이어 고정 및 2단계 훈련과 같은 고급 기법에 이르기까지, 사용자 정의 데이터셋을 활용한 YOLO26의 미세 조정 방법을 다룹니다.
미세 조정 대 처음부터 훈련
사전 학습된 모델은 이미 수백만 장의 이미지를 통해 가장자리 탐지, 질감 인식, 형태 이해와 같은 일반적인 시각적 특징을 학습했습니다. 미세 조정을 통한 전이 학습은 이러한 지식을 재사용하며, 모델에게 새로운 클래스의 외관만 가르치기 때문에 더 빠르게 수렴하고 필요한 데이터 양도 적습니다. 반면 처음부터 훈련을 시작하면 이러한 모든 지식이 버려지고, 모델이 픽셀 수준의 패턴부터 시작해 모든 것을 새로 학습해야 하므로 훨씬 더 많은 자원이 필요합니다.
| 미세 조정 | 처음부터 배우기 | |
|---|---|---|
| 시작 체중 | COCO 80개 클래스) 데이터셋으로 사전 학습됨 | 무작위 초기화 |
| 명령 | YOLO("yolo26n.pt") | YOLO("yolo26n.yaml") |
| 융합 | 더 빠름 - 백본 모델은 이미 훈련이 완료되었습니다 | 더 느리게 - 모든 레이어가 처음부터 학습합니다 |
| 데이터 요구 사항 | 하단 - 사전 학습된 특징들이 데이터 부족을 보완합니다 | 더 높은 수준 - 모델은 데이터셋만을 통해 모든 특징을 학습해야 한다 |
| 사용 시기 | 자연 풍경 이미지가 포함된 사용자 정의 클래스 | COCO 와 근본적으로 다른 분야 COCO 의료, 위성, 레이더) |
미세 조정을 위해 별도의 코드가 필요하지 않습니다
~일 때 .pt 파일이 다음으로 로드됩니다 YOLO("yolo26n.pt"), 사전 학습된 가중치는 모델에 저장됩니다. 호출 .train(data="custom.yaml") 그 후 호환되는 모든 가중치를 새로운 모델 아키텍처로 자동으로 이전하고, 일치하지 않는 레이어(예: 클래스 수가 다를 때의 탐지 헤드)를 재초기화한 뒤 훈련을 시작합니다. 수동으로 가중치를 불러오거나 레이어를 조작할 필요가 없으며, 별도의 전이 학습 코드도 필요하지 않습니다.
사전 학습된 가중치 전이 방식의 작동 원리
사전 학습된 모델을 클래스 수가 다른 데이터셋(예: COCO 80개 클래스에서 사용자 정의 5개 클래스로)에 대해 미세 조정할 때, Ultralytics 형상 인식 가중치 전이를 Ultralytics :
- 척추와 목 레이어는 완전히 전이됩니다. 이 레이어들은 일반적인 시각적 특징을 추출하며, 그 형태는 클래스 수와 무관합니다.
- 감지 헤드가 부분적으로 재초기화되었습니다 - 분류 출력 레이어 (
cv3,one2one_cv3)는 클래스 수(80 대 5)에 따라 모양이 결정되므로, 다른 곳으로 옮길 수 없으며 무작위로 초기화됩니다. 박스 회귀 레이어(cv2,one2one_cv2) 머리에 있는 요소들은 클래스 수와 관계없이 고정된 형태를 가지므로, 정상적으로 전달됩니다. - 클래스 수를 변경할 때 가중치의 대부분은 그대로 유지됩니다. 탐지 헤드 내의 분류별 레이어만 재초기화되며, 백본, 넥, 박스 회귀 분기는 그대로 유지됩니다.
사전 학습된 모델과 클래스 수가 동일한 데이터셋의 경우(예: COCO 학습된 가중치를 다른 80개 클래스 데이터셋에 적용하여 미세 조정하는 경우), 탐지 헤드를 포함하여 가중치의 100%가 전이됩니다.
기본 미세 조정 예시
예시
from ultralytics import YOLO
model = YOLO("yolo26n.pt") # load pretrained model
model.train(data="path/to/data.yaml", epochs=50, imgsz=640)
yolo detect train model=yolo26n.pt data=path/to/data.yaml epochs=50 imgsz=640
모델 크기 선택
모델 규모가 클수록 처리 용량은 커지지만, 업데이트해야 할 매개변수도 많아지기 때문에 훈련 데이터가 제한적인 경우 과적합(overfitting)의 위험이 높아질 수 있습니다. 작은 모델(YOLO26n 또는 YOLO26s)부터 시작하여, 검증 지표가 정체될 때만 모델 규모를 확장하는 것이 실용적인 접근 방식입니다. 최적의 모델 크기는 작업의 복잡성, 클래스 수, 데이터셋의 다양성, 그리고 배포에 사용할 수 있는 하드웨어에 따라 달라집니다. 사용 가능한 모델 크기와 성능 벤치마크에 대해서는 YOLO26 모델 전체 페이지를 참조하십시오.
최적화기 및 학습률 선택
기본값 optimizer=auto 이 설정은 총 훈련 반복 횟수를 기준으로 최적화기와 학습률을 선택합니다:
- < 10,000 iterations (small datasets or few epochs): AdamW with a low, auto-calculated learning rate
- > 10,000회 반복 (대규모 데이터셋): lr=0.01인 MuSGD (SGD 하이브리드SGD )
대부분의 미세 조정 작업에서는 수동으로 조정하지 않아도 기본 설정이 잘 작동합니다. 다음과 같은 경우에는 최적화기를 명시적으로 설정하는 것을 고려해 보세요:
- 훈련 상태가 불안정합니다 (손실이 급증하거나 편차가 발생할 경우): 다음을 시도해 보세요
optimizer=AdamW, lr0=0.001더 안정적인 수렴을 위해 - 작은 데이터셋을 사용하여 대규모 모델을 미세 조정하기: 다음과 같이 학습률을 낮추면
lr0=0.001사전 학습된 특징을 보존하는 데 도움이 됩니다
자동 최적화 기능이 수동 lr0 설정을 무시합니다
때 optimizer=auto, 'path/to/last.pt' 파일에 저장된 상태를 사용하여 중단된 위치에서부터 lr0 및 momentum 값은 무시됩니다. 학습률을 수동으로 제어하려면 최적화기를 명시적으로 설정하십시오: optimizer=SGD, lr0=0.005.
동결 층
동결은 훈련 중 특정 레이어가 업데이트되는 것을 방지합니다. 이는 훈련 속도를 높여주며, 데이터셋의 규모가 모델의 처리 능력에 비해 작을 때 과적합을 줄여줍니다.
에 지정되어 있습니다. freeze 이 매개변수는 정수나 리스트를 모두 허용합니다. 정수 freeze=10 처음 10개의 레이어(0부터 9까지, 이는 YOLO26의 백본에 해당함)를 고정합니다. 목록에는 다음과 같은 레이어 인덱스가 포함될 수 있습니다. freeze=[0, 3, 5] 부분 백본 고정용, 또는 다음과 같은 모듈 이름 문자열 freeze=["23.cv2"] 레이어 내의 특정 브랜치를 세밀하게 제어하기 위해.
예시
model.train(data="custom.yaml", epochs=50, freeze=10)
model.train(data="custom.yaml", epochs=50, freeze=[0, 1, 2, 3, 4])
# Freeze the box regression branch of the detection head
model.train(data="custom.yaml", epochs=50, freeze=["23.cv2"])
적절한 프리즈 깊이는 대상 도메인이 사전 훈련된 데이터와 얼마나 유사한지와 이용 가능한 훈련 데이터의 양에 따라 달라집니다:
| 시나리오 | 추천 | 근거 |
|---|---|---|
| 대규모 데이터셋, 유사한 분야 | freeze=None (기본값) | 과적합 없이 모든 레이어를 조정하기에 충분한 데이터 |
| 데이터 세트가 작고, 도메인이 유사함 | freeze=10 | 핵심 기능을 유지하면서 학습 가능한 매개변수를 줄입니다 |
| 매우 작은 데이터 세트 | freeze=23 | 오직 감지 헤드만 학습하므로 과적합 위험을 최소화합니다 |
| COCO 멀리 떨어진 도메인 | freeze=None | 핵심 기능은 제대로 이전되지 않을 수 있으며 재교육이 필요할 수 있습니다 |
프리즈 깊이(Freeze depth)도 하이퍼파라미터로 간주할 수 있습니다. 몇 가지 값(0, 5, 10)을 시도해 보고 검증 mAP 비교해 mAP 특정 데이터셋에 가장 적합한 설정을 찾는 실용적인 mAP .
미세 조정을 위한 주요 하이퍼파라미터
미세 조정은 일반적으로 처음부터 훈련하는 것보다 하이퍼파라미터 조정이 덜 필요합니다. 가장 중요한 파라미터는 다음과 같습니다:
epochs: 미세 조정은 처음부터 훈련하는 것보다 더 빨리 수렴합니다. 적당한 값으로 시작하고patience검증 지표가 정체기에 접어들면 조기에 중단해야 한다.patience: 기본값인 100은 장시간의 훈련 실행을 위해 설정된 값입니다. 이 값을 10~20으로 줄이면 이미 수렴된 실행에 시간을 낭비하는 것을 방지할 수 있습니다.warmup_epochs: 기본 워밍업(3 에포크)은 학습률을 0에서 점진적으로 증가시키므로, 초기 반복 단계에서 급격한 기울기 업데이트로 인해 사전 학습된 특징이 손상되는 것을 방지합니다. 미세 조정 시에도 기본 설정을 유지하는 것이 좋습니다.
훈련 매개변수의 전체 목록은 훈련 구성 참조 문서를 참조하십시오.
2단계 미세 조정
2단계 미세 조정 방식은 훈련 과정을 두 단계로 나눕니다. 첫 번째 단계에서는 백본을 고정하고 넥(neck)과 헤드(head)만 훈련함으로써, 사전 훈련된 특징을 훼손하지 않으면서도 탐지 레이어가 새로운 클래스에 적응할 수 있도록 합니다. 두 번째 단계에서는 모든 레이어의 고정 상태를 해제하고, 학습률을 낮춰 전체 모델을 훈련함으로써 대상 도메인에 맞게 백본을 정교화합니다.
이 접근 방식은 대상 도메인이 COCO 크게 다른 경우 COCO 의료 영상, 항공 사진, 현미경 이미지 등)에 특히 유용합니다. 이러한 경우 백본을 조정해야 할 필요가 있지만, 모든 요소를 한꺼번에 훈련시키면 모델이 불안정해질 수 있습니다. 콜백 기반 접근 방식을 활용한 자동 언프리즈(unfreezing)에 대해서는 ‘백본의 프리즈(freezing) 및 언프리즈(unfreezing)’를 참조하십시오.
2단계 미세 조정
from ultralytics import YOLO
# Stage 1: freeze backbone, train head and neck
model = YOLO("yolo26n.pt")
model.train(data="custom.yaml", epochs=20, freeze=10, name="stage1", exist_ok=True)
# Stage 2: unfreeze all, fine-tune with lower lr
model = YOLO("runs/detect/stage1/weights/best.pt")
model.train(data="custom.yaml", epochs=30, lr0=0.001, name="stage2", exist_ok=True)
흔히 범하는 실수
모델이 예측 결과를 생성하지 않습니다
- 훈련 데이터 부족: 샘플 수가 매우 적은 상태에서 훈련을 진행하는 것이 가장 흔한 원인입니다. 데이터가 너무 적으면 모델이 학습하거나 일반화할 수 없습니다. 다른 원인을 조사하기 전에 각 클래스별로 충분히 다양한 예시가 있는지 확인하십시오.
- 데이터셋 경로 확인: 경로 오류
data.yaml라벨을 생성하지 않고 조용히 실행합니다. 실행yolo detect val model=yolo26n.pt data=your_data.yaml훈련을 시작하기 전에 레이블이 올바르게 로드되는지 확인하십시오. - 신뢰도 하한값: 예측 결과가 있지만 필터링되어 제외된 경우, 다음을 시도해 보세요
conf=0.1추론 시. - 클래스 수 확인: 보장하다
nc에서data.yaml라벨 파일의 실제 클래스 수와 일치합니다.
검증용 mAP 값이 조기에 mAP
- 데이터를 더 추가하세요: 추가 훈련 데이터, 특히 다양한 각도, 조명, 배경을 가진 다양한 예시들을 활용하면 미세 조정 효과가 크게 향상됩니다.
- 클래스 밸런스 확인: 소수 계층은 AP 점수가 낮을 것입니다. 사용
cls_pw역주파수 클래스 가중치를 적용하려면 (다음으로 시작하여)cls_pw=0.25경미한 불균형의 경우, 다음으로 늘리십시오1.0(심각한 불균형의 경우). - 증강 축소: 데이터 세트가 매우 작은 경우, 과도한 데이터 증강은 도움이 되기보다 오히려 해가 될 수 있습니다. 다음을 시도해 보세요
mosaic=0.5또는mosaic=0.0. - 해상도 높이기: 작은 객체가 포함된 데이터셋의 경우, 다음을 시도해 보세요
imgsz=1280세부적인 부분을 살리기 위해.
파인 튜닝 후 기존 클래스의 성능이 저하됩니다
이를 ‘재앙적 망각(catastrophic forgetting)’이라고 부르는데, 이는 모델을 새로운 데이터만으로 파인튜닝할 경우 이전에 학습된 지식이 상실되는 현상을 말합니다. 새로운 데이터와 함께 원래 데이터셋의 이미지를 포함시키지 않으면 이러한 망각 현상은 대부분 피할 수 없습니다. 이를 완화하기 위해서는:
- 데이터셋 병합: 미세 조정 과정에서 기존 클래스의 예시와 새로운 클래스의 예시를 함께 포함시킵니다. 이것이 망각 현상을 방지할 수 있는 유일한 확실한 방법입니다.
- 척추와 목을 고정하기: 척추와 목을 모두 고정하여 탐지 헤드만 훈련시키면, 학습률을 매우 낮게 설정한 상태에서 짧은 미세 조정 실행을 수행하는 데 도움이 됩니다.
- 훈련 에포크 수를 줄이세요: 모델이 새로운 데이터만으로 훈련하는 기간이 길어질수록 망각 현상이 더 심해집니다.
FAQ
YOLO 미세 조정하려면 이미지가 몇 장이나 필요합니까?
정해진 최소 기준은 없습니다. 결과는 작업의 복잡성, 클래스 수, 그리고 해당 도메인이 COCO 얼마나 유사한지에 따라 달라집니다. 단순한 양보다 다양한 이미지(조명, 각도, 배경이 다양한 이미지)가 더 중요합니다. 현재 보유한 자료로 시작하여, 검증 지표가 충분하지 않다면 규모를 확대해 나가십시오.
사용자 정의 데이터셋에서 YOLO26을 어떻게 미세 조정하나요?
사전 학습된 모델을 불러오기 .pt 파일 호출 .train() 사용자 지정 파일의 경로와 함께 data.yaml. Ultralytics 처리합니다 체중 이동, 감지 헤드의 재초기화 및 최적화기 선택. 자세한 내용은 기본 미세 조정 전체 코드 예제는 해당 섹션을 참조하십시오.
정밀 조정된 YOLO 이 왜 아무것도 감지하지 못하는 걸까요?
가장 흔한 원인은 data.yaml (이는 아무런 레이블도 생성하지 않음), 다음과 같은 불일치 nc YAML 파일과 실제 레이블 파일에서, 또는 신뢰도 임계값이 너무 높게 설정된 경우. 참조: 흔히 범하는 실수 전체 문제 해결 체크리스트를 보려면
파인 튜닝을 위해 어떤 YOLO 고정해야 할까요?
이는 데이터셋의 규모와 도메인 유사성에 따라 달라집니다. COCO 도메인이 유사한 소규모 데이터셋의 경우, 백본을 고정하면 (freeze=10)는 과적합을 방지합니다. COCO 매우 다른 도메인의 경우, 모든 레이어를 고정하지 않고 (freeze=None) 덕분에 백본이 적응할 수 있습니다. 참조 동결 층 자세한 권장 사항을 보려면
새로운 클래스에 YOLO 미세 조정할 때 치명적인 망각 현상을 어떻게 방지할 수 있나요?
훈련 데이터에 기존 클래스의 예시와 새로운 클래스의 예시를 함께 포함시키십시오. 만약 그것이 불가능하다면, 더 많은 레이어를 고정하고 (freeze=10 (또는 그 이상)이며, 학습률을 낮게 설정하면 사전 학습된 지식을 유지하는 데 도움이 됩니다. 참조: 기본 클래스에서 성능이 저하됩니다 를 참조하세요.