Chuyển giao việc học với các lớp đông lạnh
📚 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.
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
The results show that freezing speeds up training, but reduces final accuracy slightly.
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.