DCNv1、DCNv2、alphapose中未完成的DCN_V2(2024.1-2024.2)

部署运行你感兴趣的模型镜像

完成顺序:

先使用pytorch随便建一个网络,使用dcnv1,并注册到onnx,g.op;

onnx转trt模型,tensorrt里面的plugin怎么写?

您可能感兴趣的与本文相关的镜像

PyTorch 2.5

PyTorch 2.5

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

FAILED: /home/zb/PointAugmenting/det3d/models/img_backbones/DCNv2/build/temp.linux-x86_64-3.8/home/zb/PointAugmenting/det3d/models/img_backbones/DCNv2/src/cpu/dcn_v2_cpu.o c++ -MMD -MF /home/zb/PointAugmenting/det3d/models/img_backbones/DCNv2/build/temp.linux-x86_64-3.8/home/zb/PointAugmenting/det3d/models/img_backbones/DCNv2/src/cpu/dcn_v2_cpu.o.d -Wno-unused-result -Wsign-compare -DNDEBUG -fwrapv -O2 -Wall -fPIC -O2 -isystem /home/zb/anaconda3/envs/mmdet3d/include -fPIC -O2 -isystem /home/zb/anaconda3/envs/mmdet3d/include -fPIC -DWITH_CUDA -I/home/zb/PointAugmenting/det3d/models/img_backbones/DCNv2/src -I/home/zb/anaconda3/envs/mmdet3d/lib/python3.8/site-packages/torch/include -I/home/zb/anaconda3/envs/mmdet3d/lib/python3.8/site-packages/torch/include/torch/csrc/api/include -I/home/zb/anaconda3/envs/mmdet3d/lib/python3.8/site-packages/torch/include/TH -I/home/zb/anaconda3/envs/mmdet3d/lib/python3.8/site-packages/torch/include/THC -I/usr/local/cuda/include -I/home/zb/anaconda3/envs/mmdet3d/include/python3.8 -c -c /home/zb/PointAugmenting/det3d/models/img_backbones/DCNv2/src/cpu/dcn_v2_cpu.cpp -o /home/zb/PointAugmenting/det3d/models/img_backbones/DCNv2/build/temp.linux-x86_64-3.8/home/zb/PointAugmenting/det3d/models/img_backbones/DCNv2/src/cpu/dcn_v2_cpu.o -DTORCH_API_INCLUDE_EXTENSION_H '-DPYBIND11_COMPILER_TYPE="_gcc"' '-DPYBIND11_STDLIB="_libstdcpp"' '-DPYBIND11_BUILD_ABI="_cxxabi1011"' -DTORCH_EXTENSION_NAME=_ext -D_GLIBCXX_USE_CXX11_ABI=0 -std=c++14 In file included from /home/zb/anaconda3/envs/mmdet3d/lib/python3.8/site-packages/torch/include/ATen/Parallel.h:140:0, from /home/zb/anaconda3/envs/mmdet3d/lib/python3.8/site-packages/torch/include/TH/THTensorApply.h:4, from /home/zb/anaconda3/envs/mmdet3d/lib/python3.8/site-packages/torch/include/TH/THTensor.h:5, from /home/zb/anaconda3/envs/mmdet3d/lib/python3.8/site-packages/torch/include/TH/TH.h:13, from /home/zb/PointAugmenting/det3d/models/i
03-22
<think>嗯,我现在需要解决这个编译错误的问题。用户提供的错误信息显示在编译DCNv2模块时,CPU部分的代码出错了。首先,我得仔细看看错误信息的具体内容。 错误信息里提到在dcn_v2_cpu.cpp文件中,`dcn_v2_forward`和`dcn_v2_backward`这两个函数没有返回值。通常,C++中如果函数声明了返回类型(比如int或者void),但实际没有返回语句的话,编译器就会报错。这里可能是在定义这两个函数时,声明了返回类型为int或者其他类型,但函数体内没有return语句,或者可能函数本应是void,但被错误地声明为有返回类型。 接下来,我需要检查这两个函数的定义。根据路径找到dcn_v2_cpu.cpp文件,查看对应的函数。例如,函数可能被写成: ```cpp int dcn_v2_forward(...) { // 没有return语句 } ``` 如果函数确实不需要返回值,应该将返回类型改为void。或者,如果确实需要返回一个状态码,确保添加return语句。 另一个可能性是编译器选项的问题。用户的编译命令中包含-std=c++14,而代码中可能使用了更高版本的C++特性。不过,这个错误更可能是函数定义的问题,而不是标准版本的问题。 此外,用户的环境中有CUDA相关的路径,但错误发生在CPU部分的编译。可能DCNv2的代码在CPU实现中存在遗漏。需要确认是否代码库中的DCNv2版本与当前环境兼容,或者是否有未正确应用的补丁。 还要检查是否安装了正确版本的PyTorch,并且头文件路径正确。有时候,PyTorch版本更新会导致API变化,可能引发兼容性问题。例如,某些函数可能在旧版本中存在,但在新版本中被移除或改名。 如果用户是从GitHub克隆的仓库,可能需要查看该仓库的Issues部分,看看是否有其他人遇到类似的问题,或者作者是否提供了修复方法。有时候,社区会有临时的补丁或者分支来解决这类编译问题。 另外,检查是否有拼写错误或语法错误,比如函数名是否正确,括号是否匹配等。这些细节问题有时也会导致编译失败。 如果以上步骤无法解决,可能需要尝试重新安装PyTorch,或者使用conda重新创建环境,确保所有依赖项的版本兼容。例如,确保CUDA版本与PyTorch版本匹配,gcc版本符合要求等。 总结一下,解决步骤可能包括: 1. 检查dcn_v2_cpu.cpp中的函数定义,确保返回类型正确,并添加必要的return语句。 2. 确认代码库与当前环境(PyTorch、CUDA、gcc版本)兼容。 3. 查找社区已有的解决方案或补丁。 4. 重新安装或更新依赖项,确保版本一致。 5. 尝试清理编译缓存并重新编译。 如果用户不熟悉C++代码修改,可能需要寻求开发者社区的帮助,或者使用预编译的版本(如果有提供的话)。</think>该错误信息显示在编译DCNv2(可变形卷积模块)时,C++源码中出现了**函数未返回值的语法错误**。以下是分步排查指南: --- ### 错误原因分析 1. **关键错误行**: ``` dcn_v2_cpu.cpp: 错误:在函数‘int dcn_v2_forward(...)’中:返回类型不为空但未返回任何值 [-Werror=return-type] ``` 表明函数`dcn_v2_forward`和`dcn_v2_backward`声明了返回类型(如`int`),但实际没有`return`语句。 2. **常见触发场景**: - 源码中函数声明为`int dcn_v2_forward(...)`,但函数体结尾未添加`return 0;` - 函数本应声明为`void`(无返回值),但被错误写成`int` --- ### 解决方案 #### 步骤1:修改源码中的函数返回值 1. 打开文件: ```bash vim /home/zb/PointAugmenting/det3d/models/img_backbones/DCNv2/src/cpu/dcn_v2_cpu.cpp ``` 2. 定位错误函数(通常在文件末尾): - 找到`dcn_v2_forward`和`dcn_v2_backward`的定义 3. **修改方式**: - **方案一**:添加返回值(适合需要状态码的场景) ```cpp int dcn_v2_forward(...) { // ... 原代码 ... return 0; // 添加return语句 } ``` - **方案二**:修改函数返回类型为`void`(适合无返回值的场景) ```cpp void dcn_v2_forward(...) { // 将int改为void // ... 原代码 ... } ``` #### 步骤2:检查CUDA/cpu代码一致性 若项目中同时存在GPU代码(如`dcn_v2_cuda.cu`),需确保CPU/GPU版本的函数声明一致。例如: ```cpp // 确保声明与实现匹配 void dcn_v2_forward(...); // 正确声明为void ``` #### 步骤3:清理编译缓存并重新编译 ```bash cd /home/zb/PointAugmenting/det3d/models/img_backbones/DCNv2 rm -rf build # 清除旧编译缓存 python setup.py develop # 重新编译 ``` --- ### 其他可能性 1. **PyTorch版本兼容性问题**: - 确认PyTorch版本与DCNv2代码兼容(通常需1.5+版本) - 尝试降低PyTorch版本(如1.7.1): ```bash conda install pytorch==1.7.1 torchvision==0.8.2 torchaudio==0.7.2 cudatoolkit=11.0 -c pytorch ``` 2. **GCC版本过低**: - 检查gcc版本:`gcc --version` - 升级至gcc 7+(推荐gcc 7.5) --- ### 附:典型修复代码示例 ```cpp // 修改前(错误) int dcn_v2_forward(...) { // 函数体无return语句 } // 修改后(正确) void dcn_v2_forward(...) { // 函数体 } ``` 若问题仍未解决,建议参考DCNv2官方GitHub的Issues(如[MMDetection版本兼容问题](https://github.com/open-mmlab/mmdetection/issues/5113))或提供完整错误日志进一步分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值