YOLOv5 프로즌 레이어를 사용한 전이 학습
이 가이드에서는 전이 학습을 구현할 때 YOLOv5 🚀 레이어를 고정하는 방법에 대해 설명합니다. 전이 학습은 전체 네트워크를 재학습할 필요 없이 새로운 데이터에 대해 모델을 빠르게 재학습할 수 있는 강력한 기술입니다. 초기 가중치의 일부를 고정하고 나머지 부분만 업데이트하면 계산 리소스와 훈련 시간을 크게 줄일 수 있지만 이 접근 방식은 최종 모델 정확도에 약간의 영향을 미칠 수 있습니다.
시작하기 전에
리포지토리를 복제하고 요구사항.txt를 설치합니다. Python.8.0 환경을 포함하여 PyTorch8. 모델과 데이터 세트는 최신 YOLOv5 릴리스에서 자동으로 다운로드됩니다.
git clone https://github.com/ultralytics/yolov5 # clone
cd yolov5
pip install -r requirements.txt # install
레이어 고정 작동 방식
신경망에서 레이어를 고정하면 기본적으로 해당 매개변수를 학습할 수 없도록 설정하는 것입니다. 이러한 레이어의 기울기는 0으로 설정되어 역전파 중에 가중치가 업데이트되지 않도록 합니다. 이는 YOLOv5 트레이닝 프로세스에서 다음과 같이 구현됩니다:
# Freeze
freeze = [f"model.{x}." for x in range(freeze)] # layers to freeze
for k, v in model.named_parameters():
v.requires_grad = True # train all layers
if any(x in k for x in freeze):
print(f"freezing {k}")
v.requires_grad = False
모델 아키텍처 살펴보기
모델의 특정 부분을 효과적으로 고정하려면 레이어 구조를 이해하는 것이 도움이 됩니다. 를 사용하여 모든 모듈 이름을 볼 수 있습니다:
for k, v in model.named_parameters():
print(k)
"""Output:
model.0.conv.conv.weight
model.0.conv.bn.weight
model.0.conv.bn.bias
model.1.conv.weight
model.1.bn.weight
model.1.bn.bias
model.2.cv1.conv.weight
model.2.cv1.bn.weight
...
"""
YOLOv5 아키텍처는 백본(레이어 0~9)과 헤드(나머지 레이어)로 구성됩니다:
# YOLOv5 v6.0 backbone
backbone:
# [from, number, module, args]
- [-1, 1, Conv, [64, 6, 2, 2]] # 0-P1/2
- [-1, 1, Conv, [128, 3, 2]] # 1-P2/4
- [-1, 3, C3, [128]]
- [-1, 1, Conv, [256, 3, 2]] # 3-P3/8
- [-1, 6, C3, [256]]
- [-1, 1, Conv, [512, 3, 2]] # 5-P4/16
- [-1, 9, C3, [512]]
- [-1, 1, Conv, [1024, 3, 2]] # 7-P5/32
- [-1, 3, C3, [1024]]
- [-1, 1, SPPF, [1024, 5]] # 9
# YOLOv5 v6.0 head
head:
- [-1, 1, Conv, [512, 1, 1]]
- [-1, 1, nn.Upsample, [None, 2, "nearest"]]
- [[-1, 6], 1, Concat, [1]] # cat backbone P4
- [-1, 3, C3, [512, False]] # 13
# ... remaining head layers
동결 옵션
백본만 동결
학습된 특징 추출 기능을 유지하면서 새로운 클래스에 모델을 적용하는 데 유용한 백본(레이어 0~9)만 동결합니다:
이 접근 방식은 새 데이터 세트가 원본 학습 데이터와 유사한 하위 수준의 특징을 공유하지만 클래스나 오브젝트가 다른 경우에 특히 효과적입니다.
탐지 레이어를 제외한 모든 레이어 동결
감지 모듈에서 최종 출력 컨볼루션 레이어를 제외한 전체 모델을 고정합니다:
이 접근 방식은 모델의 학습된 기능 대부분을 유지하되 다른 수의 클래스를 감지하도록 조정해야 할 때 이상적입니다.
성능 비교
공식 COCO 사전 학습된 가중치부터 시작하여 다양한 동결 전략을 사용하여 VOC 데이터 세트에 대해 YOLOv5m을 학습시켰습니다:
python train.py --batch 48 --weights yolov5m.pt --data voc.yaml --epochs 50 --cache --img 512 --hyp hyp.finetune.yaml
정확도 결과
그 결과 레이어를 얼리면 훈련 속도가 빨라지지만 최종 정확도는 약간 감소하는 것으로 나타났습니다:
리소스 활용
더 많은 레이어를 동결하면 GPU 메모리 요구 사항과 사용률이 감소하므로 이 기술은 더 큰 모델을 학습하거나 고해상도 이미지를 사용할 때 유용합니다:
레이어 동결 사용 시기
전이 학습에서 레이어 고정은 다음과 같은 시나리오에서 특히 유용합니다:
- 제한된 컴퓨팅 리소스: GPU 메모리 또는 처리 능력이 제한되어 있는 경우
- 작은 데이터 세트: 새 데이터 집합이 너무 작아서 과적합 없이 전체 모델을 훈련할 수 없는 경우
- 빠른 적응: 새로운 도메인에 모델을 빠르게 적용해야 하는 경우
- 특정 작업을 위한 미세 조정: 일반 모델을 특수한 애플리케이션에 적용하는 경우
전이 학습 기법과 그 적용에 대한 자세한 내용은 전이 학습 용어집 항목을 참조하세요.
지원 환경
Ultralytics 는 바로 사용할 수 있는 다양한 환경을 제공하며, 각 환경에는 다음과 같은 필수 종속성이 사전 설치되어 있습니다. CUDA, CUDNN, Python, 및 PyTorch와 같은 필수 종속 요소를 설치하여 프로젝트를 시작할 수 있습니다.
- 무료 GPU 노트북:
- Google Cloud: GCP 빠른 시작 가이드
- Amazon: AWS 빠른 시작 가이드
- Azure: AzureML 빠른 시작 가이드
- Docker: Docker 빠른 시작 가이드
프로젝트 상태
이 배지는 모든 YOLOv5 GitHub Actions 지속적 통합(CI) 테스트가 성공적으로 통과되었음을 나타냅니다. 이러한 CI 테스트는 교육, 검증, 추론, 내보내기 및 벤치마크 등 다양한 주요 측면에서 YOLOv5 의 기능과 성능을 엄격하게 확인합니다. 24시간마다 그리고 새로운 커밋이 있을 때마다 테스트를 수행하여 macOS, Windows 및 Ubuntu에서 일관되고 안정적인 작동을 보장합니다.