天天看点

Jetson安装JetBot报error: ‘kNCHW’ is not a member of以及“nvinfer1::IPluginV2::enqueue” has no overrider等解决

 TensorRT 8 现已全面上市,并免费向 NVIDIA 开发者计划成员提供。用户还可从 TensorRT GitHub 库中获得最新版本插件、解析器和样本的开放源代码。

开源希望对像我这样的小白就是友好,希望大家都分享自己的问题共同进步

报错的地方忘了保存了方法记录一下英伟达的更新地址

Jetpack 4.5.1及以前的版本4.x里使用的是TensorRT 7.1.3,JetPack 4.6开始则是使用的TensorRT 8,由于我们在模型加速上多是建立在TensorRT的基础上的,而TensorRT 8没有完全保证对TensorRT 7.x的兼容,所以受TensorRT这个版本的变化对封装调用模型的部分代码是有影响的,在Jetpack 4.5 + Deepstream 5开发的程序涉及到AI模型的部分在Jetpack 4.6 + Deepstream 6下很可能编译都会出错,无法跑起来。Documentation Archives :: NVIDIA Deep Learning TensorRT Documentation

Jetson安装JetBot报error: ‘kNCHW’ is not a member of以及“nvinfer1::IPluginV2::enqueue” has no overrider等解决
Jetson安装JetBot报error: ‘kNCHW’ is not a member of以及“nvinfer1::IPluginV2::enqueue” has no overrider等解决

一、问题1:“Looser throw specifier for ‘xxxxxxxxxx’”

例子:

looser throw specifier for ‘virtual void Logger::log(nvinfer1::ILogger::Severity, const char*)’

解决:

在函数中加入

noexcept

因为,在tensorrt8.0版本中函数的定义是:

void Logger::log(Severity severity, const char* msg) noexcept
           

所以自己的报错的函数对应也改为:

virtual void log(Severity severity, const char* msg) noexcept override;
           

其他报错Looser throw specifier的同样解决方法,增加

noexcept

参考连接TensorRT8 使用手记(2)noexcept 关键字的使用 - 简书 (jianshu.com)

二、报错如下:yololayer.h(54): warning: function “nvinfer1::IPluginV2::enqueue(int32_t, const void *const *, void *const *, void *, cudaStream_t)” is hidden by “nvinfer1::YoloLayerPlugin::enqueue” – virtual function override intended?

yololayer.cu(156): error: object of abstract class type “nvinfer1::YoloLayerPlugin” is not allowed:

pure virtual function “nvinfer1::IPluginV2::enqueue” has no overrider

yololayer.cu(299): error: object of abstract class type “nvinfer1::YoloLayerPlugin” is not allowed:

pure virtual function “nvinfer1::IPluginV2::enqueue” has no overrider

yololayer.cu(308): error: object of abstract class type “nvinfer1::YoloLayerPlugin” is not allowed:

pure virtual function “nvinfer1::IPluginV2::enqueue” has no overrider

解决方法:将virtual int enqueue(int batchSize, const voidconst * inputs, void** outputs, void workspace, cudaStream_t stream) override;改成virtual int32_t enqueue(int32_t batchSize, void const* const* inputs, void* const* outputs, void* workspace, cudaStream_t stream) noexcept;

参考连接如下

(4条消息) 如何将基于Jetpack 4.5 + Deepstream 5开发的程序升级到Jetpack 4.6 + Deepstream 6_Arnold-FY-Chen的博客-CSDN博客 (有未读消息)小车--AGX上移植程序,TensorRT版本升级遇到的问题(7.X---8.0.1.6)-pudn.com

三、error: ‘kNCHW’ is not a member of ‘nvinfer1::PluginFormat {aka nvinfer1::TensorFormat}’

         return (type == DataType::kFLOAT && format == PluginFormat::kNCHW);

参考连接TensorRT: nvinfer1 Namespace Reference (nvidia.com)

Looser throw specifier for 'virtual void Logger::log' - Deep Learning (Training & Inference) / TensorRT - NVIDIA Developer Forums 参考连接TensorRT8 使用手记(3)维度表示 - 简书 (jianshu.com)

参考连接【经验分享】TensorRT8 vs TensorRT7 接口增删汇总_wx621f3bb1e27ee的技术博客_51CTO博客 

 NVIDIA 发布TensorRT 8,在推理方面取得重大突破 - 知乎 (zhihu.com)

继续阅读