콘텐츠로 건너뛰기

TensorRT YOLO11 모델용 내보내기

고성능 환경에서 컴퓨터 비전 모델을 배포하려면 속도와 효율성을 극대화하는 형식이 필요할 수 있습니다. NVIDIA GPU에 모델을 배포하는 경우 특히 그렇습니다.

TensorRT 내보내기 형식을 사용하여 모델을 향상시킬 수 있습니다. Ultralytics YOLO11NVIDIA 하드웨어에서 신속하고 효율적인 추론을 위한 모델을 향상시킬 수 있습니다. 이 가이드는 변환 과정을 쉽게 따라할 수 있는 단계를 제공하며, 딥 러닝 프로젝트에서 NVIDIA 의 고급 기술을 최대한 활용할 수 있도록 도와줍니다.

TensorRT

TensorRT 개요

TensorRT에서 개발한 NVIDIA 은 고속 딥러닝 추론을 위해 설계된 고급 소프트웨어 개발 키트(SDK)입니다. 객체 감지와 같은 실시간 애플리케이션에 적합합니다.

이 툴킷은 딥 러닝 모델을 NVIDIA GPU에 최적화하여 더 빠르고 효율적인 작업을 가능하게 합니다. TensorRT 모델은 레이어 융합, 정밀 보정(INT8 및 FP16), 동적 tensor 메모리 관리 및 커널 자동 튜닝과 같은 기술을 포함하는 TensorRT 최적화를 거칩니다. 딥 러닝 모델을 TensorRT 형식으로 변환하면 개발자는 NVIDIA GPU의 잠재력을 완전히 실현할 수 있습니다.

TensorRT 를 포함한 다양한 모델 형식과의 호환성으로 유명하며 TensorFlow, PyTorch, ONNX 등 다양한 프레임워크의 모델을 통합하고 최적화할 수 있는 유연한 솔루션을 개발자에게 제공합니다. 이러한 다용도성 덕분에 다양한 하드웨어 및 소프트웨어 환경에서 효율적으로 모델을 배포할 수 있습니다.

TensorRT 모델의 주요 기능

TensorRT 모델은 고속 딥 러닝 추론의 효율성과 효과에 기여하는 다양한 주요 기능을 제공합니다:

  • 정밀 보정: TensorRT 에서는 정밀 보정을 지원하여 특정 정확도 요건에 맞게 모델을 미세 조정할 수 있습니다. 여기에는 허용 가능한 정확도 수준을 유지하면서 추론 속도를 더욱 높일 수 있는 INT8 및 FP16과 같은 감소된 정밀도 형식에 대한 지원이 포함됩니다.

  • 레이어 퓨전: TensorRT 최적화 프로세스에는 신경망의 여러 계층을 단일 연산으로 결합하는 계층 융합이 포함됩니다. 이렇게 하면 메모리 액세스 및 계산을 최소화하여 계산 오버헤드를 줄이고 추론 속도를 향상시킬 수 있습니다.

TensorRT 레이어 퓨전

  • 동적 Tensor 메모리 관리: TensorRT 추론 중 tensor 메모리 사용량을 효율적으로 관리하여 메모리 오버헤드를 줄이고 메모리 할당을 최적화합니다. 그 결과 GPU 메모리 사용률이 더욱 효율적입니다.

  • 자동 커널 튜닝: TensorRT 은 모델의 각 레이어에 가장 최적화된 GPU 커널을 선택하기 위해 자동 커널 튜닝을 적용합니다. 이 적응형 접근 방식은 모델이 GPU의 연산 능력을 최대한 활용할 수 있도록 합니다.

배포 옵션 TensorRT

YOLO11 모델을 TensorRT 형식으로 내보내는 코드를 살펴보기 전에 TensorRT 모델이 일반적으로 사용되는 위치를 이해해 보겠습니다.

TensorRT 는 여러 가지 배포 옵션을 제공하며, 각 옵션은 통합 용이성, 성능 최적화, 유연성 간의 균형을 다르게 유지합니다:

  • TensorFlow 내에 배포: 이 방법은 TensorRT 을 TensorFlow 에 통합하여 익숙한 TensorFlow 환경에서 최적화된 모델을 실행할 수 있도록 합니다. 지원되는 레이어와 지원되지 않는 레이어가 혼합된 모델에 유용하며, TF-TRT는 이를 효율적으로 처리할 수 있습니다.

TensorRT 개요

  • 독립형 TensorRT 런타임 API: 세분화된 제어 기능을 제공하여 성능이 중요한 애플리케이션에 이상적입니다. 더 복잡하지만 지원되지 않는 연산자를 사용자 지정으로 구현할 수 있습니다.

  • NVIDIA Triton 추론 서버: 다양한 프레임워크의 모델을 지원하는 옵션입니다. 특히 클라우드 또는 에지 추론에 적합하며, 동시 모델 실행 및 모델 분석과 같은 기능을 제공합니다.

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)를 추가합니다.
batch int 1 내보내기 모델 일괄 추론 크기 또는 내보낸 모델이 동시에 처리할 최대 이미지 수를 지정합니다. predict 모드로 전환합니다.
data str 'coco8.yaml' 경로 데이터 세트 구성 파일(기본값: coco8.yaml), 정량화에 필수적인 요소입니다.

내보내기 프로세스에 대한 자세한 내용은 내보내기 관련 문서 페이지(Ultralytics )를 참조하세요.

INT8 정량화를 사용하여 TensorRT 내보내기

INT8 정밀도로 TensorRT 를 사용하여 Ultralytics YOLO 모델을 내보내면 학습 후 정량화(PTQ)가 실행됩니다. TensorRT 는 PTQ에 대한 보정을 사용하여 YOLO 모델이 대표 입력 데이터에 대한 추론을 처리할 때 각 활성화 tensor 내의 활성화 분포를 측정한 다음 이 분포를 사용하여 각 tensor 에 대한 척도 값을 추정합니다. 정량화 후보인 각 활성화 tensor 에는 보정 프로세스를 통해 추론되는 관련 척도가 있습니다.

암시적으로 양자화된 네트워크를 처리할 때 TensorRT 은 계층 실행 시간을 최적화하기 위해 기회주의적으로 INT8을 사용합니다. 레이어가 INT8에서 더 빠르게 실행되고 데이터 입력 및 출력에 양자화 스케일이 할당된 경우, INT8 정밀도를 가진 커널이 해당 레이어에 할당되고, 그렇지 않은 경우 TensorRT 는 해당 레이어의 실행 시간이 더 빠른 것을 기준으로 커널에 대해 FP32 또는 FP16의 정밀도를 선택합니다.

캘리브레이션 결과는 기기마다 다를 수 있으므로 배포에 TensorRT 모델 가중치를 사용할 동일한 기기를 INT8 정밀도로 내보내는 데 사용하는 것이 중요합니다.

INT8 내보내기 구성

사용 시 제공되는 인수 내보내기 Ultralytics YOLO 모델의 경우 크게 는 내보낸 모델의 성능에 영향을 줍니다. 또한 사용 가능한 장치 리소스에 따라 선택해야 하지만 기본 인수는 다음과 같습니다. should 대부분의 작업 Ampere(또는 최신 버전) NVIDIA 외장형 GPU. 사용되는 보정 알고리즘은 "ENTROPY_CALIBRATION_2" 에서 사용 가능한 옵션에 대한 자세한 내용을 확인할 수 있습니다. TensorRT 개발자 가이드에서. Ultralytics 테스트 결과 "ENTROPY_CALIBRATION_2" 가 최선의 선택이었으며 내보내기는 이 알고리즘을 사용하도록 고정되어 있습니다.

  • 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개 이상의 보정 이미지를 사용할 것을 권장했습니다. 이는 가이드라인일 뿐 hard 요구 사항 및 데이터 세트의 성능을 잘 발휘하는 데 필요한 것이 무엇인지 실험해 보아야 합니다. INT8 캘리브레이션에는 TensorRT 을 사용한 캘리브레이션 데이터가 필요하므로 반드시 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,  
    batch=8,  
    workspace=4,  
    int8=True,
    data="coco.yaml",  
)

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

# Run inference
result = model.predict("https://ultralytics.com/images/bus.jpg")
# 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'
보정 캐시

TensorRT 은 캘리브레이션을 생성합니다. .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

성능

우분투 22.04.3 LTS에서 테스트했습니다, python 3.10.12, ultralytics==8.2.4, tensorrt==8.6.1.post1

사전 학습된 80개의 클래스를 포함하여 COCO에서 학습된 이러한 모델의 사용 예제는 탐지 문서를 참조하세요.

참고

다음에 대한 추론 시간이 표시됩니다. mean, min (가장 빠름), 그리고 max (가장 느린) 사전 학습된 가중치를 사용하여 각 테스트에 대해 yolov8n.engine

정밀도 평가 테스트 평균
(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

세분화 문서에서 80개의 사전 훈련된 클래스를 포함하여 COCO에서 훈련된 이러한 모델의 사용 예시를 확인하세요.

참고

다음에 대한 추론 시간이 표시됩니다. mean, min (가장 빠름), 그리고 max (가장 느린) 사전 학습된 가중치를 사용하여 각 테스트에 대해 yolov8n-seg.engine

정밀도 평가 테스트 평균
(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

정밀도 평가 테스트 평균
(ms)
최소 | 최대
(ms)
top-1 상위 5위 batch 크기
(픽셀)
FP32 예측 0.26 0.25 | 0.28 8 640
FP32 이미지넷밸 0.26 0.35 0.61 1 640
FP16 예측 0.18 0.17 | 0.19 8 640
FP16 이미지넷밸 0.18 0.35 0.61 1 640
INT8 예측 0.16 0.15 | 0.57 8 640
INT8 이미지넷밸 0.15 0.32 0.59 1 640

사전 학습된 클래스인 '사람' 1개를 포함하여 COCO에서 학습된 이러한 모델의 사용 예는 포즈 추정 문서를 참조하세요.

참고

다음에 대한 추론 시간이 표시됩니다. mean, min (가장 빠름), 그리고 max (가장 느린) 사전 학습된 가중치를 사용하여 각 테스트에 대해 yolov8n-pose.engine

정밀도 평가 테스트 평균
(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

사전 학습된 15개의 클래스가 포함된 DOTAv1에서 학습된 이러한 모델의 사용 예제는 지향 탐지 문서를 참조하세요.

참고

다음에 대한 추론 시간이 표시됩니다. mean, min (가장 빠름), 그리고 max (가장 느린) 사전 학습된 가중치를 사용하여 각 테스트에 대해 yolov8n-obb.engine

정밀도 평가 테스트 평균
(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

정밀도 평가 테스트 평균
(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

정밀도 평가 테스트 평균
(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

정밀도 평가 테스트 평균
(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) 우분투 22.04.4 LTS로 테스트했습니다, python 3.10.12, ultralytics==8.2.16, tensorrt==10.0.1

참고

다음에 대한 추론 시간이 표시됩니다. mean, min (가장 빠름), 그리고 max (가장 느린) 사전 학습된 가중치를 사용하여 각 테스트에 대해 yolov8n.engine

정밀도 평가 테스트 평균
(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 모델을 배포하는 방법에 대한 자세한 지침은 다음 리소스를 참조하세요:

요약

이 가이드에서는 Ultralytics YOLO11 모델을 NVIDIA 의 TensorRT 모델 형식으로 변환하는 데 중점을 두었습니다. 이 변환 단계는 YOLO11 모델의 효율성과 속도를 개선하여 보다 효과적이고 다양한 배포 환경에 적합하게 만드는 데 매우 중요합니다.

사용법에 대한 자세한 내용은 TensorRT 공식 문서를 참조하세요.

추가 통합에 대해 궁금한 점이 있다면 Ultralytics YOLO11 통합 가이드 페이지에서 유익한 리소스와 인사이트를 확인할 수 있습니다.

자주 묻는 질문

YOLO11 모델을 TensorRT 형식으로 변환하려면 어떻게 해야 하나요?

최적화된 NVIDIA GPU 추론을 위해 Ultralytics YOLO11 모델을 TensorRT 형식으로 변환하려면 다음 단계를 따르세요:

  1. 필요한 패키지를 설치합니다:

    pip install ultralytics
    
  2. 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 을 사용하면 어떤 이점이 있나요?

YOLO11 모델을 최적화하기 위해 TensorRT 을 사용하면 몇 가지 이점이 있습니다:

  • 추론 속도 향상: TensorRT 모델 레이어를 최적화하고 정밀 보정(INT8 및 FP16)을 사용하여 정확도를 크게 떨어뜨리지 않으면서 추론 속도를 높입니다.
  • 메모리 효율성: TensorRT 은 tensor 메모리를 동적으로 관리하여 오버헤드를 줄이고 GPU 메모리 사용률을 개선합니다.
  • 레이어 퓨전: 여러 레이어를 단일 작업으로 결합하여 계산 복잡성을 줄입니다.
  • 커널 자동 튜닝: 각 모델 레이어에 최적화된 GPU 커널을 자동으로 선택하여 최대 성능을 보장합니다.

자세한 내용은 TensorRT 에서 자세한 기능을 살펴보고 TensorRT 개요 섹션을 참조하세요.

YOLO11 모델에 INT8 정량화를 TensorRT 으로 사용할 수 있나요?

예, INT8 정량화와 함께 TensorRT 모델을 사용하여 YOLO11 모델을 내보낼 수 있습니다. 이 과정에는 훈련 후 정량화(PTQ) 및 보정이 포함됩니다:

  1. INT8로 내보내기:

    from ultralytics import YOLO
    
    model = YOLO("yolov8n.pt")
    model.export(format="engine", batch=8, workspace=4, int8=True, data="coco.yaml")
    
  2. 추론을 실행합니다:

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

자세한 내용은 INT8 정량화를 사용하여 TensorRT 내보내기 섹션을 참조하세요.

NVIDIA Triton 추론 서버에 YOLO11 TensorRT 모델을 배포하려면 어떻게 해야 하나요?

NVIDIA Triton 추론 서버에 YOLO11 TensorRT 모델을 배포하는 작업은 다음 리소스를 사용하여 수행할 수 있습니다:

이 가이드는 다양한 배포 환경에서 YOLOv8 모델을 효율적으로 통합하는 데 도움이 됩니다.

TensorRT 으로 내보낸 YOLOv8 모델에서는 어떤 성능 개선이 관찰되나요?

TensorRT 의 성능 향상은 사용하는 하드웨어에 따라 달라질 수 있습니다. 다음은 몇 가지 일반적인 벤치마크입니다:

  • NVIDIA A100:

    • FP32 추론: ~0.52ms/이미지
    • FP16 추론: ~0.34ms/이미지
    • INT8 추론: ~0.28ms/이미지
    • INT8 정밀도로 맵은 약간 감소했지만 속도는 크게 향상되었습니다.
  • 소비자용 GPU(예: RTX 3080):

    • FP32 추론: ~1.06ms/이미지
    • FP16 추론: ~0.62ms/이미지
    • INT8 추론: ~0.52ms/이미지

다양한 하드웨어 구성에 대한 자세한 성능 벤치마크는 성능 섹션에서 확인할 수 있습니다.

TensorRT 성능에 대한 보다 포괄적인 인사이트는 Ultralytics 문서와 성능 분석 보고서를 참조하세요.

📅1 년 전 생성됨 ✏️ 업데이트됨 3 일 전

댓글