Bỏ để qua phần nội dung

Ultralytics YOLOv5 Kiến trúc

YOLOv5 (v6.0/6.1) is a powerful object detection algorithm developed by Ultralytics. This article dives deep into the YOLOv5 architecture, data augmentation strategies, training methodologies, and loss computation techniques. This comprehensive understanding will help improve your practical application of object detection in various fields, including surveillance, autonomous vehicles, and image recognition.

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

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

  • Xương sống: Đây là cơ quan chính của mạng. Cho YOLOv5, xương sống được thiết kế bằng cách sử dụng New CSP-Darknet53 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.
  • Cổ: Phần này kết nối xương sống và đầu. Trong YOLOv5, SPPFNew CSP-PAN cấu trúc được sử dụng.
  • Đầu: 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. Các 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ố thay đổi nhỏ so với người tiền nhiệm của nó:

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

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

Ví dụ về hồ sơ tốc độ SPP vs 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. Kỹ thuật tăng cường dữ liệu

YOLOv5 employs various data augmentation techniques to improve the model's ability to generalize and reduce overfitting. These techniques include:

  • Mosaic Augmentation: An image processing technique that combines four training images into one in ways that encourage object detection models to better handle various object scales and translations.

    mosaic

  • Tăng cường sao chép-dán: Một phương pháp tăng cường dữ liệu sáng tạo 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 được chọn ngẫu nhiên khác, tạo ra một mẫu đào tạo mới một cách hiệu quả.

    Sao chép-dán

  • Biến đổi affine ngẫu nhiên: Điều này bao gồm xoay ngẫu nhiên, chia tỷ lệ, dịch và cắt hình ảnh.

    affine ngẫu nhiên

  • MixUp Augmentation: Một phương pháp tạo ra hình ảnh tổng hợp bằng cách kế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.

    Trộn lẫn

  • 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ăng cường HSV: Thay đổi ngẫu nhiên đối với Màu sắc, Độ bão hòa và Giá trị của hình ảnh.

    HSV

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

    lật ngang

3. Chiến lược đào tạo

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

  • Đào tạo đa cấp độ: 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 ban đầu của chúng trong quá trình đào tạo.
  • AutoAnchor: Chiến lược này tối ưu hóa các hộp neo trước đó để phù hợp với các đặc điểm thống kê của các hộp sự thật cơ bản trong dữ liệu tùy chỉnh của bạn.
  • Warmup and Cosine LR Scheduler: A method to adjust the learning rate to enhance model performance.
  • Đường trung bình động hàm mũ (EMA): Một chiến lược sử dụng trung bình của các tham số trong các bước trước đây để ổn định quá trình đào tạo và giảm lỗi khái quát hóa.
  • Mixed Precision Training: A method to perform operations in half-precision format, reducing memory usage and enhancing computational speed.
  • Hyperparameter Evolution: 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.

4. Các tính năng bổ sung

4.1 Tổn thất điện toán

Sự mất mát trong YOLOv5 được tính là sự kết hợp của ba thành phần tổn thất riêng lẻ:

  • Class Loss (BCE Loss): Binary Cross-Entropy loss, đo sai số cho nhiệm vụ phân loại.
  • Mất tính khách quan (Mất BCE): Một tổn thất entropy chéo nhị phân khác, tính toán lỗi trong việc phát hiện xem một đối tượng có mặt trong một ô lưới cụ thể hay không.
  • Mất vị trí (CIoU Loss): Mất IoU hoàn toàn, đo lỗi trong việc bản địa hóa đối tượng trong ô lưới.

The overall loss function is depicted by:

tổn thất

4.2 Tổn thất số dư

Tổn thất tính khách quan 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à [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 quy mô khác nhau đóng góp thích hợp vào tổng tổn thất.

obj_loss

4.3 Loại bỏ độ nhạy lưới

Các YOLOv5 Kiến trúc 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 trước của YOLO. 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 lớp cuối cùng.

b_x b_y b_w b_h

YOLOv5 Tính toán lưới

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 lưới và ngăn mô hình dự đoán kích thước hộp không giới hạn.

The revised formulas for calculating the predicted bounding box are as follows:

Bx bằng cách Bw Bh

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

YOLOv5 Mở rộng quy mô lưới

So sánh tỷ lệ chiều cao và chiều rộng (so với neo) trước và sau khi điều chỉnh. Bản gốc yolo/Phương trình hộp darknet 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ị ràng buộc 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 độ dốc chạy trốn, không ổn định, mất NaN và cuối cùng là mất hoàn toàn đào tạo. Tham khảo vấn đề này

YOLOv5 Mở rộng quy mô không giới hạn

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

The build target process in YOLOv5 is critical for training efficiency and model accuracy. It involves assigning ground truth boxes to the appropriate grid cells in the output map and matching them with the appropriate anchor boxes.

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

  • Tính tỷ lệ kích thước hộp sự thật nối đất và kích thước của mỗi mẫu neo.

Rw

Rh

RWMAX

Rhmax

Rmax

diêm

YOLOv5 Tính toán IoU

  • Nếu tỷ lệ tính toán nằm trong ngưỡng, hãy khớp hộp sự thật mặt đất với neo tương ứng.

YOLOv5 Chồng chéo lưới

  • Chỉ định neo phù hợp cho các ô thích hợp, hãy nhớ rằng do độ lệch điểm trung tâm đã sửa đổi, một hộp sự thật nối đất có thể được gán cho nhiều hơn một neo. Bởi vì phạm vi bù điểm trung tâm được điều chỉnh từ (0, 1) đến (-0,5, 1,5). GT Box có thể được gán cho nhiều neo hơn.

YOLOv5 Lựa chọn neo

Bằng cách này, quá trình xây dựng mục tiêu đảm bảo rằng mỗi đối tượng chân lý mặt đất được chỉ định và khớp đúng cách trong quá trình đào tạo, cho phép YOLOv5 để tìm hiểu nhiệm vụ phát hiện đối tượng hiệu quả hơn.

Kết thúc

Cho hay YOLOv5 đại diện cho một bước tiến quan trọng trong việc phát triển các mô hình phát hiện đối tượng 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 đào tạo, nó vượt qua các phiên bản trước của YOLO gia đình trong hiệu suất và hiệu quả.

Những 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, chiến lược đào tạo sáng tạo, cũng như các điều chỉnh quan trọng trong tổn thất tính toán và quá 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, đó là thương hiệu của YOLO Mô hình.


📅 Created 11 months ago ✏️ Updated 17 days ago

Ý kiến