Bỏ qua nội dung

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 băng các lớp YOLOv5 🚀 khi triển khai học chuyển giao . Học chuyển giao là một kỹ thuật học máy (ML) 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 đào tạo lại toàn bộ mạng từ đầu. Bằng cách đóng băng trọng số của các lớp ban đầu và chỉ cập nhật các 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 đào tạo. Tuy nhiên, 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

Đầu tiên, sao chép YOLOv5 kho lưu trữ và cài đặt các phụ thuộc cần thiết được liệt kê trong requirements.txt. Đảm bảo bạn có một Python >=3.8.0 môi trường với PyTorch >=1,8 đã cài đặt. Đã được đào tạo trước mô hình và yêu cầu bộ dữ liệu sẽ được tải xuống tự động từ mới nhất YOLOv5 giải phóng.

git clone https://github.com/ultralytics/yolov5 # clone repository
cd yolov5
pip install -r requirements.txt # install dependencies

Cách thức hoạt động của Layer Freezing

Khi bạn đóng băng các lớp trong một mạng lưới nơ-ron, bạn ngăn chặn các tham số của chúng ( weights and biases ) khỏi việc được cập nhật trong quá trình đào tạo. Trong PyTorch , điều này đạt được bằng cách thiết lập requires_grad thuộc tính của tenxơ lớp False. Do đó, các gradient không được tính toán cho các lớp này trong sự lan truyền ngược, tiết kiệm tính toán và bộ nhớ.

Đây là cách YOLOv5 thực hiện đóng băng lớp trong tập lệnh đào tạo của 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 layers

Khám phá Kiến trúc Mô hình

Hiểu cấu trúc của YOLOv5 mô hình rất quan trọng để quyết định lớp nào sẽ đóng băng. Bạn có thể kiểm tra tên của tất cả các mô-đun và các tham số của chúng bằng cách sử dụng sau Python đoạn trích:

# 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
...
"""

Các YOLOv5 Kiến trúc thường bao gồm một xương sống (các lớp 0-9 trong cấu hình chuẩn như YOLOv5s/m/l/x) chịu trách nhiệm trích xuất tính năng và một đầu (các lớp còn lại) thực hiện phát hiện đối tượng .

# 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 detection

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 --freeze đối số trong lệnh đào tạo. Đối số này chỉ định chỉ số của không đông lạnh mô-đun; tất cả các mô-đun trước chỉ mục này sẽ có trọng số cố định.

Chỉ đóng băng Backbone

Để đóng băng toàn bộ xương sống (lớp 0 đến 9), điều này thường xảy ra khi điều chỉnh mô hình cho các lớp đối tượng mới trong khi vẫn giữ nguyên khả năng trích xuất tính năng chung học được từ một tập dữ liệu lớn như COCO :

python train.py --weights yolov5m.pt --data your_dataset.yaml --freeze 10

Chiến lược này có hiệu quả khi tập dữ liệu mục tiêu của bạn có các đặc điểm trực quan cấp thấp tương tự (cạnh, kết cấu) với dữ liệu đào tạo 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 hầu 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 mô-đun, thường là mô-đun cuối cùng, ví dụ, mô-đun 24 trong YOLOv5s) có thể đào tạo được:

python train.py --weights yolov5m.pt --data your_dataset.yaml --freeze 24

Cách tiếp cận này hữu ích khi bạn chủ yếu cần điều chỉnh mô hình cho một số lớp đầu ra khác nhau trong khi vẫn giữ nguyên phần lớn các tính năng đã học. Nó đòi hỏi ít tài nguyên tính toán nhất để tinh chỉnh .

So sánh hiệu suất

Để minh họa các tác động của lớp đóng băng, chúng tôi đã đào tạo YOLOv5m trên Bộ dữ liệu Pascal VOC cho 50 thời đại, bắt đầu từ COCO chính thức được đào tạo trước trọng lượng (yolov5m.pt). Chúng tôi đã so sánh ba kịch bản: đào tạo tất cả các lớp (--freeze 0), đóng băng xương sống (--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 10

Kết quả độ chính xác

Kết quả cho thấy việc đóng băng các lớp có thể đẩy nhanh quá trình đào tạo đáng kể nhưng có thể dẫn đến giảm nhẹ mAP cuối cùng (Độ chính xác trung bình trung bình) . Đào tạo 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 mang lại quá trình đào tạo nhanh hơn với cái giá phải trả là hiệu suất có thể thấp hơn.

Đào tạo kết quả mAP50 so sánh các chiến lược đóng băng khác nhau so sánh mAP50 trong quá trình đào tạo

Đào tạo kết quả mAP50-95 so sánh các chiến lược đóng băng khác nhau so sánh mAP50-95 trong quá trình đào tạo

Bảng tóm tắt kết quả thực hiện Bảng tóm tắt các số liệu hiệu suất

Sử dụng tài nguyên

Đóng băng nhiều lớp hơn làm giảm đáng kể yêu cầu bộ nhớ GPU và mức sử dụng chung. Điều này làm cho việc học chuyển giao với các lớp đóng băng trở thành một lựa chọn hấp dẫn khi làm việc với các tài nguyên phần cứng hạn chế, cho phép đào tạo các mô hình lớn hơn hoặc sử dụng kích thước hình ảnh lớn hơn so với khả năng có thể.

GPU phần trăm bộ nhớ được phân bổ trong quá trình đào tạo GPU Bộ nhớ được phân bổ (%)

GPU tỷ lệ sử dụng bộ nhớ trong quá trình đào tạo GPU Sử dụng (%)

Khi nào sử dụng Layer Freezing

Đóng băng lớp trong quá trình học chuyển giao đặc biệt có lợi trong một số tình huống:

  1. Tài nguyên tính toán hạn chế : Nếu bạn có những hạn chế về GPU bộ nhớ hoặc sức mạnh xử lý.
  2. Bộ dữ liệu nhỏ : Khi bộ dữ liệu mục tiêu của bạn nhỏ hơn đáng kể so với bộ dữ liệu tiền đào tạo ban đầu, việc đóng băng sẽ giúp ngăn ngừa hiện tượng quá khớp .
  3. Nguyên mẫu nhanh : Khi bạn cần nhanh chóng điều chỉnh một mô hình hiện có cho một nhiệm vụ hoặc lĩnh vực mới để đánh giá ban đầu.
  4. Miền tính năng tương tự : Nếu các tính nă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 tính năng trong tập dữ liệu mà mô hình đã được đào tạo trước.

Khám phá thêm về các sắc thái của việc học chuyển giao trong mục từ vựng của chúng tôi và xem xét các kỹ thuật như điều chỉnh siêu tham số để tối ưu hóa hiệu suất.

Môi trường được hỗ trợ

Ultralytics cung cấp nhiều môi trường sẵn sàng sử dụng với các thành phần phụ thuộc thiết yếu như CUDA , CuDNN , PythonPyTorch được cài đặt sẵn.

Tình trạng dự án

YOLOv5 Trạng thái tích hợp liên tục

Huy hiệu này xác nhận rằng 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 đá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 , xuấtchuẩn . 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 sau mỗi 24 giờ và trên mỗi lần cam kết mã mới.



📅 Được tạo ra cách đây 1 năm ✏️ Đã cập nhật cách đây 1 tháng

Bình luận

OSZAR »