在Colab运行LORE-TSR模型遇'_ext'模块缺失及DCNv2编译失败问题求助
LORE-TSR运行报错及解决思路
问题描述
运行LORE-TSR仓库的demo.py脚本时出现ModuleNotFoundError: No module named '_ext'错误;尝试编译内置的DCNv2自定义扩展时失败,报错显示找不到TH/TH.h文件,Anaconda终端编译也出现相同问题。
运行报错详情
Traceback (most recent call last): File "/content/AdvancedLiterateMachinery/DocumentUnderstanding/LORE-TSR/src/demo.py", line 13, in <module> from detectors.detector_factory import detector_factory File "/content/AdvancedLiterateMachinery/DocumentUnderstanding/LORE-TSR/src/lib/detectors/detector_factory.py", line 5, in <module> from .ctdet import CtdetDetector File "/content/AdvancedLiterateMachinery/DocumentUnderstanding/LORE-TSR/src/lib/detectors/ctdet.py", line 19, in <module> from .base_detector import BaseDetector File "/content/AdvancedLiterateMachinery/DocumentUnderstanding/LORE-TSR/src/lib/detectors/base_detector.py", line 10, in <module> from models.model import create_model, load_model File "/content/AdvancedLiterateMachinery/DocumentUnderstanding/LORE-TSR/src/lib/models/model.py", line 16, in <module> from .networks.pose_dla_dcn import get_pose_net as get_dla_dcn File "/content/AdvancedLiterateMachinery/DocumentUnderstanding/LORE-TSR/src/lib/models/networks/pose_dla_dcn.py", line 16, in <module> from .DCNv2.dcn_v2 import DCN File "/content/AdvancedLiterateMachinery/DocumentUnderstanding/LORE-TSR/src/lib/models/networks/DCNv2/dcn_v2.py", line 12, in <module> import _ext as _backend ModuleNotFoundError: No module named '_ext'
编译报错详情
rm: cannot remove '*.so': No such file or directory rm: cannot remove 'build/': No such file or directory No CUDA runtime is found, using CUDA_HOME='/usr/local/cuda' running build running build_ext building '_ext' extension ... /content/AdvancedLiterateMachinery/DocumentUnderstanding/LORE-TSR/src/lib/models/networks/DCNv2/src/cpu/dcn_v2_im2col_cpu.cpp:9:10: fatal error: TH/TH.h: No such file or directory 9 | #include <TH/TH.h> | ^~~~~~~~~ compilation terminated. ninja: build stopped: subcommand failed. ... RuntimeError: Error compiling objects for extension
解决思路
调整PyTorch版本或修改头文件路径
TH/TH.h是老版本PyTorch(0.4.x及更早)的头文件,新版本PyTorch(1.0+)已将其移至torch/legacy/include/TH/路径。两种解决方式:- 安装PyTorch 1.1.x或0.4.x兼容版本,再重新编译DCNv2;
- 手动修改DCNv2代码里的头文件引用,把
#include <TH/TH.h>替换为#include <torch/legacy/include/TH/TH.h>,同时检查其他相关头文件路径是否需要同步调整。
修复CUDA环境配置
编译报错提示未找到CUDA运行时,需确认CUDA安装及版本匹配:- 运行
nvcc --version查看CUDA版本,确保与PyTorch版本兼容(比如PyTorch 1.1.x对应CUDA 9.0/10.0); - 设置正确的
CUDA_HOME环境变量,终端执行export CUDA_HOME=/usr/local/cuda-xx.x(替换xx.x为你的CUDA版本号),再重新编译。
- 运行
正确执行编译命令
进入DCNv2目录(src/lib/models/networks/DCNv2/),执行以下命令编译:python setup.py build develop若仍报错,尝试添加
--user参数:python setup.py build develop --user编译成功后再运行
demo.py。
ResNet模型相关疑问
使用ResNet作为模型 backbone 时,不需要编译DCNv2。DCNv2仅为DLA-DCN模型的依赖组件,ResNet版本的模型未用到该自定义卷积层。只需在配置文件中将模型类型改为ResNet相关选项(如ctdet_resnet18,具体以项目配置为准),即可跳过DCNv2编译步骤直接运行。
内容的提问来源于stack exchange,提问作者ellamia
相关产品推荐
相关产品推荐

