YOLOv5 프로즌 레이어를 사용한 전이 학습
📚 이 가이드는 동결하는 방법을 설명합니다. YOLOv5 🚀 레이어를 동결하는 방법을 설명합니다. 전이 학습은 전체 네트워크를 처음부터 재학습하지 않고도 새로운 데이터에 대해 모델을 빠르게 재학습할 수 있는 강력한 머신 러닝(ML) 기법입니다. 초기 레이어의 가중치를 고정하고 이후 레이어의 파라미터만 업데이트하면 컴퓨팅 리소스 요구 사항과 학습 시간을 크게 줄일 수 있습니다. 하지만 이 접근 방식은 최종 모델 정확도에 약간의 영향을 미칠 수 있습니다.
시작하기 전에
먼저 YOLOv5 리포지토리를 복제하고 다음 목록에 나열된 필수 종속성을 설치합니다. requirements.txt
. 가 있는지 확인합니다. Python.8.0 환경과 함께 PyTorch8 설치되었습니다. 사전 교육 모델 및 필수 데이터 세트 는 최신 YOLOv5 자동으로 다운로드됩니다. 릴리스.
git clone https://github.com/ultralytics/yolov5 # clone repository
cd yolov5
pip install -r requirements.txt # install dependencies
레이어 고정 작동 방식
레이어를 고정하는 경우 신경망를 사용하면 훈련 과정에서 매개변수weights and biases가 업데이트되지 않도록 할 수 있습니다. PyTorch 이 작업을 수행하기 위해 requires_grad
레이어의 텐서 속성을 False
. 따라서 이러한 레이어에 대해서는 그라데이션이 계산되지 않습니다. 역전파를 사용하여 계산과 메모리를 절약합니다.
YOLOv5 트레이닝 스크립트에서 레이어 프리징을 구현하는 방법은 다음과 같습니다:
# Freeze specified layers
freeze = [f"model.{x}." for x in range(freeze)] # Define layers to freeze based on module index
for k, v in model.named_parameters():
v.requires_grad = True # Ensure all parameters are initially trainable
if any(x in k for x in freeze):
print(f"Freezing layer: {k}")
v.requires_grad = False # Disable gradient calculation for frozen layers
모델 아키텍처 살펴보기
어떤 레이어를 동결할지 결정하려면 YOLOv5 모델의 구조를 이해하는 것이 중요합니다. 다음 Python 스니펫을 사용하여 모든 모듈의 이름과 해당 매개변수를 검사할 수 있습니다:
# Assuming 'model' is your loaded YOLOv5 model instance
for name, param in model.named_parameters():
print(name)
"""
Example 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 아키텍처는 일반적으로 특징 추출을 담당하는 백본 (YOLOv5s/m/l/x와 같은 표준 구성의 경우 0-9 레이어)과 객체 감지를 수행하는 헤드(나머지 레이어)로 구성됩니다.
# Example YOLOv5 v6.0 backbone structure
backbone:
# [from, number, module, args]
- [-1, 1, Conv, [64, 6, 2, 2]] # Layer 0: Initial convolution (P1/2 stride)
- [-1, 1, Conv, [128, 3, 2]] # Layer 1: Downsampling convolution (P2/4 stride)
- [-1, 3, C3, [128]] # Layer 2: C3 module
- [-1, 1, Conv, [256, 3, 2]] # Layer 3: Downsampling convolution (P3/8 stride)
- [-1, 6, C3, [256]] # Layer 4: C3 module
- [-1, 1, Conv, [512, 3, 2]] # Layer 5: Downsampling convolution (P4/16 stride)
- [-1, 9, C3, [512]] # Layer 6: C3 module
- [-1, 1, Conv, [1024, 3, 2]]# Layer 7: Downsampling convolution (P5/32 stride)
- [-1, 3, C3, [1024]] # Layer 8: C3 module
- [-1, 1, SPPF, [1024, 5]] # Layer 9: Spatial Pyramid Pooling Fast
# Example YOLOv5 v6.0 head structure
head:
- [-1, 1, Conv, [512, 1, 1]] # Layer 10
- [-1, 1, nn.Upsample, [None, 2, "nearest"]] # Layer 11
- [[-1, 6], 1, Concat, [1]] # Layer 12: Concatenate with backbone P4 (from layer 6)
- [-1, 3, C3, [512, False]] # Layer 13: C3 module
# ... subsequent head layers for feature fusion and detection
동결 옵션
다음을 사용하여 고정할 레이어를 제어할 수 있습니다. --freeze
인수를 지정할 수 있습니다. 이 인수는 첫 번째 인수의 인덱스를 지정합니다. 동결 해제 모듈; 이 인덱스 이전의 모든 모듈은 가중치가 동결됩니다.
백본만 동결
전체 백본(레이어 0~9)을 동결하는 것으로, COCO와 같은 대규모 데이터 세트에서 학습한 일반적인 특징 추출 기능을 유지하면서 새로운 객체 클래스에 모델을 적용할 때 일반적으로 사용됩니다:
이 전략은 대상 데이터 세트가 원본 학습 데이터(예: COCO)와 유사한 저수준 시각적 특징(가장자리, 텍스처)을 공유하지만 다른 개체 범주를 포함하는 경우에 효과적입니다.
최종 감지 레이어를 제외한 모든 레이어 동결
거의 전체 네트워크를 동결하고 최종 출력 컨볼루션 레이어만 남기려면( Detect
모듈(일반적으로 마지막 모듈, 예: YOLOv5s의 모듈 24)을 학습할 수 있습니다:
이 접근 방식은 주로 학습된 대부분의 기능을 그대로 유지하면서 다른 수의 출력 클래스에 맞게 모델을 조정해야 할 때 유용합니다. 미세 조정을 위해 최소한의 컴퓨팅 리소스가 필요합니다.
성능 비교
레이어 동결의 효과를 설명하기 위해 YOLOv5m을 다음과 같이 훈련했습니다. 파스칼 VOC 데이터 세트 50 epochs공식 COCO 사전 교육부터 시작하여 가중치 (yolov5m.pt
). 세 가지 시나리오를 비교했습니다. 모든 계층을 교육하는 경우(--freeze 0
), 백본 동결(--freeze 10
), 최종 감지 레이어를 제외한 모든 레이어를 동결(--freeze 24
).
# Example command for training with backbone frozen
python train.py --batch 48 --weights yolov5m.pt --data voc.yaml --epochs 50 --cache --img 512 --hyp hyp.finetune.yaml --freeze 10
정확도 결과
결과에 따르면 레이어를 동결하면 학습 속도가 크게 빨라지지만 최종 mAP(평균 평균 정밀도)가 약간 감소할 수 있습니다. 일반적으로 모든 레이어를 훈련하는 것이 가장 정확도가 높으며, 더 많은 레이어를 동결하면 성능이 저하될 수 있는 대신 훈련 속도가 빨라집니다.
훈련 중 mAP50 비교
훈련 중 mAP50-95 비교
성능 지표 요약 표
리소스 활용
더 많은 레이어를 동결하면 크게 감소합니다. GPU 메모리 요구량과 전반적인 사용률을 크게 줄여줍니다. 따라서 제한된 하드웨어 리소스로 작업할 때 고정 레이어를 사용한 전이 학습은 더 큰 모델을 학습하거나 다른 방법보다 큰 이미지 크기를 사용할 수 있는 매력적인 옵션이 됩니다.
할당된 GPU 메모리(%)
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에서 일관되고 안정적인 작동을 보장합니다.