Yolov5-in-Deepstream-5.0/Deepstream 5.0/nvdsinfer_custom_impl_Yolo$ make g++ -c -o nvdsinfer_yolo_engine.o -Wall -std=c++11 -shared -fPIC -Wno-error=deprecated-declarations -I../includes -I/usr/local/cuda-11.3/include nvdsinfer_yolo_engine.cpp g++ -c -o nvdsparsebbox_Yolo.o -Wall -std=c++11 -shared -fPIC -Wno-error=deprecated-declarations -I../includes -I/usr/local/cuda-11.3/include nvdsparsebbox_Yolo.cpp g++ -c -o trt_utils.o -Wall -std=c++11 -shared -fPIC -Wno-error=deprecated-declarations -I../includes -I/usr/local/cuda-11.3/include trt_utils.cpp trt_utils.cpp: In function ‘nvinfer1::ILayer* netAddMaxpool(int, std::map<std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char> >&, nvinfer1::ITensor*, nvinfer1::INetworkDefinition*)’: trt_utils.cpp:145:96: warning: ‘virtual nvinfer1::IPoolingLayer* nvinfer1::INetworkDefinition::addPooling(nvinfer1::ITensor&, nvinfer1::PoolingType, nvinfer1::DimsHW)’ is deprecated [-Wdeprecated-declarations] >addPooling(*input, nvinfer1::PoolingType::kMAX, nvinfer1::DimsHW{size, size}); ^ In file included from trt_utils.h:35:0, from trt_utils.cpp:23: /usr/include/aarch64-linux-gnu/NvInfer.h:4956:43: note: declared here TRT_DEPRECATED virtual IPoolingLayer* addPooling( ^~~~~~~~~~ trt_utils.cpp:148:53: warning: ‘virtual void nvinfer1::IPoolingLayer::setStride(nvinfer1::DimsHW)’ is deprecated [-Wdeprecated-declarations] pool->setStride(nvinfer1::DimsHW{stride, stride}); ^ In file included from trt_utils.h:35:0, from trt_utils.cpp:23: /usr/include/aarch64-linux-gnu/NvInfer.h:1736:33: note: declared here TRT_DEPRECATED virtual void setStride(DimsHW stride) TRTNOEXCEPT = 0; ^~~~~~~~~ trt_utils.cpp: In function ‘nvinfer1::ILayer* netAddConvLinear(int, std::map<std::__cxx11::basic
时间: 2025-07-15 12:36:30 浏览: 11
<think>好的,用户给了一个关于在DeepStream 5.0中编译YOLOv5自定义模型时遇到的警告信息的问题。首先,我需要理解用户提供的日志内容。看起来他们在执行make命令时,编译过程中出现了几个关于已弃用函数的警告,特别是在trt_utils.cpp文件中的某些函数被标记为过时。
首先,我应该考虑用户可能的背景。他们可能是在尝试将YOLOv5模型集成到DeepStream 5.0中,这可能涉及到生成自定义的解析库。用户可能对TensorRT和DeepStream的集成不太熟悉,或者在升级环境后遇到了兼容性问题。由于警告涉及TensorRT的API弃用,用户可能担心这些警告是否会导致运行时错误,或者如何修复这些警告。
接下来,我需要分解日志中的关键信息。编译命令使用的是g++,参数包括-std=c++11,这可能会影响可用的TensorRT API版本。警告指出addPooling和setStride方法已被弃用,这通常意味着在未来的TensorRT版本中这些方法会被移除,或者有新的替代方法。用户可能正在使用较新的TensorRT版本,而示例代码可能基于旧版本编写,导致兼容性问题。
然后,我需要考虑如何解决这些警告。可能的解决方案包括更新代码以使用新的TensorRT API,或者调整编译选项,但这可能不实际。另外,用户可能只是想忽略这些警告,但需要确认是否会影响功能。
同时,用户提供的Makefile可能引用了CUDA 11.3,但当前环境可能安装了更高版本的TensorRT,导致API不兼容。需要检查TensorRT版本是否与代码兼容,或者是否需要修改代码以适应新版本。
另外,用户可能没有意识到这些只是警告而非错误,所以编译应该成功生成.so文件,但存在潜在的未来兼容性问题。需要建议用户确认生成的文件是否可用,并评估是否需要立即处理这些警告。
总结来说,用户需要了解这些警告的原因,可能的解决方案,以及是否需要立即采取行动。我应该分步骤解释问题来源,提供修改建议,并指导如何验证解决方案是否有效。同时,提醒用户注意版本兼容性,并参考官方文档或社区资源获取更新后的代码示例。</think>根据你提供的编译日志和问题描述,这是一个在DeepStream 5.0中编译YOLOv5自定义模型解析插件时遇到的TensorRT API弃用警告问题。以下是逐步分析:
---
### 一、问题本质
这是TensorRT API版本兼容性问题。你的代码中使用了旧版TensorRT的`addPooling`和`setStride`接口,而当前环境中的TensorRT版本(从路径`/usr/include/aarch64-linux-gnu/NvInfer.h`看是Jetson平台)已弃用这些方法。
---
### 二、关键警告解析
```log
warning: ‘virtual nvinfer1::IPoolingLayer* nvinfer1::INetworkDefinition::addPooling(...)’ is deprecated
warning: ‘virtual void nvinfer1::IPoolingLayer::setStride(...)’ is deprecated
```
- **触发位置**:`trt_utils.cpp`第145行和第148行
- **原因**:TensorRT 8+ 开始使用新的网络构建API(`addPoolingNd`替代`addPooling`)
---
### 三、解决方案
#### 步骤1:修改TensorRT API调用
将旧的2D池化接口替换为新的通用维度接口:
```cpp
// 旧代码(弃用)
nvinfer1::IPoolingLayer* pool = network->addPooling(...);
// 新代码(TensorRT 8+)
nvinfer1::IPoolingLayer* pool = network->addPoolingNd(
*input,
nvinfer1::PoolingType::kMAX,
nvinfer1::DimsHW{size, size} // 注意Dim类型可能需要调整
);
pool->setStrideNd(nvinfer1::DimsHW{stride, stride}); // 使用setStrideNd替代
```
#### 步骤2:验证TensorRT版本
通过以下命令检查TensorRT版本:
```bash
dpkg -l | grep TensorRT
```
若版本>=8.x,必须进行API更新;若版本<=7.x,可通过添加编译选项暂时抑制警告:
```makefile
CXXFLAGS += -Wno-deprecated-declarations
```
#### 步骤3:更新代码依赖
建议从NVIDIA官方获取最新的YOLO插件实现:
```bash
git clone https://github.com/NVIDIA-AI-IOT/deepstream_5.0
```
最新代码库已修复此类API兼容性问题。
---
### 四、编译验证
1. 修改后重新编译:
```bash
make clean && make
```
2. 检查输出是否生成`libnvdsinfer_custom_impl_Yolo.so`文件
3. 在DeepStream配置文件中正确指定自定义库路径
---
### 五、附加建议
- 若在Jetson设备上编译,需确认CUDA/TensorRT版本匹配(JetPack版本决定)
- 建议参考[NVIDIA官方文档](https://docs.nvidia.com/metropolis/deepstream/dev-guide/text/DS_plugin_customization.html)中的自定义解析器实现
- 对于YOLOv5的Focus层,需在模型中替换为等效卷积操作(DeepStream对Focus层支持有限)
---
通过以上步骤,可解决API弃用警告并确保插件在DeepStream 5.0中正常运行。若仍遇问题,建议提供完整的错误日志和`trt_utils.cpp`相关代码片段以便进一步分析。
阅读全文
相关推荐



















