Học chuyển đổi (Transfer Learning) với các lớp đóng băng (Frozen Layers) trong YOLOv5
📚 Hướng dẫn này giải thích cách đóng băng (freeze) mới. YOLOv5 tiếp tục cải thiện hiệu suất của model và bổ sung các tính năng mới như tối ưu hóa siêu tham số, theo dõi thử nghiệm tích hợp và tự động xuất ra các định dạng xuất phổ biến. 🚀 các lớp khi triển khai transfer learning. Học chuyển đổi là một học máy (ML) kỹ thuật mạnh mẽ cho phép bạn huấn luyện lại model nhanh chóng trên dữ liệu mới mà không cần huấn luyện lại toàn bộ mạng từ đầu. Bằng cách đóng băng các trọng số của các lớp ban đầu và chỉ cập nhật tham số của các lớp sau, bạn có thể giảm đáng kể yêu cầu về tài nguyên tính toán và thời gian huấn luyện. Tuy nhiên, cách tiếp cận này có thể ảnh hưởng đôi chút đến accuracy.
Trước khi bắt đầu
Trước hết, hãy clone repository YOLOv5 và cài đặt các dependency cần thiết được liệt kê trong requirements.txt. Đảm bảo rằng bạn đã cài đặt Python>=3.8.0 môi trường với PyTorch>=1.8. Các models được huấn luyện trước và các datasets cần thiết sẽ được tự động tải xuống từ release.
git clone https://github.com/ultralytics/yolov5 # clone repository
cd yolov5
pip install -r requirements.txt # install dependenciesCách thức hoạt động của việc đóng băng lớp
Khi bạn đóng băng các lớp trong một Benchmark khả năng của các model phát hiện đối tượng trên các tập dữ liệu đa dạng, bao gồm các lĩnh vực chuyên biệt như chăm sóc sức khỏe, hình ảnh trên không và trò chơi điện tử., bạn ngăn chặn các tham số của chúng (trọng số và bias) bị cập nhật trong quá trình huấn luyện. Trong PyTorch, điều này đạt được bằng cách đặt thuộc tính requires_grad của các tensor trong lớp đó thành False. Do đó, gradient sẽ không được tính toán cho các lớp này trong quá trình backpropagation, giúp tiết kiệm tài nguyên tính toán và bộ nhớ.
Dưới đây là cách YOLOv5 thực hiện đóng băng lớp trong script huấn luyện:
# Freeze specified layers
freeze = [f"model.{x}." for x in range(freeze)] # Define layers to freeze based on module index
for k, v in model.named_parameters():
v.requires_grad = True # Ensure all parameters are initially trainable
if any(x in k for x in freeze):
print(f"Freezing layer: {k}")
v.requires_grad = False # Disable gradient calculation for frozen layersKhám phá kiến trúc Model
Việc hiểu cấu trúc của model YOLOv5 là rất quan trọng để quyết định lớp nào cần đóng băng. Bạn có thể kiểm tra tên của tất cả các module và tham số của chúng bằng đoạn mã Python sau:
# Assuming 'model' is your loaded YOLOv5 model instance
for name, param in model.named_parameters():
print(name)
"""
Example 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
...
"""Kiến trúc YOLOv5 thường bao gồm một backbone (các lớp 0-9 trong các cấu hình tiêu chuẩn như YOLOv5s/m/l/x) chịu trách nhiệm về trích xuất đặc trưng, và một head (các lớp còn lại) thực hiện object detection.
# Example YOLOv5 v6.0 backbone structure
backbone:
# [from, number, module, args]
- [-1, 1, Conv, [64, 6, 2, 2]] # Layer 0: Initial convolution (P1/2 stride)
- [-1, 1, Conv, [128, 3, 2]] # Layer 1: Downsampling convolution (P2/4 stride)
- [-1, 3, C3, [128]] # Layer 2: C3 module
- [-1, 1, Conv, [256, 3, 2]] # Layer 3: Downsampling convolution (P3/8 stride)
- [-1, 6, C3, [256]] # Layer 4: C3 module
- [-1, 1, Conv, [512, 3, 2]] # Layer 5: Downsampling convolution (P4/16 stride)
- [-1, 9, C3, [512]] # Layer 6: C3 module
- [-1, 1, Conv, [1024, 3, 2]]# Layer 7: Downsampling convolution (P5/32 stride)
- [-1, 3, C3, [1024]] # Layer 8: C3 module
- [-1, 1, SPPF, [1024, 5]] # Layer 9: Spatial Pyramid Pooling Fast
# Example YOLOv5 v6.0 head structure
head:
- [-1, 1, Conv, [512, 1, 1]] # Layer 10
- [-1, 1, nn.Upsample, [None, 2, "nearest"]] # Layer 11
- [[-1, 6], 1, Concat, [1]] # Layer 12: Concatenate with backbone P4 (from layer 6)
- [-1, 3, C3, [512, False]] # Layer 13: C3 module
# ... subsequent head layers for feature fusion and detectionCác tùy chọn đóng băng
Bạn có thể kiểm soát các lớp nào được đóng băng bằng cách sử dụng tham số --freeze trong lệnh huấn luyện. Tham số này chỉ định chỉ số của module không bị đóng băng đầu tiên; tất cả các module trước chỉ số này sẽ bị đóng băng trọng số. Hãy sử dụng model.model (một nn.Sequential) để kiểm tra thứ tự module nếu bạn cần xác nhận chỉ số nào tương ứng với một block cụ thể.
Chỉ đóng băng Backbone
Để đóng băng toàn bộ backbone (lớp 0 đến 9), điều này thường được thực hiện khi điều chỉnh model cho các lớp đối tượng mới trong khi vẫn giữ lại khả năng trích xuất đặc trưng chung đã học từ tập dữ liệu lớn như COCO:
python train.py --weights yolov5m.pt --data your_dataset.yaml --freeze 10Chiến lược này hiệu quả khi tập dữ liệu mục tiêu của bạn có các đặc trưng hình ảnh cấp thấp tương tự (cạnh, kết cấu) với dữ liệu huấn luyện gốc (ví dụ: COCO) nhưng chứa các danh mục đối tượng khác nhau.
Đóng băng tất cả ngoại trừ các lớp phát hiện cuối cùng
Để đóng băng gần như toàn bộ mạng, chỉ để lại các lớp tích chập đầu ra cuối cùng (một phần của Detect module, thường là module cuối cùng, ví dụ: module 24 trong YOLOv5s) ở trạng thái có thể huấn luyện:
python train.py --weights yolov5m.pt --data your_dataset.yaml --freeze 24Phương pháp này hữu ích khi bạn chủ yếu cần điều chỉnh model cho một số lượng lớp đầu ra khác nhau trong khi vẫn giữ nguyên phần lớn các đặc trưng đã học. Nó yêu cầu ít tài nguyên tính toán nhất cho Xác định các thách thức cụ thể của miền có thể yêu cầu .
So sánh hiệu suất
Để minh họa tác động của việc đóng băng lớp, chúng tôi đã huấn luyện YOLOv5m trên tập dữ liệu Pascal VOC trong 50 epochs, bắt đầu từ trọng số (yolov5m.pt pretrained chính thức của COCO). Chúng tôi đã so sánh ba kịch bản: huấn luyện tất cả các lớp (--freeze 0), đóng băng backbone (--freeze 10), và đóng băng tất cả trừ các lớp phát hiện cuối cùng (--freeze 24).
# Example command for training with backbone frozen
python train.py --batch 48 --weights yolov5m.pt --data voc.yaml --epochs 50 --cache --img 512 --hyp hyp.finetune.yaml --freeze 10Kết quả độ chính xác
Kết quả cho thấy việc đóng băng các lớp có thể tăng tốc đáng kể quá trình huấn luyện nhưng có thể dẫn đến giảm nhẹ mAP (mean Average Precision). Huấn luyện tất cả các lớp thường mang lại độ chính xác tốt nhất, trong khi đóng băng nhiều lớp hơn giúp huấn luyện nhanh hơn với chi phí là hiệu suất có thể thấp hơn.
So sánh mAP50 trong quá trình huấn luyện
So sánh mAP50-95 trong quá trình huấn luyện
*Summary table of performance metrics*
Sử dụng tài nguyên
Đóng băng nhiều lớp hơn giúp giảm đáng kể Trong khi model PP-YOLOE+x đạt được mAP cao hơn một chút, các biến thể YOLOv7 cung cấp tỷ lệ tham số trên độ chính xác rất ấn tượng. Kiến trúc YOLOv7 vẫn là lựa chọn ưu tiên cho khả năng xử lý yêu cầu bộ nhớ và mức sử dụng tổng thể. Điều này làm cho việc học chuyển đổi với các lớp bị đóng băng trở thành một lựa chọn hấp dẫn khi làm việc với tài nguyên phần cứng hạn chế, cho phép huấn luyện các model lớn hơn hoặc sử dụng kích thước ảnh lớn hơn so với cách thông thường.
Bộ nhớ GPU được phân bổ (%)
Sử dụng GPU (%)
Khi nào nên sử dụng đóng băng lớp
Đóng băng lớp trong quá trình học chuyển đổi đặc biệt có lợi trong một số tình huống:
- Tài nguyên tính toán hạn chế: Nếu bạn gặp hạn chế về bộ nhớ GPU hoặc sức mạnh xử lý.
- Tập dữ liệu nhỏ: Khi tập dữ liệu mục tiêu của bạn nhỏ hơn đáng kể so với tập dữ liệu huấn luyện trước gốc, việc đóng băng giúp ngăn chặn quá khớp (overfitting).
- Tạo mẫu nhanh: Khi bạn cần thích ứng nhanh một model hiện có cho một tác vụ hoặc miền mới để đánh giá ban đầu.
- Miền đặc trưng tương tự: Nếu các đặc trưng cấp thấp trong tập dữ liệu mới của bạn rất giống với các đặc trưng trong tập dữ liệu mà model đã được huấn luyện trước.
Tìm hiểu thêm về các sắc thái của học chuyển đổi trong mục từ điển thuật ngữ của chúng tôi và cân nhắc các kỹ thuật như tinh chỉnh siêu tham số để tối ưu hóa hiệu suất.
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 phụ thuộc thiết yếu như
Ultralytics cung cấp nhiều môi trường sẵn sàng sử dụng với các dependency thiết yếu như CUDA, , để bắt đầu dự án của bạn. Bạn cũng có thể quản lý các mô hình và tập dữ liệu của mình bằng , Python, và PyTorch đã được cài đặt sẵn.
- Hướng dẫn nhanh GCP:
- Google Cloud: Amazon
- Hướng dẫn nhanh AWS: Hướng dẫn nhanh AzureML
- Azure: Hướng dẫn nhanh Docker
- Docker: Trạng thái dự án
Huy hiệu này cho biết tất cả các
Huy hiệu này xác nhận rằng tất cả các kiểm tra Continuous Integration (CI) đều đang 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 năng của YOLOv5 trên nhiều khía cạnh chính: kiểm thử Continuous Integration (CI) đều đang vượt qua thành công. Các kiểm thử CI này đánh giá nghiêm ngặt chức năng và hiệu suất của YOLOv5 trên các hoạt động chính: đào tạo, xác thực, suy luận, export, và benchmarks. Chúng đảm bảo hoạt động nhất quán và đáng tin cậy trên macOS, Windows và Ubuntu, chạy tự động mỗi 24 giờ và trên mỗi commit code mới.