Dondurulmuş katmanlarla transfer öğrenme
📚 This guide explains how to freeze YOLOv5 🚀 layers when transfer learning. Transfer learning is a useful way to quickly retrain a model on new data without having to retrain the entire network. Instead, part of the initial weights are frozen in place, and the rest of the weights are used to compute loss and are updated by the optimizer. This requires less resources than normal training and allows for faster training times, though it may also result in reductions to final trained accuracy.
Başlamadan Önce
Repoyu klonlayın ve requirements.txt dosyasını bir Python>=3.8.0 ortamı dahil olmak üzere PyTorch>=1.8. Modeller ve veri setleri en son YOLOv5 sürümünden otomatik olarak indirilir.
git clone https://github.com/ultralytics/yolov5 # clone
cd yolov5
pip install -r requirements.txt # install
Omurgayı Dondur
train.py ile eşleşen tüm katmanlar freeze
train.py'deki liste, eğitim başlamadan önce gradyanları sıfıra ayarlanarak dondurulacaktır.
# 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
Modül adlarının bir listesini görmek için:
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
...
model.23.m.0.cv2.bn.weight
model.23.m.0.cv2.bn.bias
model.24.m.0.weight
model.24.m.0.bias
model.24.m.1.weight
model.24.m.1.bias
model.24.m.2.weight
model.24.m.2.bias
"""
Model mimarisine baktığımızda, model omurgasının 0-9 katmanları olduğunu görebiliriz:
# 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
- [-1, 1, Conv, [256, 1, 1]]
- [-1, 1, nn.Upsample, [None, 2, "nearest"]]
- [[-1, 4], 1, Concat, [1]] # cat backbone P3
- [-1, 3, C3, [256, False]] # 17 (P3/8-small)
- [-1, 1, Conv, [256, 3, 2]]
- [[-1, 14], 1, Concat, [1]] # cat head P4
- [-1, 3, C3, [512, False]] # 20 (P4/16-medium)
- [-1, 1, Conv, [512, 3, 2]]
- [[-1, 10], 1, Concat, [1]] # cat head P5
- [-1, 3, C3, [1024, False]] # 23 (P5/32-large)
- [[17, 20, 23], 1, Detect, [nc]] # Detect(P3, P4, P5)
böylece dondurma listesini adında 'model.0.' olan tüm modülleri içerecek şekilde tanımlayabiliriz. - 'model.9.' olan tüm modülleri içerecek şekilde tanımlayabiliriz:
Tüm Katmanları Dondur
Detect() içindeki son çıktı konvolüsyon katmanları hariç tüm modeli dondurmak için, dondurma listesini adında 'model.0.' olan tüm modülleri içerecek şekilde ayarladık. - 'model.23.' içeren tüm modülleri içerecek şekilde ayarladık:
Sonuçlar
YOLOv5m'yi, resmi COCO ön eğitiminden başlayarak varsayılan bir modelle (dondurma yok) birlikte yukarıdaki senaryoların her ikisinde de VOC üzerinde eğitiyoruz --weights yolov5m.pt
:
train.py --batch 48 --weights yolov5m.pt --data voc.yaml --epochs 50 --cache --img 512 --hyp hyp.finetune.yaml
Doğruluk Karşılaştırması
The results show that freezing speeds up training, but reduces final accuracy slightly.
GPU Kullanım Karşılaştırması
İlginç bir şekilde, ne kadar çok modül dondurulursa, eğitmek için o kadar az GPU bellek gerekir ve GPU kullanımı o kadar düşük olur. Bu, daha büyük modellerin veya daha büyük --image-size'da eğitilen modellerin daha hızlı eğitilmek için dondurma işleminden faydalanabileceğini göstermektedir.
Desteklenen Ortamlar
Ultralytics gibi temel bağımlılıklarla önceden yüklenmiş bir dizi kullanıma hazır ortam sağlar. CUDA, CUDNN, Pythonve PyTorchProjelerinizi başlatmak için.
- Ücretsiz GPU Not Defterleri:
- Google Bulut: GCP Hızlı Başlangıç Kılavuzu
- Amazon: AWS Hızlı Başlangıç Kılavuzu
- Azure: AzureML Hızlı Başlangıç Kılavuzu
- Docker: Docker Hızlı Başlangıç Kılavuzu
Proje Durumu
Bu rozet, tüm YOLOv5 GitHub Actions Sürekli Entegrasyon (CI) testlerinin başarıyla geçtiğini gösterir. Bu CI testleri, YOLOv5 'un işlevselliğini ve performansını çeşitli temel yönlerden titizlikle kontrol eder: eğitim, doğrulama, çıkarım, dışa aktarma ve kıyaslamalar. Her 24 saatte bir ve her yeni işlemde yapılan testlerle macOS, Windows ve Ubuntu üzerinde tutarlı ve güvenilir çalışma sağlarlar.