Meet YOLO26: next-gen vision AI.

Link to this sectionKiến trúc YOLOv5 của Ultralytics#

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, phương pháp huấn luyện và các kỹ thuật tính toán hàm mất mát. 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ự hành và nhận diện hình ảnh.

Link to this sectionCấu trúc Model#

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ấ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 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 model được mô tả trong hình dưới đây. Chi tiết cấu trúc model 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. Thay đổi này giúp tăng tốc độ xử lý lên gấp đôi trong khi vẫn duy trì cùng một kết quả đầu ra.

Để kiểm tra tốc độ của SPPSPPF, đoạn mã sau đây 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

Link to this sectionCác kỹ thuật tăng cường dữ liệu#

YOLOv5 áp 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 model và giảm tình trạng 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 ảnh huấn luyện thành một, nhằm khuyến khích các model phát hiện đối tượng xử lý tốt hơn các quy mô và phép tịnh tiến đối tượng khác nhau.

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

  • 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 phần ngẫu nhiên từ một ảnh và dán chúng vào một ả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 Copy-Paste YOLOv5 cho phân đoạn thực thể

  • Random Affine Transformations: Bao gồm các phép xoay, thu phóng, tịnh tiến và cắt lệch ngẫu nhiên cho hình ảnh.

    Các phép biến đổi affine ngẫu nhiên YOLOv5 cho huấn luyện

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

    Tăng cường dữ liệu MixUp YOLOv5 kết hợp hai ảnh

  • Albumentations: Một thư viện tăng cường hình ảnh mạnh mẽ hỗ trợ nhiều loại kỹ thuật tăng cường. Tìm hiểu thêm về cách sử dụng các 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ị) của ảnh.

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

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

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

Link to this sectionChiế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 model. Các chiến lược bao gồm:

  • Multiscale Training: Các ảnh đầu vào được thay đổi kích thước ngẫu nhiên trong khoảng từ 0,5 đến 1,5 lần kích thước gốc 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 and Cosine LR Scheduler: Một phương pháp điều chỉnh tốc độ học để nâng cao hiệu suất model.
  • 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 phép toán ở đị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 điều chỉnh các siêu tham số để đạt hiệu suất tối ưu. Tìm hiểu thêm về tinh chỉnh siêu tham số.

Link to this sectionTính năng bổ sung#

Link to this section4.1 Tính toán hàm mất mát#

Hàm mất mát trong YOLOv5 được tính toán là sự kết hợp của ba thành phần 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 hàm 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ó hiện diệ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 trong ô lưới.

Hàm mất mát tổng thể được biểu diễn bởi:

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

Link to this section4.2 Cân bằng hàm mất mát#

Các hàm mất mát objectness của ba lớp dự đoán (P3, P4, P5) được trọng số khác nhau. 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 hàm mất mát.

Công thức cân bằng hàm mất mát objectness YOLOv5

Link to this section4.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 của bounding box Công thức dự đoán tọa độ y của bounding box Công thức dự đoán chiều rộng của bounding box Công thức dự đoán chiều cao của 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 model dự đoán các kích thước box không 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 trung tâm trước và sau khi thu phóng. 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 đạt 0 hoặc 1.

YOLOv5 grid scaling

So sánh tỷ lệ thu phóng chiều cao và chiều rộng (so 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ỗ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 đơn giản là out=exp(in), điều này rất nguy hiểm vì nó có thể dẫn đến các gradient không kiểm soát, sự mất ổn định, NaN loss và cuối cùng là mất hoàn toàn quá trình huấn luyện. Tham khảo vấn đề này để biết thêm chi tiết.

YOLOv5 unbounded scaling

Link to this section4.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 model. Nó bao gồm việc gán các ground truth box cho các ô lưới thích hợp trong bản đồ đầu ra và khớp chúng với các anchor box thích hợp.

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

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

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

Công thức tỷ lệ chiều cao ground truth so 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ệ được 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 cho các ô thích hợp, lưu ý rằng do độ lệch điểm trung tâm đã 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 trung tâm được điều chỉnh từ (0, 1) thành (-0.5, 1.5), làm cho các 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 chính xác 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.

Link to this sectionKết luận#

YOLOv5 đại diện cho một bước tiến có ý nghĩa trong sự phát triển của công nghệ phát hiện đối tượng thời gian thực. Các lựa chọn về kiến trúc, chiến lược huấn luyện và cải tiến 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 đó.

Các cải tiến chính trong YOLOv5 bao gồm việc sử dụng kiến trúc động, phạm vi kỹ thuật tăng cường dữ liệu rộng lớn, các chiến lược huấn luyện sáng tạo, cũng như những điều chỉnh quan trọng trong việc tính toán hàm mất mát 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 việc 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 model YOLO.

Người đóng góp

Bình luận