Chuyển đến nội dung

Kiến Trúc Ultralytics YOLOv5

YOLOv5 (v6.0/6.1) là một thuật toán phát hiện đối tượng mạnh mẽ được phát triển bởi Ultralytics. Bài viết này đi sâu vào kiến trúc YOLOv5, các chiến lược tăng cường dữ liệu, các phương pháp huấn luyện và các kỹ thuật tính toán loss. Sự hiểu biết toàn diện này sẽ giúp cải thiện ứng dụng thực tế của bạn về phát hiện đối tượng trong các lĩnh vực khác nhau, bao gồm giám sát, xe tự hành và nhận dạng hình ảnh.

1. Cấu trúc Mô hình

Kiến trúc của YOLOv5 bao gồm ba phần chính:

  • Backbone: Đây là phần thân chính của mạng. Đối với YOLOv5, backbone được thiết kế bằng cách sử dụng CSPDarknet53 cấu trúc, một sửa đổi của kiến trúc Darknet được sử dụng trong các phiên bản trước.
  • Neck: Phần này kết nối backbone và head. Trong YOLOv5, SPPF (Spatial Pyramid Pooling - Fast) và PANet cấu trúc (Mạng Tổng hợp Đường dẫn) được sử dụng.
  • Head: Phần này chịu trách nhiệm tạo ra kết quả đầu ra cuối cùng. YOLOv5 sử dụng YOLOv3 Head cho mục đích này.

Cấu trúc của mô hình được mô tả trong hình bên dưới. Chi tiết cấu trúc mô hình có thể được tìm thấy trong yolov5l.yaml.

yolov5

YOLOv5 giới thiệu một số cải tiến đáng chú ý so với các phiên bản tiền nhiệm:

  1. Hàm Focus được tìm thấy trong các phiên bản trước, được thay thế bằng 6x6 Conv2d . Thay đổi này giúp tăng hiệu quả #4825.
  2. Hàm SPP được thay thế bằng SPPF. Sự thay đổi này làm tăng hơn gấp đôi tốc độ xử lý trong khi vẫn duy trì cùng một đầu ra.

Để kiểm tra tốc độ của SPPSPPF, có thể sử dụng đoạn code sau:

Ví dụ về lập hồ sơ tốc độ SPP so với SPPF (nhấp để mở)
import time

import torch
import torch.nn as nn


class SPP(nn.Module):
    def __init__(self):
        """Initializes an SPP module with three different sizes of max pooling layers."""
        super().__init__()
        self.maxpool1 = nn.MaxPool2d(5, 1, padding=2)
        self.maxpool2 = nn.MaxPool2d(9, 1, padding=4)
        self.maxpool3 = nn.MaxPool2d(13, 1, padding=6)

    def forward(self, x):
        """Applies three max pooling layers on input `x` and concatenates results along channel dimension."""
        o1 = self.maxpool1(x)
        o2 = self.maxpool2(x)
        o3 = self.maxpool3(x)
        return torch.cat([x, o1, o2, o3], dim=1)


class SPPF(nn.Module):
    def __init__(self):
        """Initializes an SPPF module with a specific configuration of MaxPool2d layer."""
        super().__init__()
        self.maxpool = nn.MaxPool2d(5, 1, padding=2)

    def forward(self, x):
        """Applies sequential max pooling and concatenates results with input tensor."""
        o1 = self.maxpool(x)
        o2 = self.maxpool(o1)
        o3 = self.maxpool(o2)
        return torch.cat([x, o1, o2, o3], dim=1)


def main():
    """Compares outputs and performance of SPP and SPPF on a random tensor (8, 32, 16, 16)."""
    input_tensor = torch.rand(8, 32, 16, 16)
    spp = SPP()
    sppf = SPPF()
    output1 = spp(input_tensor)
    output2 = sppf(input_tensor)

    print(torch.equal(output1, output2))

    t_start = time.time()
    for _ in range(100):
        spp(input_tensor)
    print(f"SPP time: {time.time() - t_start}")

    t_start = time.time()
    for _ in range(100):
        sppf(input_tensor)
    print(f"SPPF time: {time.time() - t_start}")


if __name__ == "__main__":
    main()
kết quả:
True
SPP time: 0.5373051166534424
SPPF time: 0.20780706405639648

2. Các Kỹ thuật Tăng cường Dữ liệu

YOLOv5 sử dụng nhiều kỹ thuật tăng cường dữ liệu khác nhau để cải thiện khả năng khái quát hóa của mô hình và giảm thiểu tình trạng quá khớp (overfitting). Các kỹ thuật này bao gồm:

  • Tăng cường Mosaic: Một kỹ thuật xử lý ảnh kết hợp bốn ảnh huấn luyện thành một theo những cách khuyến khích các mô hình phát hiện đối tượng xử lý tốt hơn các tỷ lệ và phép tịnh tiến đối tượng khác nhau.

    mosaic

  • Tăng cường Sao chép-Dán (Copy-Paste Augmentation): Một phương pháp tăng cường dữ liệu sáng tạo, sao chép các vùng ngẫu nhiên từ một ảnh và dán chúng lên một ảnh được chọn ngẫu nhiên khác, tạo ra một mẫu huấn luyện mới một cách hiệu quả.

    copy-paste

  • Các phép biến đổi Affine ngẫu nhiên: Bao gồm xoay, масштабирование, tịnh tiến và cắt ảnh ngẫu nhiên.

    random-affine

  • Tăng cường MixUp: Một phương pháp tạo ra các ảnh tổng hợp bằng cách lấy một tổ hợp tuyến tính của hai ảnh và các nhãn liên quan của chúng.

    mixup

  • Albumentations: Một thư viện mạnh mẽ để tăng cường hình ảnh, hỗ trợ nhiều kỹ thuật tăng cường khác nhau. Tìm hiểu thêm về sử dụng các phương pháp tăng cường Albumentations.

  • Tăng cường HSV: Thay đổi ngẫu nhiên Hue, Saturation và Value của ảnh.

    hsv

  • Lật ngang ngẫu nhiên: Một phương pháp tăng cường lật ảnh theo chiều ngang một cách ngẫu nhiên.

    horizontal-flip (lật ngang)

3. Các Chiến Lược Huấn Luyện

YOLOv5 áp dụng một số chiến lược huấn luyện phức tạp để nâng cao hiệu suất của mô hình. Chúng bao gồm:

  • Huấn luyện đa tỷ lệ: Các ảnh đầu vào được thay đổi tỷ lệ ngẫu nhiên trong khoảng từ 0,5 đến 1,5 lần kích thước ban đầu của chúng trong quá trình huấn luyện.
  • AutoAnchor: Chiến lược này tối ưu hóa các hộp neo (anchor box) ưu tiên để phù hợp với các đặc điểm thống kê của các hộp ground truth trong dữ liệu tùy chỉnh của bạn.
  • Khởi động và Bộ lập lịch LR Cosine: Một phương pháp điều chỉnh tốc độ học để nâng cao hiệu suất mô hình.
  • Trung bình động theo hàm mũ (EMA): Một chiến lược sử dụng giá trị trung bình của các tham số qua các bước trước đó để ổn định quá trình huấn luyện và giảm lỗi tổng quát hóa.
  • Huấn luyện độ chính xác hỗn hợp: Một phương pháp để thực hiện các phép toán ở định dạng nửa độ chính xác, giảm mức sử dụng bộ nhớ và tăng tốc độ tính toán.
  • Tiến Hóa Siêu Tham Số: Một chiến lược để tự động điều chỉnh các siêu tham số để đạt được hiệu suất tối ưu. Tìm hiểu thêm về điều chỉnh siêu tham số.

4. Các Tính Năng Bổ Sung

4.1 Tính Toán Loss

Hàm mất mát trong YOLOv5 được tính bằng cách kết hợp ba thành phần mất mát riêng lẻ:

  • Mất mát lớp (Mất mát BCE): Mất mát Binary Cross-Entropy, đo lường sai số cho nhiệm vụ phân loại.
  • Mất mát Objectness (Mất mát BCE): Một mất mát Binary Cross-Entropy khác, tính toán sai số trong việc phát hiện xem một đối tượng có xuất hiện trong một ô lưới cụ thể hay không.
  • Mất mát vị trí (Mất mát CIoU): Mất mát Complete IoU, đo lường sai số trong việc định vị đối tượng trong ô lưới.

Hàm mất mát tổng thể được mô tả bằng:

loss (mất mát)

4.2 Cân Bằng Loss

Mức độ mất mát objectness của ba lớp dự đoán (P3, P4, P5) được cân bằng khác nhau. Các trọng số cân bằng là [4.0, 1.0, 0.4] tương ứng. Cách tiếp cận này đảm bảo rằng các dự đoán ở các tỷ lệ khác nhau đóng góp một cách thích hợp vào tổng mức độ mất mát.

obj_loss (mất mát đối tượng)

4.3 Loại Bỏ Độ Nhạy Lưới

Kiến trúc YOLOv5 thực hiện một số thay đổi quan trọng đối với chiến lược dự đoán hộp so với các phiên bản YOLO trước đó. Trong YOLOv2 và YOLOv3, tọa độ hộp được dự đoán trực tiếp bằng cách sử dụng kích hoạt của lớp cuối cùng.

b_x b_y b_w b_h

Tính toán lưới YOLOv5

Tuy nhiên, trong YOLOv5, công thức dự đoán tọa độ hộp đã được cập nhật để giảm độ nhạy của lưới và ngăn mô hình dự đoán kích thước hộp không giới hạn.

Các công thức sửa đổi để tính toán hộp giới hạn được dự đoán như sau:

bx bởi bw bh

So sánh độ lệch điểm trung tâm trước và sau khi chia tỷ lệ. Phạm vi độ lệch điểm trung tâm được điều chỉnh từ (0, 1) thành (-0.5, 1.5). Do đó, độ lệch có thể dễ dàng nhận được 0 hoặc 1.

Tỷ lệ lưới YOLOv5

So sánh tỷ lệ chia tỷ lệ chiều cao và chiều rộng (tương đối so với neo) trước và sau khi điều chỉnh. Các phương trình hộp yolo/darknet ban đầu có một lỗi nghiêm trọng. Chiều rộng và Chiều cao hoàn toàn không bị giới hạn vì chúng chỉ đơn giản là out=exp(in), điều này rất nguy hiểm, vì nó có thể dẫn đến gradient không kiểm soát được, sự không ổn định, tổn thất NaN và cuối cùng là mất hoàn toàn quá trình đào tạo. Tham khảo vấn đề này để biết thêm chi tiết.

Khả năng mở rộng không giới hạn của YOLOv5

4.4 Xây Dựng Mục Tiêu

Quá trình xây dựng mục tiêu trong YOLOv5 rất quan trọng đối với hiệu quả huấn luyện và độ chính xác của mô hình. Nó bao gồm việc gán các hộp ground truth cho các ô lưới thích hợp trong bản đồ đầu ra và khớp chúng với các hộp neo thích hợp.

Quy trình này bao gồm các bước sau:

  • Tính tỷ lệ giữa kích thước hộp ground truth và kích thước của từng anchor template.

rw

rh

rwmax

rhmax

rmax

match

Tính toán IoU của YOLOv5

  • Nếu tỷ lệ tính được nằm trong ngưỡng cho phép, hãy ghép hộp ground truth với anchor tương ứng.

Độ chồng lấp lưới của YOLOv5

  • Gán anchor đã ghép cho các ô thích hợp, lưu ý rằng do sự điều chỉnh offset tâm điểm, một hộp ground truth có thể được gán cho nhiều hơn một anchor. Vì phạm vi offset tâm điểm được điều chỉnh từ (0, 1) thành (-0.5, 1.5), GT Box có thể được gán cho nhiều anchor hơn.

Lựa chọn anchor của YOLOv5

Bằng cách này, quy trình tạo target đảm bảo rằng mỗi đối tượng ground truth được gán và khớp đúng cách trong quá trình huấn luyện, cho phép YOLOv5 học nhiệm vụ phát hiện đối tượng hiệu quả hơn.

Kết luận

Tóm lại, YOLOv5 thể hiện một bước tiến đáng kể trong việc phát triển các mô hình phát hiện đối tượng theo thời gian thực. Bằng cách kết hợp nhiều tính năng mới, cải tiến và chiến lược huấn luyện, nó vượt trội hơn so với các phiên bản trước của họ YOLO về hiệu suất và hiệu quả.

Các cải tiến chính trong YOLOv5 bao gồm việc sử dụng kiến trúc động, một loạt các kỹ thuật tăng cường dữ liệu, các chiến lược huấn luyện sáng tạo, cũng như các điều chỉnh quan trọng trong việc tính toán tổn thất và quy trình xây dựng target. Tất cả những cải tiến này cải thiện đáng kể độ chính xác và hiệu quả của việc phát hiện đối tượng trong khi vẫn giữ được tốc độ cao, vốn là đặc điểm nổi bật của các mô hình YOLO.



📅 Đã tạo 1 năm trước ✏️ Cập nhật 5 tháng trước

Bình luận