─░├žeri─če ge├ž

Dondurulmu┼č katmanlarla transfer ├Â─črenme

­čôÜ Bu k─▒lavuz, transfer ├Â─črenimi s─▒ras─▒nda YOLOv5 ­čÜÇ katmanlar─▒n─▒n nas─▒l dondurulaca─č─▒n─▒ a├ž─▒klamaktad─▒r. Aktar─▒ml─▒ ├Â─črenme, t├╝m a─č─▒ yeniden e─čitmek zorunda kalmadan bir modeli yeni veriler ├╝zerinde h─▒zl─▒ bir ┼čekilde yeniden e─čitmenin yararl─▒ bir yoludur. Bunun yerine, ilk a─č─▒rl─▒klar─▒n bir k─▒sm─▒ yerinde dondurulur ve a─č─▒rl─▒klar─▒n geri kalan─▒ kayb─▒ hesaplamak i├žin kullan─▒l─▒r ve optimize edici taraf─▒ndan g├╝ncellenir. Bu, normal e─čitime g├Âre daha az kaynak gerektirir ve daha h─▒zl─▒ e─čitim s├╝releri sa─člar, ancak ayn─▒ zamanda nihai e─čitim do─črulu─čunda azalmalara neden olabilir.

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:

python train.py --freeze 10

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:

python train.py --freeze 24

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─▒

Sonu├žlar, dondurman─▒n e─čitimi h─▒zland─▒rd─▒─č─▒n─▒, ancak nihai do─črulu─ču biraz azaltt─▒─č─▒n─▒ g├Âstermektedir.

Dondurma e─čitimi mAP50 sonu├žlar─▒

Dondurma e─čitimi mAP50-95 sonu├žlar─▒

Tablo sonu├žlar─▒

GPU Kullan─▒m Kar┼č─▒la┼čt─▒rmas─▒

─░lgin├ž bir ┼čekilde, ne kadar ├žok mod├╝l dondurulursa, e─čitmek i├žin o kadar az GPU belle─či 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.

E─čitim GPU belle─čine ayr─▒lan y├╝zde

E─čitim GPU bellek kullan─▒m y├╝zdesi

Desteklenen Ortamlar

Ultralytics her biri CUDA, CUDNN gibi temel ba─č─▒ml─▒l─▒klarla ├Ânceden y├╝klenmi┼č bir dizi kullan─▒ma haz─▒r ortam sa─člar, Pythonve PyTorchProjelerinizi ba┼člatmak i├žin.

Proje Durumu

YOLOv5 CI

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.



Created 2023-11-12, Updated 2024-06-10
Authors: glenn-jocher (7)

Yorumlar