Ultralytics YOLOv5 Ngành 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
YOLOv5 Kiến trúc của 'bao gồm ba phần chính:
- xương sống: Đây là phần chính của mạng lưới. Đối với 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ác cấu trúc được sử dụng. - Cái đầu: Phần này có nhiệm vụ tạo ra kết quả đầu ra cuối cùng. YOLOv5 sử dụng
YOLOv3 Head
vì mục đích này.
Cấu trúc của mô hình được mô tả trong hình ảnh bên dưới. 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 phiên bản trước:
- 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. Sự thay đổi này thúc đẩy hiệu quả #4825. - Các
SPP
cấu trúc được thay thế bằngSPPF
. Sự thay đổi này làm tăng gấp đôi tốc độ xử lý.
Để kiểm tra tốc độ của SPP
Và SPPF
, có thể sử dụng đoạn mã sau:
Ví dụ về cấu hình tốc độ SPP so với SPFF (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 bằng cách 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 đào tạo mới.
-
Biến đổi affine ngẫu nhiên : Bao gồm phép quay, biến đổi tỷ lệ, tịnh tiến và cắt ảnh 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 hai hình ảnh và 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 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 lật ngẫu nhiên 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 thang đo : 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 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 dữ liệu thực tế 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 của mô hình.
- Đường trung bình động theo hàm mũ (EMA) : Một chiến lược sử dụng giá trị trung bình của các tham số trong các bước trước đó để ổn định quá trình đào tạo và giảm lỗi tổng quát.
- Đà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.
- Sự tiến hóa của siêu tham số : Một chiến lược tự động điều chỉnh 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ính toán tổn thất
Sự mất mát trong YOLOv5 được tính toán như là sự kết hợp của ba thành phần mất mát riêng lẻ:
- Mất lớp (Mất BCE) : Mất entropy chéo nhị phân, đo lỗi cho tác vụ phân loại.
- Mất tính đối tượng (Mất BCE) : Một mất mát nhị phân chéo khác, tính toán lỗi trong việc phát hiện xem một đối tượng có hiện diện trong một ô lưới cụ thể hay không.
- Mất vị trí (Mất CIoU) : Mất IoU hoàn toàn, đo lỗi trong việc xác định vị trí đối tượng trong ô lưới.
Hàm mất mát tổng thể được mô tả bởi:
4.2 Mất cân bằng
Sự mất mát tính đối tượng của ba lớp dự đoán (P3
, P4
, P5
) được cân nhắc khác nhau. Trọng lượng 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 sẽ góp phần thích hợp vào tổng thiệt hại.
4.3 Loại bỏ độ nhạy lưới điện
Các YOLOv5 kiến trúc tạo ra 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 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 của lưới và ngăn mô hình dự đoán các 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 độ lệch điểm trung tâm được điều chỉnh từ (0, 1) đến (-0,5, 1,5). Do đó, độ lệch có thể dễ dàng đạt 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 Các phương trình hộp /darknet 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 chỉ đơ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 mất kiểm soát, mất ổn định, mất NaN và cuối cùng là mất hoàn toàn quá trình đà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 diễn ra theo các bước sau:
- Tính tỷ lệ kích thước hộp thực 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 ghép hộp sự thật thực tế với mỏ neo tương ứng.
- Gán neo khớp với các ô thích hợp, lưu ý rằng do độ lệch điểm trung tâm đã được sửa đổi, hộp sự thật cơ bản có thể được gán cho nhiều neo hơn một. Vì phạm vi độ lệch điểm trung tâm được điều chỉnh từ (0, 1) đến (-0,5, 1,5). Hộp GT có thể được gán cho nhiều neo hơn.
Theo 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 thực tế được chỉ định và khớp đúng trong quá trình đào tạo, cho phép YOLOv5 để học nhiệm vụ phát hiện đối tượng hiệu quả hơn.
Phần kết luận
Tóm lại, YOLOv5 đại diện cho một bước tiến đáng kể 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 trội hơn các phiên bản trước của YOLO gia đình về 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, các 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 cải tiến 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 duy trì tốc độ cao, đó là đặc điểm của YOLO mô hình.