119 lines
3.5 KiB
Python
119 lines
3.5 KiB
Python
#!/usr/bin/env python3
|
||
"""
|
||
测试 TensorRT 引擎加载和推理
|
||
使用随机图像测试
|
||
"""
|
||
|
||
import numpy as np
|
||
import time
|
||
from ultralytics import YOLO
|
||
|
||
|
||
def test_tensorrt_engine():
|
||
"""测试 TensorRT 引擎"""
|
||
print("TensorRT 引擎测试")
|
||
print("=" * 60)
|
||
|
||
engine_path = "C:/Users/16337/PycharmProjects/Security/yolo11n.engine"
|
||
|
||
# 1. 加载引擎
|
||
print(f"🚀 加载 TensorRT 引擎: {engine_path}")
|
||
try:
|
||
model = YOLO(engine_path, task='detect')
|
||
print("✅ 引擎加载成功")
|
||
except Exception as e:
|
||
print(f"❌ 引擎加载失败: {e}")
|
||
return
|
||
|
||
# 2. 测试单帧推理
|
||
print(f"\n🔄 测试单帧推理...")
|
||
test_image = np.random.randint(0, 255, (640, 640, 3), dtype=np.uint8)
|
||
|
||
try:
|
||
start_time = time.time()
|
||
results = model.predict(
|
||
test_image,
|
||
imgsz=640,
|
||
conf=0.45,
|
||
verbose=False,
|
||
device=0
|
||
)
|
||
elapsed = (time.time() - start_time) * 1000
|
||
print(f"✅ 单帧推理成功,耗时: {elapsed:.1f}ms")
|
||
except Exception as e:
|
||
print(f"❌ 单帧推理失败: {e}")
|
||
import traceback
|
||
traceback.print_exc()
|
||
return
|
||
|
||
# 3. 测试批量推理
|
||
print(f"\n🔄 测试批量推理(batch=4)...")
|
||
test_images = [np.random.randint(0, 255, (640, 640, 3), dtype=np.uint8) for _ in range(4)]
|
||
|
||
try:
|
||
start_time = time.time()
|
||
results = model.predict(
|
||
test_images,
|
||
imgsz=640,
|
||
conf=0.45,
|
||
verbose=False,
|
||
device=0
|
||
)
|
||
elapsed = (time.time() - start_time) * 1000
|
||
per_frame = elapsed / 4
|
||
print(f"✅ 批量推理成功,总耗时: {elapsed:.1f}ms,每帧: {per_frame:.1f}ms")
|
||
except Exception as e:
|
||
print(f"❌ 批量推理失败: {e}")
|
||
import traceback
|
||
traceback.print_exc()
|
||
return
|
||
|
||
# 4. 性能测试
|
||
print(f"\n🔄 性能测试(100帧)...")
|
||
inference_times = []
|
||
|
||
try:
|
||
for i in range(100):
|
||
test_image = np.random.randint(0, 255, (640, 640, 3), dtype=np.uint8)
|
||
|
||
start_time = time.time()
|
||
results = model.predict(
|
||
test_image,
|
||
imgsz=640,
|
||
conf=0.45,
|
||
verbose=False,
|
||
device=0
|
||
)
|
||
elapsed = (time.time() - start_time) * 1000
|
||
inference_times.append(elapsed)
|
||
|
||
if (i + 1) % 20 == 0:
|
||
print(f" 进度: {i+1}/100")
|
||
|
||
print(f"\n{'='*60}")
|
||
print("性能统计")
|
||
print(f"{'='*60}")
|
||
print(f"平均推理延迟: {np.mean(inference_times):.1f}ms")
|
||
print(f"P50推理延迟: {np.percentile(inference_times, 50):.1f}ms")
|
||
print(f"P95推理延迟: {np.percentile(inference_times, 95):.1f}ms")
|
||
print(f"P99推理延迟: {np.percentile(inference_times, 99):.1f}ms")
|
||
print(f"最小延迟: {np.min(inference_times):.1f}ms")
|
||
print(f"最大延迟: {np.max(inference_times):.1f}ms")
|
||
print(f"{'='*60}")
|
||
|
||
print("\n✅ 所有测试通过!TensorRT 引擎工作正常")
|
||
|
||
except Exception as e:
|
||
print(f"❌ 性能测试失败: {e}")
|
||
import traceback
|
||
traceback.print_exc()
|
||
|
||
|
||
if __name__ == "__main__":
|
||
try:
|
||
test_tensorrt_engine()
|
||
except Exception as e:
|
||
print(f"\n❌ 测试异常: {e}")
|
||
import traceback
|
||
traceback.print_exc()
|