您的位置:首页 > Web前端

Caffe添加层GPU实现.cu文件,提示无法解析Forward_gpu(...)、Backward_gpu(...)问题解决

2018-03-27 14:57 1041 查看
原创文章,转载请保留来源:http://blog.csdn.net/wanggao_1990/article/details/78964005

问题来源

问题来自于按照博文Caffe添加自定义的层http://blog.csdn.net/wanggao_1990/article/details/78863669),将py-faster-rcnn-python中caffe实现SPP-net的2个层ROI-Pooling和Smooth_L1_Loss加入到新版的caffe中,再编译生成pycaffe接口。在GPU版本下,当添加cpu版本的hpp、cpp文件,以及修改caffe.proto文件后,可以正常编译生成caffe.lib,也能进一步编译生成pycaffe及其他依赖caffe.lib项目。

但是,当继续添加.cu文件以实现CPU接口,可以编译生成caffe.lib,但是再编译pycaffe或者其他项目时,就会出错。错误是2个层、前后向2个方法、2种数据格式,共计8个错误,如下图









分析问题

新添加的层的.cu文件没有编译生成obj文件,首先在caffe.lib编译不报错(是由于没有调用有关GPU版本的接口),但是在其他项目编译过程中链接库obj失败导致。

查看caffe的Object Files目录下(如下图),发现没有新增加的层gpu版本对应的obj,即没有生成cuda_compile_1_generated_roi_pooling_layer.cu.obj和cuda_compile_1_generated_smooth_L1_loss_layer.cu.obj。





问题明确了,就可以修改.\caffe-windows\scripts\build\src\caffe\caffe.vcxproj文件,使得项目编译添的.cu文件能够生成对应的obj,并且能够被正确链接。

问题解决

首先的用文本编辑器打开(不建议用windows自带的文本编辑器记事本),这个文件是项目生产caffe.lib所有的配置内容。打开后,直接搜索caffe自带的一个gpu版本的层,如” absval_layer.cu”,查找后找到显下图对应的位置





这里的的每一个编译对象,都是用标签对<ItemGroup> … < /ItemGroup>管理。

接着,复制absval_layer.cu有关的整个ItermGroup(我这里大概有41行),并粘贴在与其同级的位置,粘贴2份。粘贴完成后,分别修改这两份标签对:第一份标签对中出现的所有absval_layer.cu都修改为roi_pooling_layer.cu,另一份的标签对中出现的所有absval_layer.cu都修改为smooth_L1_loss_layer.cu。

修改结束,切换到caffe-windows解决方案,提示重新加载,点击加载即可(修改前关闭VS不影响)。

最后,再次在caffe的Object Files目录,右键添加现有现,加入生成的2个层的obj文,位于caffe-windows\scripts\build\src\caffe\CMakeFiles\cuda_compile_1.dir\layers\Release\文件夹下。





之后清理整个解决方案,重新编译caffe,中间会有下面几个输出提示





















这里可以看到两个层的gpu版本obj已经生成,caffe.lib也生成成功。

(也可以不清理解决方案,直接这一步)接着编译classification项目或者pycaffe项目,都提示成功。







内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐