Chuyển giao học tập với các lớp đông lạnh trong YOLOv5
📚 Hướng dẫn này giải thích cách đông lạnh YOLOv5 🚀 các lớp khi triển khai học chuyển giao . Học chuyển giao là một kỹ thuật mạnh mẽ cho phép bạn 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. Bằng cách đóng băng một phần trọng số ban đầu và chỉ cập nhật phần còn lại, bạn có thể giảm đáng kể tài nguyên tính toán và thời gian đào tạo, mặc dù cách tiếp cận này có thể ảnh hưởng một chút đến độ chính xác của mô hình 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
Cách thức hoạt động của Layer Freezing
Khi bạn đóng băng các lớp trong mạng nơ-ron, về cơ bản bạn đang thiết lập các tham số của chúng thành không thể đào tạo được. Các gradient cho các lớp này được thiết lập thành 0, ngăn chặn mọi cập nhật trọng số trong quá trình truyền ngược. Điều này được triển khai trong YOLOv5 Quy trình đào tạo của như sau:
# 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
Khám phá Kiến trúc Mô hình
Để đóng băng hiệu quả các phần cụ thể của mô hình, bạn cần hiểu cấu trúc lớp. Bạn có thể xem tất cả tên mô-đun bằng:
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
...
"""
Các YOLOv5 Kiến trúc bao gồm xương sống (lớp 0-9) và đầu (các lớp còn lại):
# 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
# ... remaining head layers
Tùy chọn đóng băng
Chỉ đóng băng Backbone
Để chỉ đóng băng xương sống (lớp 0-9), hữu ích cho việc điều chỉnh mô hình cho các lớp mới trong khi vẫn giữ nguyên khả năng trích xuất tính năng đã học:
Cách tiếp cận này đặc biệt hiệu quả khi tập dữ liệu mới của bạn có các tính năng cấp thấp tương tự với dữ liệu đào tạo ban đầu nhưng có các lớp hoặc đối tượng khác nhau.
Đóng băng tất cả ngoại trừ các lớp phát hiện
Để đó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 mô-đun Phát hiện:
Phương pháp này lý tưởng khi bạn muốn duy trì hầu hết các tính năng đã học của mô hình nhưng cần điều chỉnh để phát hiện số lượng lớp khác nhau.
So sánh hiệu suất
Chúng tôi đã đào tạo YOLOv5m trên tập dữ liệu VOC bằng nhiều chiến lược đóng băng khác nhau, bắt đầu từ trọng số được đào tạo trước chính thức của COCO:
python train.py --batch 48 --weights yolov5m.pt --data voc.yaml --epochs 50 --cache --img 512 --hyp hyp.finetune.yaml
Kết quả độ chính xác
Kết quả chứng minh rằng các lớp đóng băng đẩy nhanh quá trình đào tạo nhưng làm giảm nhẹ độ chính xác cuối cùng:
Sử dụng tài nguyên
Đóng băng nhiều lớp hơn sẽ giảm GPU yêu cầu và sử dụng bộ nhớ, làm cho kỹ thuật này có giá trị để đào tạo các mô hình lớn hơn hoặc sử dụng hình ảnh có độ phân giải cao hơn:
Khi nào sử dụng Layer Freezing
Việc đóng băng lớp trong học chuyển giao đặc biệt có lợi trong các tình huống như:
- Tài nguyên tính toán hạn chế : Khi GPU bộ nhớ hoặc sức mạnh xử lý bị hạn chế
- Bộ dữ liệu nhỏ : Khi bộ dữ liệu mới của bạn quá nhỏ để đào tạo một mô hình đầy đủ mà không bị quá khớp
- Thích ứng nhanh : Khi bạn cần nhanh chóng thích ứng một mô hình với một miền mới
- Tinh chỉnh cho các nhiệm vụ cụ thể : Khi điều chỉnh một mô hình chung cho một ứng dụng chuyên biệt
Để biết thêm thông tin về các kỹ thuật học chuyển giao và ứng dụng của chúng, hãy xem mục từ vựng về học chuyển giao .
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.