Chuyển giao việc học với các lớp đông lạnh
📚 Hướng dẫn này giải thích cách đông lạnh YOLOv5 🚀 các lớp khi chuyển giao học tập . Chuyển giao học tập là một cách hữu ích để nhanh chóng đào tạo lại một mô hình trên dữ liệu mới mà không cần phải đào tạo lại toàn bộ mạng. Thay vào đó, một phần trọng số ban đầu được đóng băng tại chỗ và phần còn lại của trọng số được sử dụng để tính toán tổn thất và được trình tối ưu hóa cập nhật. Điều này đòi hỏi ít tài nguyên hơn so với đào tạo thông thường và cho phép thời gian đào tạo nhanh hơn, mặc dù nó cũng có thể dẫn đến việc giảm độ chính xác được đào tạo cuối cùng.
Trước khi bạn bắt đầu
Sao chép kho lưu trữ và cài đặt requirements.txt trong môi trường Python >=3.8.0 , bao gồm PyTorch >=1.8 . Các mô hình và tập dữ liệu tự động tải xuống từ phiên bản mới nhất YOLOv5 giải phóng .
git clone https://github.com/ultralytics/yolov5 # clone
cd yolov5
pip install -r requirements.txt # install
Đóng băng xương sống
Tất cả các lớp phù hợp với train.py freeze
danh sách trong train.py sẽ bị đóng băng bằng cách đặt độ dốc của chúng thành 0 trước khi bắt đầu đào tạo.
# 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
Để xem danh sách tên mô-đun:
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
"""
Khi nhìn vào kiến trúc mô hình, chúng ta có thể thấy xương sống của mô hình là các lớp 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
- [-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)
vì vậy chúng ta có thể định nghĩa danh sách đóng băng để chứa tất cả các mô-đun có 'model.0.' - 'model.9.' trong tên của chúng:
Đóng băng tất cả các lớp
Để đóng băng toàn bộ mô hình ngoại trừ các lớp tích chập đầu ra cuối cùng trong Detect(), chúng tôi đặt danh sách đóng băng để chứa tất cả các mô-đun có 'model.0.' - 'model.23.' trong tên của chúng:
Kết quả
Chúng tôi đào tạo YOLOv5m trên VOC trong cả hai tình huống trên, cùng với một mô hình mặc định (không đóng băng), bắt đầu từ mô hình COCO được đào tạo trước chính thức --weights yolov5m.pt
:
train.py --batch 48 --weights yolov5m.pt --data voc.yaml --epochs 50 --cache --img 512 --hyp hyp.finetune.yaml
So sánh độ chính xác
Kết quả cho thấy việc đóng băng làm tăng tốc độ đào tạo nhưng lại làm giảm độ chính xác cuối cùng một chút.
GPU So sánh sử dụng
Điều thú vị là càng nhiều mô-đun bị đóng băng thì càng ít GPU bộ nhớ là cần thiết để đào tạo, và thấp hơn GPU sử dụng. Điều này chỉ ra rằng các mô hình lớn hơn hoặc các mô hình được đào tạo ở --image-size lớn hơn có thể được hưởng lợi từ việc đóng băng để đào tạo nhanh hơn.
Môi trường được hỗ trợ
Ultralytics cung cấp nhiều môi trường sẵn sàng sử dụng, mỗi môi trường đều được cài đặt sẵn các thành phần phụ thuộc cần thiết như CUDA , CUDNN , Python và PyTorch để khởi động dự án của bạn.
- Miễn phí GPU Sổ tay:
- Google Cloud : Hướng dẫn bắt đầu nhanh GCP
- Amazon : Hướng dẫn bắt đầu nhanh AWS
- Azure : Hướng dẫn bắt đầu nhanh AzureML
- Người lái tàu: Hướng dẫn khởi động nhanh Docker
Tình trạng dự án
Huy hiệu này cho biết tất cả các thử nghiệm Tích hợp liên tục (CI) YOLOv5 GitHub Actions đều vượt qua thành công. Các thử nghiệm CI này kiểm tra nghiêm ngặt chức năng và hiệu suất của YOLOv5 trên nhiều khía cạnh chính: đào tạo , xác thực , suy luận , xuất và chuẩn . Chúng đảm bảo hoạt động nhất quán và đáng tin cậy trên macOS, Windows và Ubuntu, với các bài kiểm tra được tiến hành sau mỗi 24 giờ và sau mỗi lần cam kết mới.