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 hàm 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 nhiều lĩnh vực khác nhau, bao gồm giám sát, xe tự lái và nhận diện 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ế sử dụng cấu trúc CSPDarknet53, một biến thể 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, các cấu trúc SPPF (Spatial Pyramid Pooling - Fast) và PANet (Path Aggregation Network) được sử dụng.
  • Head: Phần này chịu trách nhiệm tạo ra đầ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 dưới đây. Chi tiết về cấu trúc mô hình có thể được tìm thấy trong models/yolov5l.yaml.

Kiến trúc YOLOv5 hiển thị backbone, neck và head

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

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

SPP vs SPPF speed profiling example (click to open)
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 tổng quát hóa của mô hình và giảm quá khớp. Các kỹ thuật này bao gồm:

  • Mosaic Augmentation: Một kỹ thuật xử lý hình ảnh kết hợp bốn hình ảnh huấn luyện thành một nhằm 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à vị trí đối tượng khác nhau.

    Tăng cường dữ liệu Mosaic YOLOv5 kết hợp bốn hình ảnh

  • Copy-Paste Augmentation: Một phương pháp tăng cường dữ liệu sáng tạo giúp sao chép các bản vá ngẫu nhiên từ một hình ảnh và dán chúng vào một hình ảnh khác được chọn ngẫu nhiên, từ đó tạo ra một mẫu huấn luyện mới.

    Tăng cường dữ liệu Copy-Paste YOLOv5 cho instance segmentation

  • Random Affine Transformations: Bao gồm xoay, thay đổi tỷ lệ, dịch chuyển và cắt lệch hình ảnh ngẫu nhiên.

    Biến đổi Affine ngẫu nhiên YOLOv5 để huấn luyện

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

    Tăng cường dữ liệu MixUp YOLOv5 hòa trộn hai hình ảnh

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

  • HSV Augmentation: Các thay đổi ngẫu nhiên đối với Hue (Sắc độ), Saturation (Độ bão hòa) và Value (Giá trị độ sáng) của hình ảnh.

    Ví dụ tăng cường không gian màu HSV YOLOv5

  • Random Horizontal Flip: Một phương pháp tăng cường thực hiện lật hình ảnh theo chiều ngang ngẫu nhiên.

    Tăng cường lật ngang ngẫu nhiên YOLOv5

3. Chiến lược huấn luyện

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

  • Multiscale Training: Các hình ảnh đầu vào được thay đổi tỷ lệ ngẫu nhiên trong phạm vi từ 0.5 đến 1.5 lần kích thước gốc 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 anchor box tiên nghiệm để khớp với các đặc điểm thống kê của các ground truth box trong dữ liệu tùy chỉnh của bạn.
  • Warmup và Cosine LR Scheduler: Một phương pháp điều chỉnh tốc độ học để nâng cao hiệu suất mô hình.
  • Exponential Moving Average (EMA): Một chiến lược sử dụng trung bình các tham số qua các bước trước đó để ổn định quá trình huấn luyện và giảm sai số tổng quát hóa.
  • Mixed Precision Training: Một phương pháp thực hiện các thao tác ở định dạng độ chính xác một nửa, giúp giảm mức sử dụng bộ nhớ và tăng tốc độ tính toán.
  • Hyperparameter Evolution: Một chiến lược tự động tinh chỉnh siêu tham số để đạt được hiệu suất tối ưu. Tìm hiểu thêm về tinh chỉnh siêu tham số.

4. Tính năng bổ sung

4.1 Tính toán Loss

Loss trong YOLOv5 được tính toán là sự kết hợp của ba thành phần loss riêng biệt:

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

Tổng thể hàm loss được biểu diễn bởi:

Công thức hàm tổng loss YOLOv5

4.2 Cân bằng Loss

Các loss objectness của ba lớp dự đoán (P3, P4, P5) được tính trọng số khác nhau. Các trọng số cân bằng lần lượt là [4.0, 1.0, 0.4]. Cách tiếp cận này đảm bảo rằng các dự đoán ở các quy mô khác nhau đóng góp phù hợp vào tổng loss.

Công thức cân bằng loss objectness YOLOv5

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 box so với các phiên bản YOLO trước đó. Trong YOLOv2 và YOLOv3, tọa độ box đượ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.

Công thức dự đoán tọa độ x bounding box Công thức dự đoán tọa độ y bounding box Công thức dự đoán chiều rộng bounding box Công thức dự đoán chiều cao bounding box

YOLOv5 grid computation

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

Các công thức sửa đổi để tính toán bounding box dự đoán như sau:

Công thức tọa độ x bounding box sửa đổi của YOLOv5 Công thức tọa độ y bounding box sửa đổi của YOLOv5 Công thức chiều rộng bounding box sửa đổi của YOLOv5 Công thức chiều cao bounding box sửa đổi của YOLOv5

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

YOLOv5 grid scaling

So sánh tỷ lệ thay đổi chiều cao và chiều rộng (tương đối với anchor) trước và sau khi điều chỉnh. Các phương trình box yolo/darknet gốc có một lỗ hổng 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 bùng nổ, mất ổn định, loss NaN và cuối cùng là hoàn toàn mất khả năng huấn luyện. Tham khảo vấn đề này để biết thêm chi tiết.

YOLOv5 unbounded scaling

4.4 Xây dựng mục tiêu

Quy 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 ground truth box vào các ô lưới thích hợp trong bản đồ đầu ra và khớp chúng với các anchor box phù hợp.

Quy trình này tuân theo các bước sau:

  • Tính toán tỷ lệ giữa kích thước ground truth box và kích thước của mỗi anchor mẫu.

Công thức tỷ lệ chiều rộng ground truth với anchor

Công thức tỷ lệ chiều cao ground truth với anchor

Công thức tỷ lệ chiều rộng tối đa

Công thức tỷ lệ chiều cao tối đa

Công thức tỷ lệ tối đa tổng thể

Công thức ngưỡng khớp anchor

YOLOv5 IoU computation
  • Nếu tỷ lệ tính toán nằm trong ngưỡng, hãy khớp ground truth box với anchor tương ứng.
YOLOv5 grid overlap
  • Gán anchor đã khớp vào các ô thích hợp, lưu ý rằng do độ lệch điểm tâm được sửa đổi, một ground truth box có thể được gán cho nhiều hơn một anchor vì phạm vi độ lệch điểm tâm được điều chỉnh từ (0, 1) thành (-0.5, 1.5), giúp các kết quả khớp bổ sung trở nên khả thi.
YOLOv5 anchor selection

Bằng cách này, quy trình xây dựng mục tiêu đả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 tác vụ phát hiện đối tượng hiệu quả hơn.

Kết luận

YOLOv5 đại diện cho một bước tiến ý nghĩa trong sự phát triển của phát hiện đối tượng thời gian thực. Các lựa chọn kiến trúc, chiến lược huấn luyện và tinh chỉnh kỹ thuật của nó mang lại hiệu suất và hiệu quả mạnh mẽ so với các phiên bản YOLO trước đó.

Những cải tiến chính trong YOLOv5 bao gồm việc sử dụng kiến trúc năng động, phạm vi kỹ thuật tăng cường dữ liệu mở rộng, 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 tính toán loss và quy trình xây dựng mục tiêu. Tất cả những đổi mới này cải thiện đáng kể độ chính xác và hiệu quả của phát hiện đối tượng trong khi vẫn giữ được tốc độ cao, vốn là thương hiệu của các mô hình YOLO.

Bình luận