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 nhiều lĩnh vực, 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,
SPPF
vàNew 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 Giới thiệu một số thay đổi nhỏ so với người tiền nhiệm của nó:
- 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ột6x6 Conv2d
cấu trúc. Thay đổi này giúp tăng hiệu quả #4825. - Các
SPP
Cấu trúc được thay thế bằngSPPF
. Sự thay đổi này tăng hơn gấp đôi tốc độ xử lý.
Để kiểm tra tốc độ của SPP
và SPPF
, 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()
2. 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 và giảm tình trạng quá khớp của mô hình. Các kỹ thuật này bao gồm:
Tăng cường khảm : 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 nhiều tỷ lệ và phép dịch chuyển đối tượng khác nhau.
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ả.
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.
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.
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.
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.
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.
- Bộ lập lịch Warmup và Cosine LR : Một phương pháp điều chỉnh tốc độ học để 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 độ chính xác một nửa, giảm việ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 đượ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.
Hàm mất mát tổng thể được mô tả bởi:
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.
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.
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ông thức sửa đổi để tính toán hộp giới hạn dự đoán như sau:
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.
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
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ó bao gồm việc chỉ định các hộp sự thật cơ bản 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.
- 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.
- 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.
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.