Xuất TensorRT cho các Mô hình YOLO11
Việc triển khai các mô hình thị giác máy tính trong các 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 đang triển khai mô hình của mình trên GPU NVIDIA.
Bằng cách sử dụng định dạng xuất TensorRT, bạn có thể tăng cường các mô hình Ultralytics YOLO11 của mình để suy luận nhanh chóng và hiệu quả trên phần cứng NVIDIA. 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 công nghệ tiên tiến của NVIDIA trong các dự án deep learning của bạn.
TensorRT
TensorRT, được phát triển bởi NVIDIA, là một bộ công cụ 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à mang lại các hoạt động nhanh hơn và hiệu quả hơn. Các mô hình TensorRT trải qua quá trình tối ưu hóa TensorRT, 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), quản lý bộ nhớ tensor động và tự động điều chỉnh kernel. Việc chuyển đổi các mô hình deep learning sang định dạng TensorRT cho phép các nhà phát triển nhận ra đầy đủ tiềm năng của NVIDIA GPU.
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 một 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 framework khác nhau. Tính linh hoạt này cho phép triển khai mô hình hiệu quả trên các môi trường phần cứng và phần mềm đa dạng.
Các tính năng chính của mô hình TensorRT
Các mô hình TensorRT 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 học sâu tốc độ cao:
-
Hiệu chỉnh độ chính xác: TensorRT hỗ trợ hiệu chỉnh độ chính xác, cho phép tinh chỉnh các mô hình cho các yêu cầu độ chính xác cụ thể. Điều này bao gồm hỗ trợ cho các định dạng độ chính xác giảm 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 có thể chấp nhận được.
-
Hợp Nhất Lớp (Layer Fusion): Quá trình tối ưu hóa TensorRT bao gồm hợp nhất lớp, trong đó nhiều lớp của một 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.
-
Quản lý Bộ nhớ Tensor Động: TensorRT quản lý hiệu quả việc sử dụng bộ nhớ tensor trong quá trình suy luận, giảm chi phí bộ nhớ và tối ưu hóa việc phân bổ bộ nhớ. Điều này dẫn đến việc sử dụng bộ nhớ GPU hiệu quả hơn.
-
Tự động điều chỉnh Kernel: TensorRT áp dụng tự động điều chỉnh kernel để chọn kernel GPU được tối ưu hóa nhất 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 sức mạnh tính toán của GPU.
Các tùy chọn triển khai trong TensorRT
Trước khi chúng ta xem xét mã để xuất các mô hình YOLO11 sang định dạng TensorRT, hãy hiểu nơi các mô hình TensorRT 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 TensorFlow, cho phép các mô hình được tối ưu hóa chạy trong một môi trường TensorFlow quen thuộc. 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ý chúng một cách hiệu quả.
-
API Thời gian chạy TensorRT độc lập: 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ừ nhiều framework khác nhau. Đặc biệt phù hợp cho suy luận trê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 các mô hình YOLO11 sang 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 các mô hình YOLO11 sang định dạng TensorRT.
Cài đặt
Để cài đặt gói cần thiết, hãy chạy:
Cài đặt
# Install the required package for YOLO11
pip install ultralytics
Để có hướng dẫn chi tiết và các phương pháp hay nhất liên quan đến quy trình cài đặt, hãy xem Hướng dẫn cài đặt YOLO11 của chúng tôi. Trong khi cài đặt các gói cần thiết cho YOLO11, nếu bạn gặp bất kỳ khó khăn nào, hãy tham khảo Hướng dẫn về 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.
Cách sử dụng
Trước khi đi sâu vào hướng dẫn sử dụng, hãy nhớ xem qua phạm vi các mô hình YOLO11 do Ultralytics cung cấp. Điều này sẽ giúp bạn chọn mô hình phù hợp nhất cho các yêu cầu của dự án.
Cách sử dụng
from ultralytics import YOLO
# Load the YOLO11 model
model = YOLO("yolo11n.pt")
# Export the model to TensorRT format
model.export(format="engine") # creates 'yolo11n.engine'
# Load the exported TensorRT model
tensorrt_model = YOLO("yolo11n.engine")
# Run inference
results = tensorrt_model("https://ultralytics.com/images/bus.jpg")
# Export a YOLO11n PyTorch model to TensorRT format
yolo export model=yolo11n.pt format=engine # creates 'yolo11n.engine''
# Run inference with the exported model
yolo predict model=yolo11n.engine source='https://ultralytics.com/images/bus.jpg'
Các đối số xuất
Đối số | Loại | Mặc định | Mô tả |
---|---|---|---|
format |
str |
'engine' |
Dạng mục tiêu cho mô hình được xuất, xác định khả năng tương thích với các môi trường triển khai khác nhau. |
imgsz |
int hoặc tuple |
640 |
Kích thước hình ảnh mong muốn cho đầu vào của mô hình. Có thể là một số nguyên cho hình ảnh vuông hoặc một bộ giá trị (height, width) cho các kích thước cụ thể. |
half |
bool |
False |
Cho phép lượng tử hóa FP16 (nửa độ chính xác), giảm kích thước mô hình và có khả năng tăng tốc độ suy luận trên phần cứng được hỗ trợ. |
int8 |
bool |
False |
Kích hoạt lượng tử hóa INT8, nén thêm mô hình và tăng tốc độ suy luận với mức giảm độ chính xác tối thiểu, chủ yếu dành cho các thiết bị biên. |
dynamic |
bool |
False |
Cho phép kích thước đầu vào động, tăng cường tính linh hoạt trong việc xử lý các kích thước hình ảnh khác nhau. |
simplify |
bool |
True |
Đơn giản hóa đồ thị mô hình với onnxslim , có khả năng cải thiện hiệu suất và khả năng tương thích. |
workspace |
float hoặc None |
None |
Đặt kích thước không gian làm việc tối đa tính bằng GiB cho các tối ưu hóa TensorRT, cân bằng giữa việc sử dụng bộ nhớ và hiệu suất; sử dụng None để TensorRT tự động phân bổ lên đến mức tối đa của thiết bị. |
nms |
bool |
False |
Thêm Non-Maximum Suppression (NMS), rất cần thiết cho việc xử lý hậu kỳ phát hiện chính xác và hiệu quả. |
batch |
int |
1 |
Chỉ định kích thước suy luận theo lô của mô hình xuất hoặc số lượng hình ảnh tối đa mà mô hình đã xuất sẽ xử lý đồng thời ở chế độ predict chế độ. |
data |
str |
'coco8.yaml' |
Đường dẫn đến tập dữ liệu tệp cấu hình (mặc định: coco8.yaml ), cần thiết cho lượng tử hóa. |
fraction |
float |
1.0 |
Chỉ định tỷ lệ phần trăm của tập dữ liệu được sử dụng để hiệu chỉnh lượng tử hóa INT8. Cho phép hiệu chỉnh trên một tập hợp con của toàn bộ tập dữ liệu, hữu ích cho các thử nghiệm hoặc khi tài nguyên bị hạn chế. Nếu không được chỉ định khi bật INT8, toàn bộ tập dữ liệu sẽ được sử dụng. |
device |
str |
None |
Chỉ định thiết bị để xuất: GPU (device=0 ), DLA cho NVIDIA Jetson (device=dla:0 hoặc device=dla:1 ). |
Mẹo
Vui lòng đảm bảo sử dụng GPU có hỗ trợ CUDA khi xuất sang TensorRT.
Để biết thêm chi tiết về quy trình xuất, hãy truy cập trang tài liệu Ultralytics về xuất.
Xuất TensorRT với Lượng tử hóa INT8
Xuất các mô hình Ultralytics YOLO bằng TensorRT với độ chính xác INT8 sẽ thực thi lượng tử hóa sau huấn luyện (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 tensor kích hoạt khi mô hình YOLO xử lý suy luận trên dữ liệu đầu vào đại diện, sau đó sử dụng phân bố đó để ước tính các giá trị tỷ lệ cho mỗi tensor. Mỗi tensor kích hoạt là một ứng cử viên cho lượng tử hóa có một tỷ lệ liên kết được suy ra bởi một quy trình hiệu chuẩn.
Khi xử lý các mạng lượng tử hóa ngầm định, TensorRT sử dụng INT8 một cách tùy biến để tối ưu hóa thời gian thực thi lớp. Nếu một lớp chạy nhanh hơn ở INT8 và đã gán thang đo lượng tử hóa trên dữ liệu đầu vào và đầu ra của nó, thì một kernel với độ chính xác INT8 sẽ được gán cho lớp đó, nếu không, TensorRT sẽ chọn độ chính xác FP32 hoặc FP16 cho kernel dựa trên kết quả nào cho 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 trọng số mô hình TensorRT để 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ị.
Định cấu hình Xuất INT8
Các đối số được cung cấp khi sử dụng export cho một mô hình Ultralytics YOLO sẽ rất nhiều ảnh hưởng đến hiệu suất của mô hình đã xuất. Chúng cũng 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 phù hợp với hầu hết GPU rời NVIDIA Ampere (hoặc mới hơn). Thuật toán hiệu chuẩn được sử dụng là "MINMAX_CALIBRATION"
và bạn có thể đọc thêm chi tiết về các tùy chọn có sẵn trong Hướng dẫn dành cho nhà phát triển TensorRT. Ultralytics đã thử nghiệm và nhận thấy rằng "MINMAX_CALIBRATION"
là lựa chọn tốt nhất và các bản xuất hiện đã được sửa để 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 việc cấp phát 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à khả năng tài nguyên của bạn. Trong khi mộtworkspace
có thể làm tăng thời gian hiệu chỉnh, nó cho phép TensorRT khám phá một loạt các chiến thuật tối ưu hóa rộng hơn, có khả năng nâng cao hiệu suất mô hình và độ chính xác. Ngược lại, mộtworkspace
có thể giảm thời gian hiệu chỉnh nhưng có thể giới hạn 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=None
, cho phép TensorRT tự động cấp phát bộ nhớ. Khi định cấu hình thủ công, giá trị này có thể cần được tăng lên nếu quá trình hiệu chỉnh bị lỗi (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ị choworkspace
lớn hơn bộ nhớ khả dụng của thiết bị, có nghĩa là giá trị choworkspace
nên được giảm xuống hoặc đặt thànhNone
. -
Nếu
workspace
được đặt thành giá trị tối đa và quá trình hiệu chuẩn bị lỗi/sập, hãy cân nhắc sử dụngNone
để tự động phân bổ hoặc bằng cách giảm các giá trị choimgsz
vàbatch
để giảm yêu cầu bộ nhớ. -
Hãy nhớ rằng hiệu chuẩn cho INT8 là dành riêng cho từng thiết bị, việc mượn một GPU "cao cấp" để 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 batch tối đa sẽ được sử dụng để suy luận. Trong quá trình suy luận, các batch nhỏ hơn có thể được sử dụng, nhưng quá trình suy luận sẽ không chấp nhận các batch nào lớn hơn những gì đã được chỉ định.
Lưu ý
Trong quá trình hiệu chỉnh, gấp đôi batch
kích thước được cung cấp sẽ được sử dụng. Sử dụng các batch nhỏ có thể dẫn đến việc масштабирование 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ó thấy. Các batch nhỏ có thể không nắm bắt được toàn bộ phạm vi giá trị, dẫn đến các vấn đề với hiệu chuẩn cuối cùng, vì vậy batch
kích thước được tự động nhân đôi. Nếu không có kích thước lô được chỉ định batch=1
, quá trình hiệu chuẩn sẽ được chạy ở batch=1 * 2
để giảm lỗi tỷ lệ hiệu chỉnh.
Thử nghiệm của NVIDIA đã dẫn đến khuyến nghị sử dụng ít nhất 500 hình ảnh hiệu chuẩn đại diện cho dữ liệu của 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 khó yêu cầu và bạn sẽ cần thử nghiệm với những gì cần thiết để đạt hiệu quả tốt cho tập dữ liệu của bạn. Vì dữ liệu hiệu chuẩn là bắt buộc để hiệu chuẩn INT8 với TensorRT, hãy chắc chắn sử dụng data
đối số khi int8=True
cho TensorRT và sử dụng data="my_dataset.yaml"
, sẽ sử dụng hình ảnh từ xác thực để hiệu chỉnh. Khi không có giá trị nào được truyền cho data
với xuất sang TensorRT với lượng tử hóa INT8, mặc định sẽ là sử dụng một trong các các bộ dữ liệu mẫu "nhỏ" dựa trên tác vụ của mô hình thay vì báo 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")
- Xuất với các trục động, tính năng 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 các đối số xuất để biết thêm thông tin. - Đặt kích thước lô tối đa là 8 cho mô hình đã xuất, được hiệu chỉnh với
batch = 2 * 8
để tránh lỗi tỷ lệ trong quá trình hiệu chuẩn. - 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.
- Sử dụng tập dữ liệu COCO để hiệu chỉnh, đặc biệt là các hình ảnh được sử dụng để xác thực (tổng cộng 5.000).
# Export a YOLO11n PyTorch model to TensorRT format with INT8 quantization
yolo export model=yolo11n.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ớ đệm hiệu chuẩn
TensorRT sẽ tạo ra một hiệu chuẩn .cache
có thể được sử dụng lại để tăng tốc quá trình xuất trọng số 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 biệt lớn hoặc nếu batch
giá trị bị thay đổi đáng kể. Trong những trường hợp này, .cache
nên được đổi tên và chuyển sang một thư mục khác hoặc 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 sang INT8 có thể giảm kích thước mô hình đi 4 lần (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: Các hoạt động giảm độ chính xác cho các mô hình YOLO được xuất ở định dạng INT8 có thể tiêu thụ ít điện năng hơn so với các mô hình FP32, đặc biệt đố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
Có thể dự kiến các lệnh gọi suy luận đầu tiên với một mô hình được xuất sang TensorRT INT8 sẽ có thời gian tiền xử lý, suy luận và/hoặc hậu xử lý 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 khi imgsz
không giống với những gì đã được chỉ định trong quá trình xuất (xuất imgsz
được đặt làm cấu hình "tối ưu" TensorRT).
Nhược điểm khi sử dụng YOLO với TensorRT INT8
-
Các chỉ số đánh giá giảm: Sử dụng độ chính xác thấp hơn có nghĩa là
mAP
,Precision
,Recall
hoặc bất kỳ số liệu khác được sử dụng để đánh giá hiệu suất của mô hình có khả năng sẽ kém hơn một chút. Xem Phần kết quả hiệu suất để so sánh sự khác biệt trongmAP50
vàmAP50-95
khi xuất với INT8 trên một 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 ra các cài đặt "tối ưu" cho hiệu chuẩn INT8 cho tập dữ liệu và thiết bị có thể mất một lượng thời gian thử nghiệm đáng kể.
-
Tính phụ thuộc vào phần cứng: Việc hiệu chỉnh và tăng hiệu suất có thể phụ thuộc nhiều vào phần cứng và trọng số mô hình ít có khả năng chuyển đổi hơn.
Hiệu suất Xuất Ultralytics YOLO TensorRT
NVIDIA A100
Hiệu suất
Đã thử nghiệm với Ubuntu 22.04.3 LTS, python 3.10.12
, ultralytics==8.2.4
, tensorrt==8.6.1.post1
Tham khảo Tài liệu về Nhận diện để xem các ví dụ sử dụng với những mô hình này, được huấn luyện trên COCO, bao gồm 80 lớp đã được huấn luyện trước.
Lưu ý
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 thử nghiệm bằng cách sử dụng trọng số đã được huấn luyện trước yolov8n.engine
Độ chính xác | Kiểm tra Eval | trung bình (ms) |
tối thiểu | tối đa (ms) |
mAPval 50(B) |
mAPval 50-95(B) |
batch |
Kích thước (pixels) |
---|---|---|---|---|---|---|---|
FP32 | Dự đoán | 0.52 | 0.51 | 0.56 | 8 | 640 | ||
FP32 | COCOval | 0.52 | 0.52 | 0.37 | 1 | 640 | |
FP16 | Dự đoán | 0.34 | 0.34 | 0.41 | 8 | 640 | ||
FP16 | COCOval | 0.33 | 0.52 | 0.37 | 1 | 640 | |
INT8 | Dự đoán | 0.28 | 0.27 | 0.31 | 8 | 640 | ||
INT8 | COCOval | 0.29 | 0.47 | 0.33 | 1 | 640 |
Tham khảo Tài liệu về Phân đoạn để xem các ví dụ sử dụng với những mô hình này, được huấn luyện trên COCO, bao gồm 80 lớp đã được huấn luyện trước.
Lưu ý
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 thử nghiệm bằng cách sử dụng trọng số đã được huấn luyện trước yolov8n-seg.engine
Độ chính xác | Kiểm tra Eval | trung bình (ms) |
tối thiểu | tối đa (ms) |
mAPval 50(B) |
mAPval 50-95(B) |
mAPval 50(M) |
mAPval 50-95(M) |
batch |
Kích thước (pixels) |
---|---|---|---|---|---|---|---|---|---|
FP32 | Dự đoán | 0.62 | 0.61 | 0.68 | 8 | 640 | ||||
FP32 | COCOval | 0.63 | 0.52 | 0.36 | 0.49 | 0.31 | 1 | 640 | |
FP16 | Dự đoán | 0.40 | 0.39 | 0.44 | 8 | 640 | ||||
FP16 | COCOval | 0.43 | 0.52 | 0.36 | 0.49 | 0.30 | 1 | 640 | |
INT8 | Dự đoán | 0.34 | 0.33 | 0.37 | 8 | 640 | ||||
INT8 | COCOval | 0.36 | 0.46 | 0.32 | 0.43 | 0.27 | 1 | 640 |
Tham khảo Tài liệu về Phân loại để xem các ví dụ sử dụng với những mô hình này, được huấn luyện trên ImageNet, bao gồm 1000 lớp đã được huấn luyện trước.
Lưu ý
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 thử nghiệm bằng cách sử dụng trọng số đã được huấn luyện trước yolov8n-cls.engine
Độ chính xác | Kiểm tra Eval | trung bình (ms) |
tối thiểu | tối đa (ms) |
top-1 | top-5 | batch |
Kích thước (pixels) |
---|---|---|---|---|---|---|---|
FP32 | Dự đoán | 0.26 | 0.25 | 0.28 | 8 | 640 | ||
FP32 | ImageNetval | 0.26 | 0.35 | 0.61 | 1 | 640 | |
FP16 | Dự đoán | 0.18 | 0.17 | 0.19 | 8 | 640 | ||
FP16 | ImageNetval | 0.18 | 0.35 | 0.61 | 1 | 640 | |
INT8 | Dự đoán | 0.16 | 0.15 | 0.57 | 8 | 640 | ||
INT8 | ImageNetval | 0.15 | 0.32 | 0.59 | 1 | 640 |
Xem Tài liệu Ước tính dáng điệu để biết các ví dụ sử dụng với các mô hình này được huấn luyện trên COCO, bao gồm 1 lớp được huấn luyện trước, "người".
Lưu ý
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 thử nghiệm bằng cách sử dụng trọng số đã được huấn luyện trước yolov8n-pose.engine
Độ chính xác | Kiểm tra Eval | trung bình (ms) |
tối thiểu | tối đa (ms) |
mAPval 50(B) |
mAPval 50-95(B) |
mAPval 50(P) |
mAPval 50-95(P) |
batch |
Kích thước (pixels) |
---|---|---|---|---|---|---|---|---|---|
FP32 | Dự đoán | 0.54 | 0.53 | 0.58 | 8 | 640 | ||||
FP32 | COCOval | 0.55 | 0.91 | 0.69 | 0.80 | 0.51 | 1 | 640 | |
FP16 | Dự đoán | 0.37 | 0.35 | 0.41 | 8 | 640 | ||||
FP16 | COCOval | 0.36 | 0.91 | 0.69 | 0.80 | 0.51 | 1 | 640 | |
INT8 | Dự đoán | 0.29 | 0.28 | 0.33 | 8 | 640 | ||||
INT8 | COCOval | 0.30 | 0.90 | 0.68 | 0.78 | 0.47 | 1 | 640 |
Tham khảo Tài liệu về Nhận diện có hướng để xem các ví dụ sử dụng với những mô hình này, được huấn luyện trên DOTAv1, bao gồm 15 lớp đã được huấn luyện trước.
Lưu ý
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 thử nghiệm bằng cách sử dụng trọng số đã được huấn luyện trước yolov8n-obb.engine
Độ chính xác | Kiểm tra Eval | trung bình (ms) |
tối thiểu | tối đa (ms) |
mAPval 50(B) |
mAPval 50-95(B) |
batch |
Kích thước (pixels) |
---|---|---|---|---|---|---|---|
FP32 | Dự đoán | 0.52 | 0.51 | 0.59 | 8 | 640 | ||
FP32 | DOTAv1val | 0.76 | 0.50 | 0.36 | 1 | 640 | |
FP16 | Dự đoán | 0.34 | 0.33 | 0.42 | 8 | 640 | ||
FP16 | DOTAv1val | 0.59 | 0.50 | 0.36 | 1 | 640 | |
INT8 | Dự đoán | 0.29 | 0.28 | 0.33 | 8 | 640 | ||
INT8 | DOTAv1val | 0.32 | 0.45 | 0.32 | 1 | 640 |
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
Lưu ý
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 thử nghiệm bằng cách sử dụng trọng số đã được huấn luyện trước yolov8n.engine
Độ chính xác | Kiểm tra Eval | trung bình (ms) |
tối thiểu | tối đa (ms) |
mAPval 50(B) |
mAPval 50-95(B) |
batch |
Kích thước (pixels) |
---|---|---|---|---|---|---|---|
FP32 | Dự đoán | 1.06 | 0.75 | 1.88 | 8 | 640 | ||
FP32 | COCOval | 1.37 | 0.52 | 0.37 | 1 | 640 | |
FP16 | Dự đoán | 0.62 | 0.75 | 1.13 | 8 | 640 | ||
FP16 | COCOval | 0.85 | 0.52 | 0.37 | 1 | 640 | |
INT8 | Dự đoán | 0.52 | 0.38 | 1.00 | 8 | 640 | ||
INT8 | COCOval | 0.74 | 0.47 | 0.33 | 1 | 640 |
Đã thử nghiệm với Windows 10.0.22631, python 3.11.9
, ultralytics==8.2.4
, tensorrt==10.0.1
Lưu ý
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 thử nghiệm bằng cách sử dụng trọng số đã được huấn luyện trước yolov8n.engine
Độ chính xác | Kiểm tra Eval | trung bình (ms) |
tối thiểu | tối đa (ms) |
mAPval 50(B) |
mAPval 50-95(B) |
batch |
Kích thước (pixels) |
---|---|---|---|---|---|---|---|
FP32 | Dự đoán | 1.76 | 1.69 | 1.87 | 8 | 640 | ||
FP32 | COCOval | 1.94 | 0.52 | 0.37 | 1 | 640 | |
FP16 | Dự đoán | 0.86 | 0.75 | 1.00 | 8 | 640 | ||
FP16 | COCOval | 1.43 | 0.52 | 0.37 | 1 | 640 | |
INT8 | Dự đoán | 0.80 | 0.75 | 1.00 | 8 | 640 | ||
INT8 | COCOval | 1.35 | 0.47 | 0.33 | 1 | 640 |
Đã kiểm tra với Pop!_OS 22.04 LTS, python 3.10.12
, ultralytics==8.2.4
, tensorrt==8.6.1.post1
Lưu ý
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 thử nghiệm bằng cách sử dụng trọng số đã được huấn luyện trước yolov8n.engine
Độ chính xác | Kiểm tra Eval | trung bình (ms) |
tối thiểu | tối đa (ms) |
mAPval 50(B) |
mAPval 50-95(B) |
batch |
Kích thước (pixels) |
---|---|---|---|---|---|---|---|
FP32 | Dự đoán | 2.84 | 2.84 | 2.85 | 8 | 640 | ||
FP32 | COCOval | 2.94 | 0.52 | 0.37 | 1 | 640 | |
FP16 | Dự đoán | 1.09 | 1.09 | 1.10 | 8 | 640 | ||
FP16 | COCOval | 1.20 | 0.52 | 0.37 | 1 | 640 | |
INT8 | Dự đoán | 0.75 | 0.74 | 0.75 | 8 | 640 | ||
INT8 | COCOval | 0.76 | 0.47 | 0.33 | 1 | 640 |
Thiết bị nhúng
Hiệu suất phát hiện (COCO)
Đã kiểm tra 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
Lưu ý
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 thử nghiệm bằng cách sử dụng trọng số đã được huấn luyện trước yolov8n.engine
Độ chính xác | Kiểm tra Eval | trung bình (ms) |
tối thiểu | tối đa (ms) |
mAPval 50(B) |
mAPval 50-95(B) |
batch |
Kích thước (pixels) |
---|---|---|---|---|---|---|---|
FP32 | Dự đoán | 6.11 | 6.10 | 6.29 | 8 | 640 | ||
FP32 | COCOval | 6.17 | 0.52 | 0.37 | 1 | 640 | |
FP16 | Dự đoán | 3.18 | 3.18 | 3.20 | 8 | 640 | ||
FP16 | COCOval | 3.19 | 0.52 | 0.37 | 1 | 640 | |
INT8 | Dự đoán | 2.30 | 2.29 | 2.35 | 8 | 640 | ||
INT8 | COCOval | 2.32 | 0.46 | 0.32 | 1 | 640 |
Thông tin
Xem hướng dẫn khởi động nhanh của chúng tôi trên NVIDIA Jetson với Ultralytics YOLO để tìm hiểu thêm về 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à kiểm tra.
Cấu hình xuất
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
mode để 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 các Mô Hình YOLO11 TensorRT Đã Xuất
Sau khi xuất thành công các mô hình Ultralytics YOLO11 sang định dạng TensorRT, bạn đã sẵn sàng triển khai chúng. Để biết hướng dẫn chi tiết về cách triển khai các mô hình TensorRT của bạn trong các môi trường khác nhau, hãy xem các tài nguyên sau:
-
Triển khai Ultralytics với Triton Server: Hướng dẫn của chúng tôi về cách sử dụng Triton Inference (trước đây là TensorRT Inference) Server của NVIDIA đặc biệt để sử dụng với các mô hình Ultralytics YOLO.
-
Triển khai Mạng Nơ-ron Sâu với NVIDIA TensorRT: Bài viết này giải thích cách sử dụng NVIDIA TensorRT để triển khai các mạng nơ-ron sâu trên các nền tảng triển khai dựa trên GPU một cách hiệu quả.
-
AI Đầu cuối cho PC dựa trên NVIDIA: Triển khai NVIDIA TensorRT: Bài đăng trên blog này giải thích việc sử dụng NVIDIA TensorRT để tối ưu hóa và triển khai các mô hình AI trên PC dựa trên NVIDIA.
-
Kho lưu trữ GitHub cho NVIDIA TensorRT:: Đây là kho lưu trữ GitHub chính thức chứa mã nguồn và tài liệu cho NVIDIA TensorRT.
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 các mô hình Ultralytics YOLO11 sang định dạng mô hình TensorRT của NVIDIA. Bước chuyển đổi này rất quan trọng để cải thiện hiệu quả và tốc độ của các mô hình YOLO11, làm cho chúng hiệu quả hơn và phù hợp hơn với các môi trường triển khai khác nhau.
Để biết thêm thông tin chi tiết về cách sử dụng, hãy xem tài liệu chính thức của TensorRT.
Nếu bạn tò mò về các tích hợp Ultralytics YOLO11 bổ sung, trang hướng dẫn tích hợp của chúng tôi cung cấp một lựa chọn phong phú các tài nguyên và thông tin chi tiết.
Câu hỏi thường gặp
Làm cách nào để chuyển đổi các mô hình YOLO11 sang định dạng TensorRT?
Để chuyển đổi các mô hình Ultralytics YOLO11 của bạn sang định dạng TensorRT để suy luận NVIDIA GPU được tối ưu hóa, hãy làm theo các bước sau:
-
Cài đặt gói yêu cầu:
pip install ultralytics
-
Xuất mô hình YOLO11 của bạn:
from ultralytics import YOLO model = YOLO("yolo11n.pt") model.export(format="engine") # creates 'yolo11n.engine' # Run inference model = YOLO("yolo11n.engine") results = model("https://ultralytics.com/images/bus.jpg")
Để biết thêm chi tiết, hãy truy cập hướng dẫn Cài đặt YOLO11 và tài liệu xuất.
Những lợi ích của việc sử dụng TensorRT cho các mô hình YOLO11 là gì?
Sử dụng TensorRT để tối ưu hóa các mô hình YOLO11 mang lại 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ý bộ nhớ tensor một cách linh hoạt, giảm chi phí và cải thiện việc sử dụng bộ nhớ GPU.
- Hợp Nhất Lớp (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.
- Kernel Auto-Tuning: Tự động chọn các kernel GPU được tối ưu hóa cho từng lớp mô hình, đảm bảo hiệu suất tối đa.
Để tìm hiểu thêm, hãy khám phá tài liệu TensorRT chính thức từ NVIDIA và tổng quan chuyên sâu về TensorRT của chúng tôi.
Tôi có thể sử dụng lượng tử hóa INT8 với TensorRT cho các mô hình YOLO11 không?
Có, bạn có thể xuất các mô hình YOLO11 bằng TensorRT với lượng tử hóa INT8. Quá trình này bao gồm lượng tử hóa sau huấn luyện (PTQ) và hiệu chuẩn:
-
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")
-
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 phần xuất TensorRT với lượng tử hóa INT8.
Làm cách nào để triển khai các mô hình YOLO11 TensorRT trên một NVIDIA Triton Inference Server?
Việc triển khai các mô hình YOLO11 TensorRT trên NVIDIA Triton Inference Server có thể được thực hiện bằng các tài nguyên sau:
- Triển khai Ultralytics YOLOv8 với Triton Server: Hướng dẫn từng bước về cách thiết lập và sử dụng Triton Inference Server.
- Tài liệu về NVIDIA Triton Inference Server: Tài liệu chính thức của NVIDIA để biết các tùy chọn và cấu hình triển khai chi tiết.
Các hướng dẫn này sẽ giúp bạn tích hợp các mô hình YOLOv8 một cách hiệu quả trong các môi trường triển khai khác nhau.
Những cải tiến về hiệu suất được quan sát thấy với các mô hình YOLOv8 được xuất sang TensorRT là gì?
Cải thiện hiệu suất với TensorRT có thể khác nhau tùy thuộc vào 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:
- Suy luận FP32: ~0,52 ms / ảnh
- Suy luận FP16: ~0,34 ms / ảnh
- Suy luận INT8: ~0.28 ms / ả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):
- Suy luận FP32: ~1,06 ms / ảnh
- Suy luận FP16: ~0,62 ms / ảnh
- Suy luận INT8: ~0.52 ms / ả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.
Để hiểu rõ hơn về hiệu suất của TensorRT, hãy tham khảo tài liệu Ultralytics và các báo cáo phân tích hiệu suất của chúng tôi.