jetson nano tensorrt yolov8
时间: 2024-12-27 18:25:12 浏览: 4
### 在 Jetson Nano 上使用 TensorRT 部署 YOLOv8 模型
#### 准备工作
确保 Jetson Nano 的开发环境已经安装了必要的软件包,包括 OpenCV 版本不低于 3.4.9、TensorRT 7.2.1.6 或更高版本、PyTorch 1.6 及其依赖项 CUDA-10.2 和 cuDNN-8[^2]。
#### 下载预训练模型权重与配置文件
获取官方发布的 YOLOv8 权重文件以及对应的 PyTorch 模型定义脚本。可以从 Ultralytics 官方 GitHub 仓库下载最新版的 YOLOv8 训练好的权重和源码。
```bash
git clone https://github.com/ultralytics/ultralytics.git
cd ultralytics/
pip install -r requirements.txt
```
#### 将 PyTorch 模型导出为 ONNX 格式
利用 `torch.onnx.export()` 方法把训练完成后的 .pt 文件转化为中间表示形式即 ONNX (Open Neural Network Exchange),这一步骤对于后续转换成 TensorRT 所需的引擎至关重要。
```python
import torch
from models.experimental import attempt_load
device = 'cuda' if torch.cuda.is_available() else 'cpu'
model = attempt_load('yolov8.pt', map_location=device) # 加载模型
dummy_input = torch.randn(1, 3, 640, 640).to(device)
output_onnx = './yolov8.onnx'
input_names = ["image"]
output_names = ['num_detections', 'boxes', 'scores', 'classes']
torch.onnx.export(model,
dummy_input,
output_onnx,
export_params=True,
opset_version=11,
do_constant_folding=True,
input_names=input_names,
output_names=output_names,
dynamic_axes={'image': {0: 'batch_size'}})
print(f"ONNX model has been saved to '{output_onnx}'")
```
#### 使用 trtexec 工具或 Python API 转换 ONNX 至 TensorRT 引擎
通过 NVIDIA 提供的命令行工具 `trtexec` 或者编写自定义 Python 程序调用 TensorRT 的 Python 接口来实现这一过程。这里给出基于 Python 的解决方案:
```python
import tensorrt as trt
TRT_LOGGER = trt.Logger(trt.Logger.WARNING)
def build_engine(onnx_file_path):
with trt.Builder(TRT_LOGGER) as builder,\
builder.create_network(
flags=1 << int(trt.NetworkDefinitionCreationFlag.EXPLICIT_BATCH))\
as network,\
trt.OnnxParser(network, TRT_LOGGER)\
as parser:
config = builder.create_builder_config()
config.max_workspace_size = 1 << 30 # 设置最大 workspace 大小为 1GB
with open(onnx_file_path, 'rb') as model:
parsed = parser.parse(model.read())
engine = builder.build_serialized_network(network, config)
return engine
engine = build_engine('./yolov8.onnx')
with open("./yolov8.engine", "wb") as f:
f.write(bytearray(engine))
print("Exported TensorRT Engine.")
```
#### 测试部署效果
最后,在 Jetson Nano 设备上加载生成的 `.engine` 文件,并集成至应用程序中测试推理性能。可以参考 DeepStream SDK 文档中的实例代码片段来进行实际项目的适配[^1]。
阅读全文