YOLO11 모델용 TensorRT 내보내기
고성능 환경에서 컴퓨터 비전 모델을 배포하려면 속도와 효율성을 극대화하는 형식이 필요할 수 있습니다. 이는 NVIDIA GPU에 모델을 배포할 때 특히 그렇습니다.
TensorRT 내보내기 형식을 사용하면 NVIDIA 하드웨어에서 빠르고 효율적인 추론을 위해 Ultralytics YOLO11 모델을 향상시킬 수 있습니다. 이 가이드는 변환 프로세스에 대한 따라하기 쉬운 단계를 제공하고 딥 러닝 프로젝트에서 NVIDIA의 고급 기술을 최대한 활용하는 데 도움이 됩니다.
TensorRT
TensorRT는 NVIDIA에서 개발한 고속 딥러닝 추론을 위해 설계된 고급 소프트웨어 개발 키트(SDK)입니다. 객체 감지와 같은 실시간 애플리케이션에 적합합니다.
이 툴킷은 NVIDIA GPU용 딥 러닝 모델을 최적화하여 더 빠르고 효율적인 작업을 수행합니다. TensorRT 모델은 레이어 융합, 정밀도 보정(INT8 및 FP16), 동적 텐서 메모리 관리 및 커널 자동 튜닝과 같은 기술을 포함하는 TensorRT 최적화를 거칩니다. 딥 러닝 모델을 TensorRT 형식으로 변환하면 개발자가 NVIDIA GPU의 잠재력을 최대한 실현할 수 있습니다.
TensorRT는 TensorFlow, PyTorch 및 ONNX를 포함한 다양한 모델 형식과의 호환성으로 유명하여 개발자에게 다양한 프레임워크의 모델을 통합하고 최적화할 수 있는 유연한 솔루션을 제공합니다. 이러한 다재다능성 덕분에 다양한 하드웨어 및 소프트웨어 환경에서 효율적인 모델 배포가 가능합니다.
TensorRT 모델의 주요 기능
TensorRT 모델은 고속 딥 러닝 추론에서 효율성과 효과에 기여하는 다양한 주요 기능을 제공합니다.
-
정밀도 보정: TensorRT는 정밀도 보정을 지원하므로 특정 정확도 요구 사항에 맞게 모델을 미세 조정할 수 있습니다. 여기에는 허용 가능한 정확도 수준을 유지하면서 추론 속도를 더욱 높일 수 있는 INT8 및 FP16과 같은 감소된 정밀도 형식에 대한 지원이 포함됩니다.
-
레이어 융합: TensorRT 최적화 프로세스에는 레이어 융합이 포함되어 있는데, 여기서 신경망의 여러 레이어가 단일 작업으로 결합됩니다. 이는 메모리 액세스 및 계산을 최소화하여 계산 오버헤드를 줄이고 추론 속도를 향상시킵니다.
-
동적 텐서 메모리 관리: TensorRT는 추론 과정에서 텐서 메모리 사용량을 효율적으로 관리하여 메모리 오버헤드를 줄이고 메모리 할당을 최적화합니다. 이는 GPU 메모리 활용도를 향상시킵니다.
-
자동 커널 튜닝: TensorRT는 자동 커널 튜닝을 적용하여 모델의 각 레이어에 대해 가장 최적화된 GPU 커널을 선택합니다. 이 적응형 접근 방식은 모델이 GPU의 컴퓨팅 성능을 최대한 활용하도록 보장합니다.
TensorRT의 배포 옵션
YOLO11 모델을 TensorRT 형식으로 내보내는 코드에 대해 알아보기 전에 TensorRT 모델이 일반적으로 어디에 사용되는지 이해해 보겠습니다.
TensorRT는 여러 배포 옵션을 제공하며 각 옵션은 통합 용이성, 성능 최적화 및 유연성의 균형을 다르게 맞춥니다.
- TensorFlow 내에 배포: 이 방법은 TensorRT를 TensorFlow에 통합하여 최적화된 모델이 익숙한 TensorFlow 환경에서 실행되도록 합니다. TF-TRT가 이러한 모델을 효율적으로 처리할 수 있으므로 지원되는 레이어와 지원되지 않는 레이어가 혼합된 모델에 유용합니다.
-
독립 실행형 TensorRT 런타임 API: 세분화된 제어를 제공하여 성능이 중요한 애플리케이션에 적합합니다. 더 복잡하지만 지원되지 않는 연산자의 사용자 정의 구현이 가능합니다.
-
NVIDIA Triton Inference Server: 다양한 프레임워크의 모델을 지원하는 옵션입니다. 특히 클라우드 또는 에지 추론에 적합하며, 동시 모델 실행 및 모델 분석과 같은 기능을 제공합니다.
YOLO11 모델을 TensorRT로 내보내기
YOLO11 모델을 TensorRT 형식으로 변환하여 실행 효율성을 개선하고 성능을 최적화할 수 있습니다.
설치
필수 패키지를 설치하려면 다음을 실행합니다.
설치
# Install the required package for YOLO11
pip install ultralytics
설치 프로세스와 관련된 자세한 지침 및 모범 사례는 YOLO11 설치 가이드를 확인하십시오. YOLO11에 필요한 패키지를 설치하는 동안 어려움이 발생하면 일반적인 문제 가이드에서 해결 방법과 팁을 참조하십시오.
사용법
사용 지침을 살펴보기 전에 Ultralytics에서 제공하는 다양한 YOLO11 모델을 확인하십시오. 이는 프로젝트 요구 사항에 가장 적합한 모델을 선택하는 데 도움이 될 것입니다.
사용법
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'
인수 내보내기
인수 | 유형 | 기본값 | 설명 |
---|---|---|---|
format |
str |
'engine' |
다양한 배포 환경과의 호환성을 정의하는 내보낸 모델의 대상 형식입니다. |
imgsz |
int 또는 tuple |
640 |
모델 입력에 대한 원하는 이미지 크기입니다. 정사각형 이미지의 경우 정수이거나 튜플일 수 있습니다. (height, width) 특정 크기의 경우. |
half |
bool |
False |
FP16(반정밀도) 양자화를 활성화하여 모델 크기를 줄이고 지원되는 하드웨어에서 추론 속도를 높일 수 있습니다. |
int8 |
bool |
False |
INT8 양자화를 활성화하여 모델을 더욱 압축하고 정확도 손실을 최소화하면서 추론 속도를 높입니다(주로 에지 장치용). |
dynamic |
bool |
False |
동적 입력 크기를 허용하여 다양한 이미지 크기를 처리하는 유연성을 향상시킵니다. |
simplify |
bool |
True |
다음을 사용하여 모델 그래프를 단순화합니다. onnxslim , 잠재적으로 성능 및 호환성을 향상시킵니다. |
workspace |
float 또는 None |
None |
TensorRT 최적화를 위한 최대 작업 공간 크기를 GiB 단위로 설정하여 메모리 사용량과 성능 간의 균형을 맞춥니다. 다음을 사용하십시오. None TensorRT에 의한 장치 최대값까지 자동 할당을 위해. |
nms |
bool |
False |
정확하고 효율적인 탐지 후 처리에 필수적인 NMS(Non-Maximum Suppression)를 추가합니다. |
batch |
int |
1 |
내보내기 모델 배치 추론 크기 또는 내보내기 모델이 동시에 처리할 이미지의 최대 수를 지정합니다. predict mode. |
data |
str |
'coco8.yaml' |
다음 경로: 데이터 세트 구성 파일(기본값: coco8.yaml ), 양자화에 필수적입니다. |
fraction |
float |
1.0 |
INT8 양자화 보정에 사용할 데이터 세트의 비율을 지정합니다. 전체 데이터 세트의 하위 집합에서 보정할 수 있으므로 실험이나 리소스가 제한적일 때 유용합니다. INT8을 활성화한 상태에서 지정하지 않으면 전체 데이터 세트가 사용됩니다. |
device |
str |
None |
내보내기할 장치를 지정합니다: GPU (device=0 ), NVIDIA Jetson용 DLA(device=dla:0 또는 device=dla:1 )입니다. |
팁
TensorRT로 내보낼 때는 CUDA를 지원하는 GPU를 사용해야 합니다.
내보내기 프로세스에 대한 자세한 내용은 내보내기에 대한 Ultralytics 문서 페이지를 참조하십시오.
INT8 양자화를 사용하여 TensorRT 내보내기
INT8 정밀도로 TensorRT를 사용하여 Ultralytics YOLO 모델을 내보내는 것은 사후 훈련 양자화(PTQ)를 실행합니다. TensorRT는 PTQ에 대한 보정을 사용합니다. PTQ는 YOLO 모델이 대표적인 입력 데이터에 대한 추론을 처리할 때 각 활성화 텐서 내의 활성화 분포를 측정한 다음 해당 분포를 사용하여 각 텐서의 스케일 값을 추정합니다. 양자화 후보인 각 활성화 텐서에는 보정 프로세스에 의해 추론되는 관련 스케일이 있습니다.
TensorRT는 암시적으로 양자화된 네트워크를 처리할 때 INT8을 사용하여 레이어 실행 시간을 최적화합니다. 레이어가 INT8에서 더 빠르게 실행되고 데이터 입력 및 출력에 양자화 스케일이 할당된 경우 INT8 정밀도를 가진 커널이 해당 레이어에 할당됩니다. 그렇지 않으면 TensorRT는 해당 레이어에 대해 더 빠른 실행 시간을 제공하는 FP32 또는 FP16 정밀도를 커널에 대해 선택합니다.
팁
TensorRT 모델 가중치를 배포에 사용할 장치와 INT8 정밀도로 내보내는 데 사용되는 장치가 동일한지 확인하는 것이 매우 중요합니다. 이는 보정 결과가 장치마다 다를 수 있기 때문입니다.
INT8 내보내기 구성
다음을 사용할 때 제공되는 인수 export Ultralytics YOLO 모델의 경우 매우 내보낸 모델의 성능에 영향을 미칩니다. 또한 사용 가능한 장치 리소스를 기반으로 선택해야 하지만 기본 인수는 다음과 같습니다. 해야 합니다 대부분의 경우에 작동합니다. Ampere (또는 최신) NVIDIA 외장 GPU. 사용된 보정 알고리즘은 다음과 같습니다. "MINMAX_CALIBRATION"
사용 가능한 옵션에 대한 자세한 내용은 다음에서 확인할 수 있습니다. TensorRT 개발자 가이드에서. Ultralytics 테스트에서 다음을 발견했습니다. "MINMAX_CALIBRATION"
최선의 선택이었고 내보내기는 이 알고리즘을 사용하도록 수정되었습니다.
-
workspace
: 모델 가중치를 변환하는 동안 장치 메모리 할당 크기(GiB)를 제어합니다.-
다음을 조정합니다.
workspace
보정 요구 사항 및 리소스 가용성에 따라 값을 조정하십시오. 더 큰 값을 사용할수록workspace
보정 시간이 늘어날 수 있지만 TensorRT가 더 광범위한 최적화 전략을 탐색하여 모델 성능을 향상시킬 수 있습니다. 정확도. 반대로, 더 작은workspace
보정 시간을 줄일 수 있지만 최적화 전략을 제한하여 양자화된 모델의 품질에 영향을 줄 수 있습니다. -
기본값은
workspace=None
, TensorRT가 메모리를 자동으로 할당할 수 있도록 합니다. 수동으로 구성할 때 보정 오류가 발생하면(경고 없이 종료) 이 값을 늘려야 할 수 있습니다. -
TensorRT는 다음을 보고합니다.
UNSUPPORTED_STATE
내보내기 시 다음 값에 대해workspace
장치에서 사용할 수 있는 메모리보다 크므로, 다음 값은workspace
낮추거나 다음으로 설정해야 합니다.None
. -
만약
workspace
최대값으로 설정되어 있고 보정에 실패하거나 충돌이 발생하면 다음을 사용하는 것이 좋습니다.None
자동 할당을 위해 또는 값을 줄임으로써imgsz
및batch
메모리 요구 사항을 줄이려면. -
주의: INT8 보정은 각 장치에 따라 다릅니다. 보정을 위해 "고급" GPU를 빌려 사용하는 경우, 추론을 다른 장치에서 실행하면 성능이 저하될 수 있습니다.
-
-
batch
: 추론에 사용될 최대 배치 크기입니다. 추론 중에는 더 작은 배치를 사용할 수 있지만, 추론은 지정된 크기보다 큰 배치를 허용하지 않습니다.
참고
보정 중에는 두 배의 batch
제공된 크기가 사용됩니다. 작은 배치 크기를 사용하면 보정 중에 부정확한 스케일링이 발생할 수 있습니다. 이는 프로세스가 보이는 데이터를 기반으로 조정되기 때문입니다. 작은 배치는 전체 값 범위를 캡처하지 못하여 최종 보정에 문제가 발생할 수 있으므로, batch
크기가 자동으로 두 배가 됩니다. 크기가 제공되지 않으면 배치 크기 지정되었습니다. batch=1
, 캘리브레이션은 다음에서 실행됩니다. batch=1 * 2
보정 스케일링 오류를 줄이려면.
NVIDIA의 실험 결과, INT8 양자화 보정을 위해 모델 데이터의 대표성을 나타내는 500개 이상의 보정 이미지를 사용하는 것이 좋습니다. 이는 지침일 뿐이며 어려운 요구 사항, 그리고 데이터 세트에 적합한 성능을 내기 위해 필요한 것이 무엇인지 실험해야 합니다. TensorRT를 사용한 INT8 보정에 보정 데이터가 필요하므로 반드시 다음을 사용하십시오. data
인수 조건: int8=True
TensorRT의 경우 다음을 사용하고 data="my_dataset.yaml"
, 다음에서 이미지를 사용합니다. 유효성 검사 보정할 때 사용합니다. 에 대한 값이 전달되지 않은 경우 data
INT8 양자화를 통해 TensorRT로 내보내면 기본적으로 다음 중 하나를 사용합니다. 모델 작업에 기반한 '작은' 예제 데이터 세트 오류를 발생시키는 대신.
예시
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")
- 동적 축으로 내보내기, 이는 다음으로 내보낼 때 기본적으로 활성화됩니다.
int8=True
명시적으로 설정하지 않은 경우에도. 다음을 참조하십시오. 내보내기 인수 자세한 내용은. - 내보낸 모델에 대해 최대 배치 크기를 8로 설정합니다. 이 크기는 다음을 사용하여 보정됩니다.
batch = 2 * 8
보정 중 스케일링 오류를 방지합니다. - 전체 장치를 변환 프로세스에 할당하는 대신 4GiB의 메모리를 할당합니다.
- 보정에는 COCO 데이터세트가 사용되며, 특히 유효성 검사에 사용되는 이미지(총 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'
Calibration Cache
TensorRT는 보정(calibration)을 생성합니다. .cache
동일한 데이터를 사용하여 향후 모델 가중치 내보내기 속도를 높이는 데 재사용할 수 있지만, 데이터가 크게 다르거나 batch
값이 크게 변경됩니다. 이러한 상황에서는 기존의 .cache
이름을 바꾸고 다른 디렉토리로 이동하거나 완전히 삭제해야 합니다.
TensorRT INT8로 YOLO를 사용할 때의 장점
-
모델 크기 축소: FP32에서 INT8로 양자화하면 모델 크기를 4배(디스크 또는 메모리에서) 줄일 수 있어 다운로드 시간이 단축됩니다. 스토리지 요구 사항이 낮아지고 모델 배포 시 메모리 사용 공간이 줄어듭니다.
-
낮은 전력 소비: INT8로 내보낸 YOLO 모델에 대한 감소된 정밀도 연산은 특히 배터리 전원 장치의 경우 FP32 모델에 비해 전력 소비를 줄일 수 있습니다.
-
향상된 추론 속도: TensorRT는 대상 하드웨어에 맞게 모델을 최적화하여 GPU, 임베디드 장치 및 가속기에서 더 빠른 추론 속도를 제공할 수 있습니다.
추론 속도에 대한 참고 사항
TensorRT INT8로 내보낸 모델을 사용한 처음 몇 번의 추론 호출은 일반적인 전처리, 추론 및/또는 후처리 시간보다 오래 걸릴 수 있습니다. 이는 다음을 변경할 때도 발생할 수 있습니다. imgsz
추론 시, 특히 다음의 경우 imgsz
내보내기 중에 지정된 것과 같지 않습니다(내보내기 imgsz
TensorRT "최적" 프로필로 설정됩니다.
TensorRT INT8로 YOLO를 사용할 때의 단점
-
평가 지표 감소: 낮은 정밀도를 사용하면
mAP
,Precision
,Recall
또는 모든 모델 성능을 평가하는 데 사용되는 다른 메트릭 약간 더 나쁠 수 있습니다. 다음을 참조하십시오. 성능 결과 섹션 의 차이점을 비교하려면mAP50
및mAP50-95
다양한 장치의 작은 샘플에서 INT8로 내보낼 때. -
개발 시간 증가: 데이터 세트 및 장치에 대한 INT8 보정에 "최적" 설정을 찾는 데 상당한 테스트 시간이 걸릴 수 있습니다.
-
하드웨어 의존성: 보정 및 성능 향상은 하드웨어에 따라 크게 달라질 수 있으며 모델 가중치는 덜 전송 가능합니다.
Ultralytics YOLO TensorRT 내보내기 성능
NVIDIA A100
성능
Ubuntu 22.04.3 LTS에서 테스트됨, python 3.10.12
, ultralytics==8.2.4
, tensorrt==8.6.1.post1
감지 문서에서 COCO로 훈련된 이러한 모델의 사용 예시를 참조하십시오. 여기에는 80개의 사전 훈련된 클래스가 포함됩니다.
참고
다음에 대해 표시된 추론 시간: mean
, min
(가장 빠름) 및 max
사전 훈련된 가중치를 사용하여 각 테스트에 대해 (가장 느림) yolov8n.engine
정밀도 | Eval 테스트 | 평균 (ms) |
최소 | 최대 (ms) |
mAPval 50(B) |
mAPval 50-95(B) |
batch |
크기 (픽셀) |
---|---|---|---|---|---|---|---|
FP32 | 예측 | 0.52 | 0.51 | 0.56 | 8 | 640 | ||
FP32 | COCOval | 0.52 | 0.52 | 0.37 | 1 | 640 | |
FP16 | 예측 | 0.34 | 0.34 | 0.41 | 8 | 640 | ||
FP16 | COCOval | 0.33 | 0.52 | 0.37 | 1 | 640 | |
INT8 | 예측 | 0.28 | 0.27 | 0.31 | 8 | 640 | ||
INT8 | COCOval | 0.29 | 0.47 | 0.33 | 1 | 640 |
분할 문서에서 COCO로 훈련된 이러한 모델의 사용 예시를 참조하십시오. 여기에는 80개의 사전 훈련된 클래스가 포함됩니다.
참고
다음에 대해 표시된 추론 시간: mean
, min
(가장 빠름) 및 max
사전 훈련된 가중치를 사용하여 각 테스트에 대해 (가장 느림) yolov8n-seg.engine
정밀도 | Eval 테스트 | 평균 (ms) |
최소 | 최대 (ms) |
mAPval 50(B) |
mAPval 50-95(B) |
mAPval 50(M) |
mAPval 50-95(M) |
batch |
크기 (픽셀) |
---|---|---|---|---|---|---|---|---|---|
FP32 | 예측 | 0.62 | 0.61 | 0.68 | 8 | 640 | ||||
FP32 | COCOval | 0.63 | 0.52 | 0.36 | 0.49 | 0.31 | 1 | 640 | |
FP16 | 예측 | 0.40 | 0.39 | 0.44 | 8 | 640 | ||||
FP16 | COCOval | 0.43 | 0.52 | 0.36 | 0.49 | 0.30 | 1 | 640 | |
INT8 | 예측 | 0.34 | 0.33 | 0.37 | 8 | 640 | ||||
INT8 | COCOval | 0.36 | 0.46 | 0.32 | 0.43 | 0.27 | 1 | 640 |
1000개의 사전 훈련된 클래스가 포함된 ImageNet에서 훈련된 이러한 모델의 사용 예는 분류 문서를 참조하십시오.
참고
다음에 대해 표시된 추론 시간: mean
, min
(가장 빠름) 및 max
사전 훈련된 가중치를 사용하여 각 테스트에 대해 (가장 느림) yolov8n-cls.engine
정밀도 | Eval 테스트 | 평균 (ms) |
최소 | 최대 (ms) |
상위-1 | 상위-5 | batch |
크기 (픽셀) |
---|---|---|---|---|---|---|---|
FP32 | 예측 | 0.26 | 0.25 | 0.28 | 8 | 640 | ||
FP32 | ImageNetval | 0.26 | 0.35 | 0.61 | 1 | 640 | |
FP16 | 예측 | 0.18 | 0.17 | 0.19 | 8 | 640 | ||
FP16 | ImageNetval | 0.18 | 0.35 | 0.61 | 1 | 640 | |
INT8 | 예측 | 0.16 | 0.15 | 0.57 | 8 | 640 | ||
INT8 | ImageNetval | 0.15 | 0.32 | 0.59 | 1 | 640 |
COCO에서 학습된 이러한 모델의 사용 예시는 포즈 추정 문서를 참조하십시오. 여기에는 사전 학습된 클래스 "person"이 1개 포함되어 있습니다.
참고
다음에 대해 표시된 추론 시간: mean
, min
(가장 빠름) 및 max
사전 훈련된 가중치를 사용하여 각 테스트에 대해 (가장 느림) yolov8n-pose.engine
정밀도 | Eval 테스트 | 평균 (ms) |
최소 | 최대 (ms) |
mAPval 50(B) |
mAPval 50-95(B) |
mAPval 50(P) |
mAPval 50-95(P) |
batch |
크기 (픽셀) |
---|---|---|---|---|---|---|---|---|---|
FP32 | 예측 | 0.54 | 0.53 | 0.58 | 8 | 640 | ||||
FP32 | COCOval | 0.55 | 0.91 | 0.69 | 0.80 | 0.51 | 1 | 640 | |
FP16 | 예측 | 0.37 | 0.35 | 0.41 | 8 | 640 | ||||
FP16 | COCOval | 0.36 | 0.91 | 0.69 | 0.80 | 0.51 | 1 | 640 | |
INT8 | 예측 | 0.29 | 0.28 | 0.33 | 8 | 640 | ||||
INT8 | COCOval | 0.30 | 0.90 | 0.68 | 0.78 | 0.47 | 1 | 640 |
DOTAv1으로 학습된 모델의 사용 예시는 방향이 지정된 객체 감지 문서를 참고하세요. 15개의 사전 학습된 클래스가 포함되어 있습니다.
참고
다음에 대해 표시된 추론 시간: mean
, min
(가장 빠름) 및 max
사전 훈련된 가중치를 사용하여 각 테스트에 대해 (가장 느림) yolov8n-obb.engine
정밀도 | Eval 테스트 | 평균 (ms) |
최소 | 최대 (ms) |
mAPval 50(B) |
mAPval 50-95(B) |
batch |
크기 (픽셀) |
---|---|---|---|---|---|---|---|
FP32 | 예측 | 0.52 | 0.51 | 0.59 | 8 | 640 | ||
FP32 | DOTAv1val | 0.76 | 0.50 | 0.36 | 1 | 640 | |
FP16 | 예측 | 0.34 | 0.33 | 0.42 | 8 | 640 | ||
FP16 | DOTAv1val | 0.59 | 0.50 | 0.36 | 1 | 640 | |
INT8 | 예측 | 0.29 | 0.28 | 0.33 | 8 | 640 | ||
INT8 | DOTAv1val | 0.32 | 0.45 | 0.32 | 1 | 640 |
소비자 GPU
감지 성능 (COCO)
Windows 10.0.19045에서 테스트됨, python 3.10.9
, ultralytics==8.2.4
, tensorrt==10.0.0b6
참고
다음에 대해 표시된 추론 시간: mean
, min
(가장 빠름) 및 max
사전 훈련된 가중치를 사용하여 각 테스트에 대해 (가장 느림) yolov8n.engine
정밀도 | Eval 테스트 | 평균 (ms) |
최소 | 최대 (ms) |
mAPval 50(B) |
mAPval 50-95(B) |
batch |
크기 (픽셀) |
---|---|---|---|---|---|---|---|
FP32 | 예측 | 1.06 | 0.75 | 1.88 | 8 | 640 | ||
FP32 | COCOval | 1.37 | 0.52 | 0.37 | 1 | 640 | |
FP16 | 예측 | 0.62 | 0.75 | 1.13 | 8 | 640 | ||
FP16 | COCOval | 0.85 | 0.52 | 0.37 | 1 | 640 | |
INT8 | 예측 | 0.52 | 0.38 | 1.00 | 8 | 640 | ||
INT8 | COCOval | 0.74 | 0.47 | 0.33 | 1 | 640 |
Windows 10.0.22631에서 테스트됨, python 3.11.9
, ultralytics==8.2.4
, tensorrt==10.0.1
참고
다음에 대해 표시된 추론 시간: mean
, min
(가장 빠름) 및 max
사전 훈련된 가중치를 사용하여 각 테스트에 대해 (가장 느림) yolov8n.engine
정밀도 | Eval 테스트 | 평균 (ms) |
최소 | 최대 (ms) |
mAPval 50(B) |
mAPval 50-95(B) |
batch |
크기 (픽셀) |
---|---|---|---|---|---|---|---|
FP32 | 예측 | 1.76 | 1.69 | 1.87 | 8 | 640 | ||
FP32 | COCOval | 1.94 | 0.52 | 0.37 | 1 | 640 | |
FP16 | 예측 | 0.86 | 0.75 | 1.00 | 8 | 640 | ||
FP16 | COCOval | 1.43 | 0.52 | 0.37 | 1 | 640 | |
INT8 | 예측 | 0.80 | 0.75 | 1.00 | 8 | 640 | ||
INT8 | COCOval | 1.35 | 0.47 | 0.33 | 1 | 640 |
Pop!_OS 22.04 LTS에서 테스트됨, python 3.10.12
, ultralytics==8.2.4
, tensorrt==8.6.1.post1
참고
다음에 대해 표시된 추론 시간: mean
, min
(가장 빠름) 및 max
사전 훈련된 가중치를 사용하여 각 테스트에 대해 (가장 느림) yolov8n.engine
정밀도 | Eval 테스트 | 평균 (ms) |
최소 | 최대 (ms) |
mAPval 50(B) |
mAPval 50-95(B) |
batch |
크기 (픽셀) |
---|---|---|---|---|---|---|---|
FP32 | 예측 | 2.84 | 2.84 | 2.85 | 8 | 640 | ||
FP32 | COCOval | 2.94 | 0.52 | 0.37 | 1 | 640 | |
FP16 | 예측 | 1.09 | 1.09 | 1.10 | 8 | 640 | ||
FP16 | COCOval | 1.20 | 0.52 | 0.37 | 1 | 640 | |
INT8 | 예측 | 0.75 | 0.74 | 0.75 | 8 | 640 | ||
INT8 | COCOval | 0.76 | 0.47 | 0.33 | 1 | 640 |
임베디드 장치
감지 성능 (COCO)
JetPack 6.0 (L4T 36.3) Ubuntu 22.04.4 LTS에서 테스트됨, python 3.10.12
, ultralytics==8.2.16
, tensorrt==10.0.1
참고
다음에 대해 표시된 추론 시간: mean
, min
(가장 빠름) 및 max
사전 훈련된 가중치를 사용하여 각 테스트에 대해 (가장 느림) yolov8n.engine
정밀도 | Eval 테스트 | 평균 (ms) |
최소 | 최대 (ms) |
mAPval 50(B) |
mAPval 50-95(B) |
batch |
크기 (픽셀) |
---|---|---|---|---|---|---|---|
FP32 | 예측 | 6.11 | 6.10 | 6.29 | 8 | 640 | ||
FP32 | COCOval | 6.17 | 0.52 | 0.37 | 1 | 640 | |
FP16 | 예측 | 3.18 | 3.18 | 3.20 | 8 | 640 | ||
FP16 | COCOval | 3.19 | 0.52 | 0.37 | 1 | 640 | |
INT8 | 예측 | 2.30 | 2.29 | 2.35 | 8 | 640 | ||
INT8 | COCOval | 2.32 | 0.46 | 0.32 | 1 | 640 |
정보
설정 및 구성에 대한 자세한 내용은 Ultralytics YOLO를 사용한 NVIDIA Jetson의 빠른 시작 가이드를 참조하십시오.
평가 방법
이러한 모델이 어떻게 내보내지고 테스트되었는지에 대한 정보는 아래 섹션을 펼쳐서 확인하십시오.
구성 내보내기
내보내기 구성 인수에 대한 자세한 내용은 내보내기 모드를 참조하십시오.
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"
)
예측 루프
자세한 내용은 예측 모드를 참조하십시오.
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",
)
유효성 검사 구성
참조 val
모드 유효성 검사 구성 인수에 대해 자세히 알아보십시오.
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",
)
내보낸 YOLO11 TensorRT 모델 배포
Ultralytics YOLO11 모델을 TensorRT 형식으로 성공적으로 내보냈으므로 이제 배포할 준비가 되었습니다. 다양한 설정에서 TensorRT 모델을 배포하는 방법에 대한 자세한 지침은 다음 리소스를 참조하십시오.
-
Triton 서버로 Ultralytics 배포: Ultralytics YOLO 모델과 함께 NVIDIA의 Triton Inference (이전의 TensorRT Inference) 서버를 사용하는 방법에 대한 가이드입니다.
-
NVIDIA TensorRT를 사용한 딥 뉴럴 네트워크 배포: 이 문서에서는 NVIDIA TensorRT를 사용하여 GPU 기반 배포 플랫폼에 딥 뉴럴 네트워크를 효율적으로 배포하는 방법을 설명합니다.
-
NVIDIA 기반 PC를 위한 엔드 투 엔드 AI: NVIDIA TensorRT 배포: 이 블로그 게시물에서는 NVIDIA 기반 PC에서 AI 모델을 최적화하고 배포하기 위해 NVIDIA TensorRT를 사용하는 방법을 설명합니다.
-
NVIDIA TensorRT용 GitHub 리포지토리:: NVIDIA TensorRT에 대한 소스 코드와 설명서가 포함된 공식 GitHub 리포지토리입니다.
요약
이 가이드에서는 Ultralytics YOLO11 모델을 NVIDIA의 TensorRT 모델 형식으로 변환하는 데 중점을 두었습니다. 이 변환 단계는 YOLO11 모델의 효율성과 속도를 향상시켜 다양한 배포 환경에 더욱 효과적이고 적합하게 만드는 데 매우 중요합니다.
사용법에 대한 자세한 내용은 TensorRT 공식 문서를 참조하십시오.
추가적인 Ultralytics YOLO11 통합에 대해 궁금하시다면, 통합 가이드 페이지에서 광범위한 정보 자료와 통찰력을 얻을 수 있습니다.
FAQ
YOLO11 모델을 TensorRT 형식으로 어떻게 변환합니까?
최적화된 NVIDIA GPU 추론을 위해 Ultralytics YOLO11 모델을 TensorRT 형식으로 변환하려면 다음 단계를 따르세요.
-
필수 패키지 설치:
pip install ultralytics
-
YOLO11 모델 내보내기:
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")
자세한 내용은 YOLO11 설치 가이드 및 내보내기 문서를 참조하세요.
YOLO11 모델에 TensorRT를 사용할 때의 이점은 무엇인가요?
TensorRT를 사용하여 YOLO11 모델을 최적화하면 다음과 같은 여러 가지 이점이 있습니다.
- 더 빠른 추론 속도: TensorRT는 모델 레이어를 최적화하고 정밀도 보정(INT8 및 FP16)을 사용하여 정확도를 크게 저하시키지 않으면서 추론 속도를 높입니다.
- 메모리 효율성: TensorRT는 텐서 메모리를 동적으로 관리하여 오버헤드를 줄이고 GPU 메모리 활용률을 향상시킵니다.
- 레이어 융합: 여러 레이어를 단일 작업으로 결합하여 계산 복잡성을 줄입니다.
- 커널 자동 튜닝: 각 모델 레이어에 대해 최적화된 GPU 커널을 자동으로 선택하여 최대 성능을 보장합니다.
자세한 내용은 NVIDIA의 공식 TensorRT 문서와 Ultralytics의 심층적인 TensorRT 개요를 참조하세요.
YOLO11 모델에 TensorRT와 함께 INT8 양자화를 사용할 수 있습니까?
예, INT8 양자화를 사용하여 TensorRT로 YOLO11 모델을 내보낼 수 있습니다. 이 프로세스에는 PTQ(사후 훈련 양자화) 및 보정이 포함됩니다.
-
INT8로 내보내기:
from ultralytics import YOLO model = YOLO("yolov8n.pt") model.export(format="engine", batch=8, workspace=4, int8=True, data="coco.yaml")
-
추론 실행:
from ultralytics import YOLO model = YOLO("yolov8n.engine", task="detect") result = model.predict("https://ultralytics.com/images/bus.jpg")
자세한 내용은 INT8 양자화를 사용하여 TensorRT 내보내기 섹션을 참조하세요.
NVIDIA Triton Inference Server에 YOLO11 TensorRT 모델을 어떻게 배포합니까?
NVIDIA Triton Inference Server에서 YOLO11 TensorRT 모델을 배포하는 방법은 다음과 같습니다.
- Triton 서버로 Ultralytics YOLOv8 배포: Triton Inference Server 설정 및 사용에 대한 단계별 안내입니다.
- NVIDIA Triton Inference Server 문서: 자세한 배포 옵션 및 구성에 대한 공식 NVIDIA 문서입니다.
이 가이드는 다양한 배포 환경에서 YOLOv8 모델을 효율적으로 통합하는 데 도움이 됩니다.
TensorRT로 내보낸 YOLOv8 모델에서 관찰되는 성능 향상은 무엇입니까?
TensorRT를 사용한 성능 향상은 사용된 하드웨어에 따라 다를 수 있습니다. 다음은 몇 가지 일반적인 벤치마크입니다.
-
NVIDIA A100:
- FP32 추론: ~0.52ms / 이미지
- FP16 추론: ~0.34ms / 이미지
- INT8 추론: ~0.28 ms / 이미지
- INT8 정밀도에서 mAP가 약간 감소했지만 속도는 크게 향상되었습니다.
-
소비자 GPU (예: RTX 3080):
- FP32 추론: ~1.06ms / 이미지
- FP16 추론: ~0.62ms / 이미지
- INT8 추론: ~0.52 ms / 이미지
다양한 하드웨어 구성에 대한 자세한 성능 벤치마크는 성능 섹션에서 확인할 수 있습니다.
TensorRT 성능에 대한 자세한 내용은 Ultralytics 문서 및 성능 분석 보고서를 참조하십시오.