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

TensorRT Xuất khẩu cho YOLOv8 Mô hình

Việc triển khai các mô hình thị giác máy tính trong môi trường hiệu suất cao có thể yêu cầu một định dạng tối đa hóa tốc độ và hiệu quả. Điều này đặc biệt đúng khi bạn triển khai mô hình của mình trên NVIDIA GPU.

Bằng cách sử dụng TensorRT định dạng xuất, bạn có thể nâng cao các mô hình Ultralytics YOLOv8 của mình để suy luận nhanh chóng và hiệu quả NVIDIA phần cứng. Hướng dẫn này sẽ cung cấp cho bạn các bước dễ thực hiện cho quá trình chuyển đổi và giúp bạn tận dụng tối đa NVIDIA công nghệ tiên tiến trong các dự án học sâu của bạn.

TensorRT

TensorRT Tổng quan

TensorRT , được phát triển bởi NVIDIA , là một bộ phát triển phần mềm (SDK) tiên tiến được thiết kế để suy luận học sâu tốc độ cao. Nó rất phù hợp cho các ứng dụng thời gian thực như phát hiện đối tượng .

Bộ công cụ này tối ưu hóa các mô hình deep learning cho NVIDIA GPU và kết quả là hoạt động nhanh hơn và hiệu quả hơn. TensorRT Mô hình trải qua TensorRT tối ưu hóa, bao gồm các kỹ thuật như hợp nhất lớp, hiệu chuẩn chính xác (INT8 và FP16), động tensor Quản lý bộ nhớ và tự động điều chỉnh kernel. Chuyển đổi các mô hình deep learning thành TensorRT Định dạng cho phép các nhà phát triển nhận ra tiềm năng của NVIDIA GPU đầy đủ.

TensorRT được biết đến với khả năng tương thích với nhiều định dạng mô hình khác nhau, bao gồm TensorFlow , PyTorch và ONNX , cung cấp cho các nhà phát triển giải pháp linh hoạt để tích hợp và tối ưu hóa các mô hình từ các khuôn khổ khác nhau. Tính linh hoạt này cho phép triển khai mô hình hiệu quả trên nhiều môi trường phần cứng và phần mềm khác nhau.

Các tính năng chính của TensorRT Mô hình

TensorRT Các mô hình cung cấp một loạt các tính năng chính góp phần vào hiệu quả và hiệu quả của chúng trong suy luận deep learning tốc độ cao:

  • Hiệu chuẩn chính xác: TensorRT Hỗ trợ hiệu chuẩn chính xác, cho phép các mô hình được tinh chỉnh cho các yêu cầu độ chính xác cụ thể. Điều này bao gồm hỗ trợ giảm các định dạng chính xác như INT8 và FP16, có thể tăng thêm tốc độ suy luận trong khi vẫn duy trì mức độ chính xác chấp nhận được.

  • Layer Fusion : Sự kết hợp lớp TensorRT quá trình tối ưu hóa bao gồm hợp nhất lớp, trong đó nhiều lớp của mạng nơ-ron được kết hợp thành một hoạt động duy nhất. Điều này làm giảm chi phí tính toán và cải thiện tốc độ suy luận bằng cách giảm thiểu truy cập bộ nhớ và tính toán.

TensorRT Lớp Fusion

  • Năng động Tensor Quản lý bộ nhớ: TensorRT Quản lý hiệu quả tensor Sử dụng bộ nhớ trong quá trình suy luận, giảm chi phí bộ nhớ và tối ưu hóa phân bổ bộ nhớ. Điều này dẫn đến hiệu quả hơn GPU sử dụng bộ nhớ.

  • Điều chỉnh hạt nhân tự động: TensorRT Áp dụng điều chỉnh hạt nhân tự động để chọn tối ưu nhất GPU hạt nhân cho mỗi lớp của mô hình. Cách tiếp cận thích ứng này đảm bảo rằng mô hình tận dụng tối đa lợi thế của GPUsức mạnh tính toán của nó.

Tùy chọn triển khai trong TensorRT

Trước khi chúng ta xem xét mã để xuất YOLOv8 mô hình cho TensorRT định dạng, hãy hiểu ở đâu TensorRT Mô hình thường được sử dụng.

TensorRT Cung cấp một số tùy chọn triển khai và mỗi tùy chọn cân bằng giữa tính dễ tích hợp, tối ưu hóa hiệu suất và tính linh hoạt khác nhau:

  • Triển khai trong TensorFlow : Phương pháp này tích hợp TensorRT vào trong TensorFlow , cho phép các mô hình được tối ưu hóa chạy trong một TensorFlow môi trường. Nó hữu ích cho các mô hình có sự kết hợp giữa các lớp được hỗ trợ và không được hỗ trợ, vì TF -TRT có thể xử lý những vấn đề này một cách hiệu quả.

TensorRT Tổng quan

  • Độc lập TensorRT API thời gian chạy: Cung cấp khả năng kiểm soát chi tiết, lý tưởng cho các ứng dụng quan trọng về hiệu suất. Nó phức tạp hơn nhưng cho phép triển khai tùy chỉnh các toán tử không được hỗ trợ.

  • NVIDIA Triton Inference Server: Một tùy chọn hỗ trợ các mô hình từ các framework khác nhau. Đặc biệt thích hợp cho suy luận đám mây hoặc biên, nó cung cấp các tính năng như thực thi mô hình đồng thời và phân tích mô hình.

Xuất khẩu YOLOv8 Mô hình để TensorRT

Bạn có thể cải thiện hiệu quả thực thi và tối ưu hóa hiệu suất bằng cách chuyển đổi YOLOv8 mô hình để TensorRT định dạng.

Cài đặt

Để cài đặt gói yêu cầu, hãy chạy:

Cài đặt

# Install the required package for YOLOv8
pip install ultralytics

Để biết hướng dẫn chi tiết và các phương pháp hay nhất liên quan đến quá trình cài đặt, hãy kiểm tra YOLOv8 Hướng dẫn cài đặt. Trong khi cài đặt các gói cần thiết cho YOLOv8, nếu bạn gặp bất kỳ khó khăn nào, hãy tham khảo hướng dẫn Các vấn đề thường gặp của chúng tôi để biết các giải pháp và mẹo.

Sử dụng

Trước khi đi sâu vào hướng dẫn sử dụng, hãy chắc chắn kiểm tra phạm vi của YOLOv8 Mô hình được cung cấp bởi Ultralytics. Điều này sẽ giúp bạn chọn mô hình phù hợp nhất cho yêu cầu dự án của bạn.

Sử dụng

from ultralytics import YOLO

# Load the YOLOv8 model
model = YOLO("yolov8n.pt")

# Export the model to TensorRT format
model.export(format="engine")  # creates 'yolov8n.engine'

# Load the exported TensorRT model
tensorrt_model = YOLO("yolov8n.engine")

# Run inference
results = tensorrt_model("https://ultralytics.com/images/bus.jpg")
# Export a YOLOv8n PyTorch model to TensorRT format
yolo export model=yolov8n.pt format=engine  # creates 'yolov8n.engine''

# Run inference with the exported model
yolo predict model=yolov8n.engine source='https://ultralytics.com/images/bus.jpg'

Để biết thêm chi tiết về quy trình xuất, hãy truy cập Ultralytics trang tài liệu về xuất khẩu.

Xuất khẩu TensorRT với INT8 Quantization

Xuất khẩu Ultralytics YOLO mô hình sử dụng TensorRT với độ chính xác INT8 thực hiện lượng tử hóa sau đào tạo (PTQ). TensorRT sử dụng hiệu chuẩn cho PTQ, đo lường sự phân bố các kích hoạt trong mỗi kích hoạt tensor như là YOLO mô hình xử lý suy luận trên dữ liệu đầu vào đại diện, sau đó sử dụng phân phối đó để ước tính giá trị tỷ lệ cho từng tensor . Mỗi lần kích hoạt tensor đó là một ứng cử viên cho lượng tử hóa có thang đo liên quan được suy ra bằng một quá trình hiệu chuẩn.

Khi xử lý các mạng lượng tử hóa ngầm TensorRT sử dụng INT8 cơ hội để tối ưu hóa thời gian thực thi lớp. Nếu một lớp chạy nhanh hơn trong INT8 và đã gán thang đo lượng tử hóa trên đầu vào và đầu ra dữ liệu của nó, thì một hạt nhân có độ chính xác INT8 được gán cho lớp đó, nếu không TensorRT chọn độ chính xác của FP32 hoặc FP16 cho hạt nhân dựa trên bất kỳ kết quả nào dẫn đến thời gian thực thi nhanh hơn cho lớp đó.

Mẹo

Điều quan trọng là phải đảm bảo rằng cùng một thiết bị sẽ sử dụng TensorRT trọng lượng mô hình để triển khai được sử dụng để xuất với độ chính xác INT8, vì kết quả hiệu chuẩn có thể khác nhau giữa các thiết bị.

Cấu hình INT8 Export

Các đối số được cung cấp khi sử dụng xuất khẩu cho một Ultralytics YOLO Mô hình sẽ Rất nhiều ảnh hưởng đến hiệu suất của mô hình xuất khẩu. Chúng cũng sẽ cần được chọn dựa trên tài nguyên thiết bị có sẵn, tuy nhiên các đối số mặc định nên Làm việc cho hầu hết Ampe (hoặc mới hơn) NVIDIA GPU rời. Thuật toán hiệu chuẩn được sử dụng là "ENTROPY_CALIBRATION_2" Và bạn có thể đọc thêm chi tiết về các tùy chọn có sẵn trong TensorRT Hướng dẫn dành cho nhà phát triển. Ultralytics Các xét nghiệm cho thấy "ENTROPY_CALIBRATION_2" là sự lựa chọn tốt nhất và xuất khẩu được cố định để sử dụng thuật toán này.

  • workspace : Kiểm soát kích thước (tính bằng GiB) của phân bổ bộ nhớ thiết bị trong khi chuyển đổi trọng số mô hình.

    • Điều chỉnh workspace Giá trị theo nhu cầu hiệu chuẩn và tính sẵn có của tài nguyên. Trong khi lớn hơn workspace có thể tăng thời gian hiệu chuẩn, nó cho phép TensorRT để khám phá nhiều chiến thuật tối ưu hóa hơn, có khả năng nâng cao hiệu suất mô hình và sự chính xác. Ngược lại, một nhỏ hơn workspace có thể làm giảm thời gian hiệu chuẩn nhưng có thể hạn chế các chiến lược tối ưu hóa, ảnh hưởng đến chất lượng của mô hình lượng tử hóa.

    • Mặc định là workspace=4 (GiB), giá trị này có thể cần phải được tăng lên nếu hiệu chuẩn gặp sự cố (thoát mà không có cảnh báo).

    • TensorRT sẽ báo cáo UNSUPPORTED_STATE trong quá trình xuất nếu giá trị cho workspace lớn hơn bộ nhớ có sẵn cho thiết bị, có nghĩa là giá trị cho workspace nên hạ xuống.

    • Nếu workspace được đặt thành giá trị tối đa và hiệu chuẩn không thành công/sự cố, hãy xem xét giảm các giá trị cho imgszbatch để giảm yêu cầu bộ nhớ.

    • Hãy nhớ rằng hiệu chuẩn cho INT8 là cụ thể cho từng thiết bị, vay mượn một "cao cấp" GPU Để hiệu chuẩn, có thể dẫn đến hiệu suất kém khi suy luận được chạy trên một thiết bị khác.

  • batch : Kích thước lô tối đa sẽ được sử dụng để suy luận. Trong quá trình suy luận, các lô nhỏ hơn có thể được sử dụng, nhưng suy luận sẽ không chấp nhận các lô lớn hơn những gì được chỉ định.

Ghi

Trong quá trình hiệu chuẩn, hai lần batch Kích thước cung cấp sẽ được sử dụng. Sử dụng các lô nhỏ có thể dẫn đến tỷ lệ không chính xác trong quá trình hiệu chuẩn. Điều này là do quá trình điều chỉnh dựa trên dữ liệu mà nó nhìn thấy. Các lô nhỏ có thể không nắm bắt được đầy đủ các giá trị, dẫn đến các vấn đề với hiệu chuẩn cuối cùng, do đó, batch kích thước được nhân đôi tự động. Nếu không kích thước lô được chỉ định batch=1, hiệu chuẩn sẽ được chạy tại batch=1 * 2 để giảm lỗi thay đổi quy mô hiệu chuẩn.

Thử nghiệm bởi NVIDIA khiến họ khuyên bạn nên sử dụng ít nhất 500 hình ảnh hiệu chuẩn đại diện cho dữ liệu cho mô hình của bạn, với hiệu chuẩn lượng tử hóa INT8. Đây là một hướng dẫn và không phải là một cứng yêu cầu, và Bạn sẽ cần phải thử nghiệm với những gì được yêu cầu để thực hiện tốt cho tập dữ liệu của bạn. Vì dữ liệu hiệu chuẩn là cần thiết để hiệu chuẩn INT8 với TensorRT, hãy chắc chắn sử dụng data Lập luận khi int8=True cho TensorRT và sử dụng data="my_dataset.yaml", sẽ sử dụng hình ảnh từ Xác nhận để hiệu chỉnh với. Khi không có giá trị nào được truyền cho data với xuất khẩu sang TensorRT với lượng tử hóa INT8, mặc định sẽ là sử dụng một trong các Bộ dữ liệu ví dụ "nhỏ" dựa trên tác vụ mô hình thay vì ném lỗi.

Ví dụ

from ultralytics import YOLO

model = YOLO("yolov8n.pt")
model.export(
    format="engine",
    dynamic=True,  # (1)!
    batch=8,  # (2)!
    workspace=4,  # (3)!
    int8=True,
    data="coco.yaml",  # (4)!
)

# Load the exported TensorRT INT8 model
model = YOLO("yolov8n.engine", task="detect")

# Run inference
result = model.predict("https://ultralytics.com/images/bus.jpg")
  1. Xuất với trục động, điều này sẽ được bật theo mặc định khi xuất với int8=True ngay cả khi không được thiết lập rõ ràng. Xem Xuất đối số để biết thêm thông tin.
  2. Đặt kích thước lô tối đa là 8 cho kiểu máy đã xuất, hiệu chỉnh bằng batch = 2 * 8 để tránh lỗi chia tỷ lệ trong quá trình hiệu chuẩn.
  3. Phân bổ 4 GiB bộ nhớ thay vì phân bổ toàn bộ thiết bị cho quá trình chuyển đổi.
  4. Sử dụng bộ dữ liệu COCO để hiệu chuẩn, cụ thể là hình ảnh được sử dụng để xác thực (tổng cộng 5.000).
# Export a YOLOv8n PyTorch model to TensorRT format with INT8 quantization
yolo export model=yolov8n.pt format=engine batch=8 workspace=4 int8=True data=coco.yaml  # creates 'yolov8n.engine''

# Run inference with the exported TensorRT quantized model
yolo predict model=yolov8n.engine source='https://ultralytics.com/images/bus.jpg'
Bộ nhớ cache hiệu chuẩn

TensorRT sẽ tạo ra hiệu chuẩn .cache có thể được sử dụng lại để tăng tốc độ xuất trọng lượng mô hình trong tương lai bằng cách sử dụng cùng một dữ liệu, nhưng điều này có thể dẫn đến hiệu chuẩn kém khi dữ liệu khác nhau rất nhiều hoặc nếu batch Giá trị được thay đổi mạnh mẽ. Trong những trường hợp này, hiện tại .cache nên được đổi tên và chuyển sang một thư mục khác hoặc bị xóa hoàn toàn.

Ưu điểm của việc sử dụng YOLO với TensorRT INT8

  • Giảm kích thước mô hình: Lượng tử hóa từ FP32 đến INT8 có thể làm giảm kích thước mô hình xuống 4x (trên đĩa hoặc trong bộ nhớ), dẫn đến thời gian tải xuống nhanh hơn. yêu cầu lưu trữ thấp hơn và giảm dung lượng bộ nhớ khi triển khai mô hình.

  • Tiêu thụ điện năng thấp hơn: Giảm hoạt động chính xác cho xuất INT8 YOLO các mô hình có thể tiêu thụ ít năng lượng hơn so với các mẫu FP32, đặc biệt là đối với các thiết bị chạy bằng pin.

  • Cải thiện tốc độ suy luận: TensorRT tối ưu hóa mô hình cho phần cứng mục tiêu, có khả năng dẫn đến tốc độ suy luận nhanh hơn trên GPU, thiết bị nhúng và bộ tăng tốc.

Lưu ý về tốc độ suy luận

Một vài cuộc gọi suy luận đầu tiên với một mô hình được xuất sang TensorRT INT8 có thể được dự kiến sẽ có thời gian tiền xử lý, suy luận và / hoặc xử lý hậu kỳ lâu hơn bình thường. Điều này cũng có thể xảy ra khi thay đổi imgsz trong quá trình suy luận, đặc biệt là khi imgsz không giống như những gì đã được chỉ định trong quá trình xuất khẩu (xuất khẩu imgsz được đặt là TensorRT hồ sơ "tối ưu").

Hạn chế của việc sử dụng YOLO với TensorRT INT8

  • Giảm số liệu đánh giá: Sử dụng độ chính xác thấp hơn sẽ có nghĩa là mAP, Precision, Recall hoặc bất kỳ Các chỉ số khác được sử dụng để đánh giá hiệu suất mô hình có khả năng sẽ có phần tồi tệ hơn. Xem Phần kết quả hoạt động để so sánh sự khác biệt trong mAP50mAP50-95 khi xuất với INT8 trên mẫu nhỏ của các thiết bị khác nhau.

  • Tăng thời gian phát triển: Việc tìm kiếm các cài đặt "tối ưu" để hiệu chuẩn INT8 cho tập dữ liệu và thiết bị có thể mất một lượng thử nghiệm đáng kể.

  • Phụ thuộc phần cứng: Hiệu chuẩn và tăng hiệu suất có thể phụ thuộc nhiều vào phần cứng và trọng lượng mô hình ít chuyển nhượng hơn.

Ultralytics YOLO TensorRT Hiệu suất xuất khẩu

NVIDIA A100

Hiệu năng

Đã thử nghiệm với Ubuntu 22.04.3 LTS, python 3.10.12, ultralytics==8.2.4, tensorrt==8.6.1.post1

Xem Tài liệu phát hiện để biết các ví dụ sử dụng với các mô hình này được đào tạo về COCO, bao gồm 80 lớp được đào tạo trước.

Ghi

Thời gian suy luận được hiển thị cho mean, min (nhanh nhất), và max (chậm nhất) cho mỗi bài kiểm tra sử dụng trọng lượng được đào tạo trước yolov8n.engine

Chính xácXét nghiệm Evaltrung bình
(Cô)
tối thiểu | Max
(Cô)
bản đồVal
50 (B)
bản đồVal
50-95 (B)
batchkích thước
(điểm ảnh)
FP32Dự đoán0.520,51 | 0.568640
FP32COCOval0.520.520.371640
FP16Dự đoán0.340.34 | 0.418640
FP16COCOval0.330.520.371640
INT8Dự đoán0.280.27 | 0.318640
INT8COCOval0.290.470.331640

Xem Tài liệu phân đoạn để biết các ví dụ sử dụng với các mô hình này được đào tạo về COCO, bao gồm 80 lớp được đào tạo trước.

Ghi

Thời gian suy luận được hiển thị cho mean, min (nhanh nhất), và max (chậm nhất) cho mỗi bài kiểm tra sử dụng trọng lượng được đào tạo trước yolov8n-seg.engine

Chính xácXét nghiệm Evaltrung bình
(Cô)
tối thiểu | Max
(Cô)
bản đồVal
50 (B)
bản đồVal
50-95 (B)
bản đồVal
50 (M)
bản đồVal
50-95 (M)
batchkích thước
(điểm ảnh)
FP32Dự đoán0.620.61 | 0.688640
FP32COCOval0.630.520.360.490.311640
FP16Dự đoán0.400.39 | 0.448640
FP16COCOval0.430.520.360.490.301640
INT8Dự đoán0.340.33 | 0.378640
INT8COCOval0.360.460.320.430.271640

Xem Tài liệu phân loại để biết các ví dụ sử dụng với các mô hình này được đào tạo trên ImageNet, bao gồm 1000 lớp được đào tạo trước.

Ghi

Thời gian suy luận được hiển thị cho mean, min (nhanh nhất), và max (chậm nhất) cho mỗi bài kiểm tra sử dụng trọng lượng được đào tạo trước yolov8n-cls.engine

Chính xácXét nghiệm Evaltrung bình
(Cô)
tối thiểu | Max
(Cô)
Top 1Top 5batchkích thước
(điểm ảnh)
FP32Dự đoán0.260.25 | 0.288640
FP32ImageNetval0.260.350.611640
FP16Dự đoán0.180,17 | 0.198640
FP16ImageNetval0.180.350.611640
INT8Dự đoán0.160.15 | 0.578640
INT8ImageNetval0.150.320.591640

Xem Tài liệu ước tính tư thế để biết các ví dụ sử dụng với các mô hình này được đào tạo về COCO, bao gồm 1 lớp được đào tạo trước, "người".

Ghi

Thời gian suy luận được hiển thị cho mean, min (nhanh nhất), và max (chậm nhất) cho mỗi bài kiểm tra sử dụng trọng lượng được đào tạo trước yolov8n-pose.engine

Chính xácXét nghiệm Evaltrung bình
(Cô)
tối thiểu | Max
(Cô)
bản đồVal
50 (B)
bản đồVal
50-95 (B)
bản đồVal
50 (P)
bản đồVal
50-95 (P)
batchkích thước
(điểm ảnh)
FP32Dự đoán0.540.53 | 0.588640
FP32COCOval0.550.910.690.800.511640
FP16Dự đoán0.370.35 | 0.418640
FP16COCOval0.360.910.690.800.511640
INT8Dự đoán0.290.28 | 0.338640
INT8COCOval0.300.900.680.780.471640

Xem Tài liệu phát hiện theo hướng để biết các ví dụ sử dụng với các mô hình này được đào tạo trên DOTAv1, bao gồm 15 lớp được đào tạo trước.

Ghi

Thời gian suy luận được hiển thị cho mean, min (nhanh nhất), và max (chậm nhất) cho mỗi bài kiểm tra sử dụng trọng lượng được đào tạo trước yolov8n-obb.engine

Chính xácXét nghiệm Evaltrung bình
(Cô)
tối thiểu | Max
(Cô)
bản đồVal
50 (B)
bản đồVal
50-95 (B)
batchkích thước
(điểm ảnh)
FP32Dự đoán0.520,51 | 0.598640
FP32DOTAv1val0.760.500.361640
FP16Dự đoán0.340.33 | 0.428640
FP16DOTAv1val0.590.500.361640
INT8Dự đoán0.290.28 | 0.338640
INT8DOTAv1val0.320.450.321640

GPU tiêu dùng

Hiệu suất phát hiện (COCO)

Đã thử nghiệm với Windows 10.0.19045, python 3.10.9, ultralytics==8.2.4, tensorrt==10.0.0b6

Ghi

Thời gian suy luận được hiển thị cho mean, min (nhanh nhất), và max (chậm nhất) cho mỗi bài kiểm tra sử dụng trọng lượng được đào tạo trước yolov8n.engine

Chính xácXét nghiệm Evaltrung bình
(Cô)
tối thiểu | Max
(Cô)
bản đồVal
50 (B)
bản đồVal
50-95 (B)
batchkích thước
(điểm ảnh)
FP32Dự đoán1.060.75 | 1.888640
FP32COCOval1.370.520.371640
FP16Dự đoán0.620.75 | 1.138640
FP16COCOval0.850.520.371640
INT8Dự đoán0.520.38 | 1.008640
INT8COCOval0.740.470.331640

Đã thử nghiệm với Windows 10.0.22631, python 3.11.9, ultralytics==8.2.4, tensorrt==10.0.1

Ghi

Thời gian suy luận được hiển thị cho mean, min (nhanh nhất), và max (chậm nhất) cho mỗi bài kiểm tra sử dụng trọng lượng được đào tạo trước yolov8n.engine

Chính xácXét nghiệm Evaltrung bình
(Cô)
tối thiểu | Max
(Cô)
bản đồVal
50 (B)
bản đồVal
50-95 (B)
batchkích thước
(điểm ảnh)
FP32Dự đoán1.761,69 | 1.878640
FP32COCOval1.940.520.371640
FP16Dự đoán0.860.75 | 1.008640
FP16COCOval1.430.520.371640
INT8Dự đoán0.800.75 | 1.008640
INT8COCOval1.350.470.331640

Đã thử nghiệm với Pop!_OS 22.04 LTS, python 3.10.12, ultralytics==8.2.4, tensorrt==8.6.1.post1

Ghi

Thời gian suy luận được hiển thị cho mean, min (nhanh nhất), và max (chậm nhất) cho mỗi bài kiểm tra sử dụng trọng lượng được đào tạo trước yolov8n.engine

Chính xácXét nghiệm Evaltrung bình
(Cô)
tối thiểu | Max
(Cô)
bản đồVal
50 (B)
bản đồVal
50-95 (B)
batchkích thước
(điểm ảnh)
FP32Dự đoán2.842.84 | 2.858640
FP32COCOval2.940.520.371640
FP16Dự đoán1.091.09 | 1.108640
FP16COCOval1.200.520.371640
INT8Dự đoán0.750.74 | 0.758640
INT8COCOval0.760.470.331640

Thiết bị nhúng

Hiệu suất phát hiện (COCO)

Đã thử nghiệm với JetPack 6.0 (L4T 36.3) Ubuntu 22.04.4 LTS, python 3.10.12, ultralytics==8.2.16, tensorrt==10.0.1

Ghi

Thời gian suy luận được hiển thị cho mean, min (nhanh nhất), và max (chậm nhất) cho mỗi bài kiểm tra sử dụng trọng lượng được đào tạo trước yolov8n.engine

Chính xácXét nghiệm Evaltrung bình
(Cô)
tối thiểu | Max
(Cô)
bản đồVal
50 (B)
bản đồVal
50-95 (B)
batchkích thước
(điểm ảnh)
FP32Dự đoán6.116.10 | 6.298640
FP32COCOval6.170.520.371640
FP16Dự đoán3.183.18 | 3.208640
FP16COCOval3.190.520.371640
INT8Dự đoán2.302.29 | 2.358640
INT8COCOval2.320.460.321640

Thông tin

Xem của chúng tôi Hướng dẫn bắt đầu nhanh về NVIDIA Jetson với Ultralytics YOLO để tìm hiểu thêm về cách thiết lập và cấu hình.

Phương pháp đánh giá

Mở rộng các phần bên dưới để biết thông tin về cách các mô hình này được xuất và thử nghiệm.

Xuất cấu hình

Xem chế độ xuất để biết chi tiết về các đối số cấu hình xuất.

from ultralytics import YOLO

model = YOLO("yolov8n.pt")

# TensorRT FP32
out = model.export(format="engine", imgsz=640, dynamic=True, verbose=False, batch=8, workspace=2)

# TensorRT FP16
out = model.export(format="engine", imgsz=640, dynamic=True, verbose=False, batch=8, workspace=2, half=True)

# TensorRT INT8 with calibration `data` (i.e. COCO, ImageNet, or DOTAv1 for appropriate model task)
out = model.export(
    format="engine", imgsz=640, dynamic=True, verbose=False, batch=8, workspace=2, int8=True, data="coco8.yaml"
)
Vòng lặp dự đoán

Xem chế độ dự đoán để biết thêm thông tin.

import cv2

from ultralytics import YOLO

model = YOLO("yolov8n.engine")
img = cv2.imread("path/to/image.jpg")

for _ in range(100):
    result = model.predict(
        [img] * 8,  # batch=8 of the same image
        verbose=False,
        device="cuda",
    )
Cấu hình xác thực

Xem val chế độ để tìm hiểu thêm về các đối số cấu hình xác thực.

from ultralytics import YOLO

model = YOLO("yolov8n.engine")
results = model.val(
    data="data.yaml",  # COCO, ImageNet, or DOTAv1 for appropriate model task
    batch=1,
    imgsz=640,
    verbose=False,
    device="cuda",
)

Triển khai xuất khẩu YOLOv8 TensorRT Mô hình

Đã xuất thành công Ultralytics YOLOv8 mô hình để TensorRT , bây giờ bạn đã sẵn sàng để triển khai chúng. Để được hướng dẫn chuyên sâu về cách triển khai TensorRT Các mô hình trong các cài đặt khác nhau, hãy xem các tài nguyên sau:

Tóm tắt

Trong hướng dẫn này, chúng tôi tập trung vào việc chuyển đổi Ultralytics YOLOv8 mô hình để NVIDIA's TensorRT định dạng mô hình. Bước chuyển đổi này rất quan trọng để cải thiện hiệu quả và tốc độ của YOLOv8 mô hình, làm cho chúng hiệu quả hơn và phù hợp với môi trường triển khai đa dạng.

Để biết thêm thông tin về chi tiết sử dụng, hãy xem TensorRT Tài liệu chính thức.

Nếu bạn tò mò về bổ sung Ultralytics YOLOv8 Tích hợp, trang hướng dẫn tích hợp của chúng tôi cung cấp nhiều lựa chọn tài nguyên thông tin và thông tin chi tiết.

FAQ

Làm cách nào để chuyển đổi YOLOv8 mô hình để TensorRT định dạng?

Để chuyển đổi Ultralytics YOLOv8 mô hình để TensorRT Định dạng để tối ưu hóa NVIDIA GPU Suy luận, hãy làm theo các bước sau:

  1. Cài đặt gói yêu cầu:

    pip install ultralytics
    
  2. Xuất khẩu của bạn YOLOv8 Mô hình:

    from ultralytics import YOLO
    
    model = YOLO("yolov8n.pt")
    model.export(format="engine")  # creates 'yolov8n.engine'
    
    # Run inference
    model = YOLO("yolov8n.engine")
    results = model("https://ultralytics.com/images/bus.jpg")
    

Để biết thêm chi tiết, hãy truy cập YOLOv8 Hướng dẫn cài đặttài liệu xuất.

Lợi ích của việc sử dụng là gì TensorRT cho YOLOv8 Mô hình?

Sử dụng TensorRT để tối ưu hóa YOLOv8 Mô hình cung cấp một số lợi ích:

  • Tốc độ suy luận nhanh hơn: TensorRT tối ưu hóa các lớp mô hình và sử dụng hiệu chuẩn chính xác (INT8 và FP16) để tăng tốc độ suy luận mà không làm giảm đáng kể độ chính xác.
  • Hiệu quả bộ nhớ: TensorRT Quản lý tensor bộ nhớ động, giảm chi phí và cải thiện GPU sử dụng bộ nhớ.
  • Layer Fusion: Kết hợp nhiều lớp thành các hoạt động đơn lẻ, giảm độ phức tạp tính toán.
  • Tự động điều chỉnh hạt nhân: Tự động chọn được tối ưu hóa GPU hạt nhân cho từng lớp mô hình, đảm bảo hiệu suất tối đa.

Để biết thêm thông tin, hãy khám phá các tính năng chi tiết của TensorRT Ở đây và đọc của chúng tôi TensorRT phần tổng quan.

Tôi có thể sử dụng lượng tử hóa INT8 với không TensorRT cho YOLOv8 Mô hình?

Có, bạn có thể xuất YOLOv8 Mô hình sử dụng TensorRT với lượng tử hóa INT8. Quá trình này bao gồm lượng tử hóa sau đào tạo (PTQ) và hiệu chuẩn:

  1. Xuất với INT8:

    from ultralytics import YOLO
    
    model = YOLO("yolov8n.pt")
    model.export(format="engine", batch=8, workspace=4, int8=True, data="coco.yaml")
    
  2. Chạy suy luận:

    from ultralytics import YOLO
    
    model = YOLO("yolov8n.engine", task="detect")
    result = model.predict("https://ultralytics.com/images/bus.jpg")
    

Để biết thêm chi tiết, hãy tham khảo Xuất khẩu TensorRT với phần lượng tử hóa INT8.

Làm cách nào để triển khai YOLOv8 TensorRT Mô hình trên một NVIDIA Triton Máy chủ suy luận?

Triển khai YOLOv8 TensorRT Mô hình trên một NVIDIA Triton Inference Server có thể được thực hiện bằng cách sử dụng các tài nguyên sau:

Những hướng dẫn này sẽ giúp bạn tích hợp YOLOv8 mô hình hiệu quả trong các môi trường triển khai khác nhau.

Những cải tiến hiệu suất được quan sát thấy với là gì YOLOv8 Mô hình xuất khẩu sang TensorRT?

Cải thiện hiệu suất với TensorRT có thể thay đổi dựa trên phần cứng được sử dụng. Dưới đây là một số điểm chuẩn điển hình:

  • NVIDIA A100:

    • FP32 Suy luận: ~0,52 ms / hình ảnh
    • FP16 Suy luận: ~0,34 ms / hình ảnh
    • INT8 Suy luận: ~0,28 ms / hình ảnh
    • Giảm nhẹ mAP với độ chính xác INT8, nhưng cải thiện đáng kể về tốc độ.
  • GPU tiêu dùng (ví dụ: RTX 3080):

    • FP32 Suy luận: ~1,06 ms / hình ảnh
    • FP16 Suy luận: ~0,62 ms / hình ảnh
    • INT8 Suy luận: ~0,52 ms / hình ảnh

Điểm chuẩn hiệu suất chi tiết cho các cấu hình phần cứng khác nhau có thể được tìm thấy trong phần hiệu suất.

Để biết thông tin chi tiết toàn diện hơn về TensorRT Hiệu suất, tham khảo Ultralytics tài liệu và báo cáo phân tích hiệu suất của chúng tôi.

📅 Được tạo cách đây 9 tháng ✏️ Đã cập nhật cách đây 1 tháng

Ý kiến