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

Ultralytics YOLOv5 Kiến trúc

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 YOLOv5 kiến trúc, chiến lược tăng cường dữ liệu, phương pháp đào tạo và kỹ thuật tính toán tổn thất. 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

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 Sử dụng các 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 và giảm overfitting của mô hình. Những 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 đào tạo thành một theo 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 quy mô và bản dịch đối tượng khác nhau.

    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.
  • Khởi động và lập lịch Cosine LR: Một phương pháp để điều chỉnh tốc độ học tập để nâng cao hiệu suất mô hình.
  • Đườ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.
  • Đào tạo chính xác hỗn hợp: Một phương pháp để thực hiện các hoạt động ở định dạng nửa chính xác, giảm sử dụng bộ nhớ và tăng cườ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 đượ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.

Chức năng tổn thất tổng thể được mô tả bởi:

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.

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

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

Quá trình xây dựng mục tiêu trong YOLOv5 rất quan trọng đối với hiệu quả đào tạo và độ chính xác của mô hình. Nó liên quan đến việc gán các hộp sự thật mặt đất 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.

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 2023-11-12, Updated 2024-06-19
Authors: ambitious-octopus (1), glenn-jocher (9), sergiuwaxmann (1)

Ý kiến