Ultralytics导出的Engine模型直接加载报错

方法1: 注销掉exporter.py文件夹对应的部分

with build(network, config) as engine, open(f, "wb") as t:
    # Metadata
    meta = json.dumps(self.metadata)
    t.write(len(meta).to_bytes(4, byteorder="little", signed=True))
    t.write(meta.encode())
    # Model
    t.write(engine if is_trt10 else engine.serialize())

替换为

with build(network, config) as engine, open(f, "wb") as t:
    # Metadata
    # meta = json.dumps(self.metadata)
    # t.write(len(meta).to_bytes(4, byteorder="little", signed=True))
    # t.write(meta.encode())
    # Model
    t.write(engine if is_trt10 else engine.serialize())

方法2:加载模型时去掉元数据
python环境下

with open(engine_path, 'rb') as f, trt.Runtime(TRT_LOGGER) as runtime:
    engine = runtime.deserialize_cuda_engine(f.read())

替换为

with open(engine_path, 'rb') as f, trt.Runtime(TRT_LOGGER) as runtime:
    metadata_length_bytes = f.read(4)
    metadata_length = int.from_bytes(metadata_length_bytes, byteorder='little', signed=True)
    f.seek(metadata_length, 1)
    engine_data = f.read()
    engine = runtime.deserialize_cuda_engine(engine_data)

cpp环境下

std::ifstream file_ptr(model_path_engine, std::ios::binary);
size_t size = 0;
file_ptr.seekg(0, file_ptr.end);
size = file_ptr.tellg();
file_ptr.seekg(0, file_ptr.beg);
char* model_stream = new char[size];
file_ptr.read(model_stream, size);
file_ptr.close();
nvinfer1::IRuntime* runtime = nvinfer1::createInferRuntime(logger);
nvinfer1::ICudaEngine* engine = runtime->deserializeCudaEngine(model_stream, size);

替换为

std::ifstream engineFile(model_path_engine, std::ios::binary);
int32_t metadataLength = 0;
engineFile.read(reinterpret_cast<char*>(&metadataLength), sizeof(metadataLength));
engineFile.seekg(metadataLength, std::ios::cur);
std::vector<char> engineData((std::istreambuf_iterator<char>(engineFile)),
	std::istreambuf_iterator<char>());
engineFile.close();
nvinfer1::IRuntime* runtime = nvinfer1::createInferRuntime(logger);
nvinfer1::ICudaEngine* engine = runtime->deserializeCudaEngine(engineData.data(), engineData.size(), nullptr);
### YoloV11 Engine 模型下载与使用教程 #### 工具准备 为了能够顺利运行 YoloV11 的 `.engine` 文件,需要安装 NVIDIA TensorRT 和 PyTorch。TensorRT 是一种高性能深度学习推理库,支持优化后的神经网络部署到生产环境中[^1]。 #### 导出 YoloV11 Engine 模型 如果尚未拥有 `.engine` 文件,则可以通过 `trtexec` 命令将其从原始权重文件换而来。以下是具体操作: ```bash trtexec --onnx=yolov11.onnx --saveEngine=yolov11.engine --workspace=4096 --fp16 ``` 上述命令会基于 ONNX 格式的模型文件生成对应的 TensorRT engine 文件,并启用 FP16 精度模式以减少计算资源消耗的同时保持较高的精度水平[^3]。 #### 加载并执行推理过程 加载已有的 `.engine` 文件可以借助 Ultralytics 提供的官方接口完成。下面是一个简单的 Python 脚本用于演示如何利用预训练好的 YoloV11 进行图片的目标检测任务: ```python from ultralytics import YOLO model = YOLO("yolov11.engine") results = model( source="image.jpg", conf=0.25, iou=0.45, max_det=1000, save=True, device="cuda" ) for r in results: boxes = r.boxes # Boxes object for bbox outputs masks = r.masks # Masks object for mask outputs probs = r.probs # Class probabilities for classification outputs ``` 此脚本定义了一个名为 `model` 的对象来表示我们的 YoloV11 模型实例;随后调用了该对象的方法传入待处理图像路径以及其他一些超参数设置来进行预测工作。 需要注意的是,在实际应用过程中可能会遇到由于类别数量不匹配而导致报错的情况。此时可以根据实际情况调整配置或者尝试修改源码中的相应部分解决此类问题[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值