仅提供一个思路,相信很多厉害的人可以直接手撕。
这里是一个Faster-RCNN.pytorch的搭建 链接,感觉挺详细,不过这里不涉及这里边内容。
错误原因
已安装pytorch 版本和代码需要的版本不匹配,torch.utils.ffi是 pytorch 0.4版本的模块,在之后的版本中已经停止使用了。
网上我查到的解决方法
一个解决方法
解决一个问题之后又出现一个新问题,还不如直接装cuda9和torch0.4。
为什么要解决这个问题呢?
随着硬件的进步,很多显卡都没有很支持较高版本的pytorch,而且很多论文前期目标检测部分会直接使用Faster-RCNN,常用的Faster-RCNN是在torch0.4.0环境下,编译过程中就会出现torch.utils.ffi is deprecated,想跑一个经典代码,结果配置环境都配置不好,心态直接崩。放弃不是解决问题的方法,因为后期还是要面对的。既然降级意义不大,那就用更高版本的pytorch1.0.0下的Faster-RCNN。
个人环境说明
torch 1.6.0+cu101 python3.8
解决思路
利用pytorch1.0.0的编译结果,替换0.4.0中的RoIAlignFunction部分,不使用fpn中的RoIAlignFunction,使用roi_layer中的ROIAlign。
前期准备
pytorch1.0.0版源码:https://github.com/jwyang/faster-rcnn.pytorch/tree/pytorch-1.0
具体方法
- 将lib文件夹复制到KERN相应部分
- 执行下列语句,在lib/model下生成了_C.cpython-38-x86_64-linux-gnu
cd lib
python setup.py build develop
- 修改主代码中使用RoIAlignFunction部分
- 导入模块部分
from lib.fpn.roi_align.functions.roi_align import RoIAlignFunction
改为
from lib.model.roi_layers import ROIAlign
- 函数使用部分
feature_pool = RoIAlignFunction(self.pooling_size, self.pooling_size, spatial_scale=1 / 16)(features, rois)
改为
feature_pool = ROIAlign((self.pooling_size, self.pooling_size), 1.0 / 16.0, 0).forward(features, rois.view(-1, 5))
可能出现的错误
1.问题
File "/home/xxx/lib/model/roi_layers/nms.py", line 3, in <module>
from model import _C
ImportError: cannot import name ‘_C’ from ‘model’
1.1解决方法
from model import _C
改为
from lib.model import _C