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 băng YOLOv5 🚀 lớp khi chuyển giao học tập. Học chuyển giao là một cách hữu ích để nhanh chóng đào tạo lại 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 lượng ban đầu được đóng băng tại chỗ và phần còn lại của trọng lượng được sử dụng để tính toán tổn thất và được cập nhật bởi trình tối ưu hóa. Điều này đòi hỏi ít tài nguyên hơn so với đào tạo bình 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 giảm độ chính xác được đào tạo cuối cùng.
Trước khi bắt đầu
Sao chép repo và cài đặt requirements.txt trong một PythonMôi trường >=3.8.0 , bao gồm PyTorch>=1,8. Mô hình và bộ dữ liệu tải xuống tự động từ phiên bản mới nhất YOLOv5 phát hành.
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ẽ được đóng băng bằng cách đặt gradient của chúng về 0 trước khi đào tạo bắt đầu.
# 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
"""
Nhìn vào kiến trúc mô hình chúng ta có thể thấy rằng xương sống 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 với 'model.0.' - 'model.9.' trong tên của chúng:
Đóng băng tất cả các lớp
Để đóng băng mô hình đầy đủ 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 trên cả hai tình huống trên, cùng với mô hình mặc định (không đóng băng), bắt đầu từ COCO chính thức được đào tạo trướ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 đóng băng tăng tốc độ đào tạo, nhưng 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 ở kích thước hình ảnh 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 một loạt các môi trường sẵn sàng sử dụng, mỗi môi trường được cài đặt sẵn với các phụ thuộc thiết yếu như CUDA, CUDNN,Pythonvà PyTorch, để khởi động các dự án của bạn.
- Tự do GPU Sổ ghi chép:
- Google Đám mây: 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
- Docker: Hướng dẫn bắt đầu nhanh Docker
Tình trạng dự án
Huy hiệu này cho biết rằng tất cả YOLOv5 Các bài kiểm tra Tích hợp liên tục (CI) GitHub Actions đã vượt qua thành công. Các bài kiểm tra CI này kiểm tra nghiêm ngặt chức năng và hiệu suất của YOLOv5 trên các khía cạnh chính khác nhau: đào tạo, xác nhận, suy luận, xuất khẩu và điểm 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 thử nghiệm được tiến hành 24 giờ một lần và theo mỗi cam kết mới.