当前位置: 首页 > news >正文

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:
    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()
with open(engine_path, 'rb') as f, trt.Runtime(TRT_LOGGER) as runtime:
    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);
delete[] model_stream;

替换为

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);

相关文章:

  • DeepSeek 损失函数、奖励函数、训练过程
  • Docker01 - docker快速入门
  • MFC获取所有硬件厂商和序列号
  • JSX 实现列表渲染
  • 为AI聊天工具添加一个知识系统 之125 详细设计之66 智能语义网络
  • DeepSeek赋能智慧港口:点亮全球航运的智慧灯塔,开启智能航运新纪元
  • Vue框架的使用 搭建打包 Vue的安全问题(Xss,源码泄露)
  • Vue3状态管理新选择:Pinia使用完全指南
  • 和鲸科技携手四川气象,以 AI 的力量赋能四川气象一体化平台建设
  • 课程2. 用PyTorch训练神经网络与梯度下降
  • NAT 技术:网络中的 “地址魔术师”
  • a_init: Unable to get log name. Retval:[-4]是什么故障
  • javaweb将上传的图片保存在项目文件webapp下的upload文件夹下
  • PyCharm 的使用 + PyCharm快捷键 + 切换中文界面
  • 管理后台环境配置
  • C++ 中 cin 和 cout 教程
  • Exoplayer(MediaX)实现音频变调和变速播放
  • git -学习笔记
  • vscode下载安装教程(附安装包)vscode图文安装教程最新版
  • leetcode707----设计链表【链表增删改打印等操作】
  • 肖钢:一季度证券业金融科技投资强度在金融各子行业中居首
  • 2024年全国博物馆接待观众14.9亿人次
  • 中国纪检监察刊文:力戒形式主义官僚主义关键是要坚持实事求是
  • 媒体评欧阳娜娜遭民进党当局威胁:艺人表达国家认同是民族大义
  • 一涉嫌开设赌场的网上在逃人员在山东威海落网
  • 董军同德国国防部长举行会谈