Caffe添加层GPU实现.cu文件,提示无法解析Forward_gpu(...)、Backward_gpu(...)问题解决
2018-03-27 14:57
1041 查看
原创文章,转载请保留来源:http://blog.csdn.net/wanggao_1990/article/details/78964005
但是,当继续添加.cu文件以实现CPU接口,可以编译生成caffe.lib,但是再编译pycaffe或者其他项目时,就会出错。错误是2个层、前后向2个方法、2种数据格式,共计8个错误,如下图
查看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,并且能够被正确链接。
这里的的每一个编译对象,都是用标签对<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项目,都提示成功。
问题来源
问题来自于按照博文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项目,都提示成功。
相关文章推荐
- 解决VMWare 9中提示“windows无法从无人参与应答文件读取<ProductKey>设置问题”
- DEDECMS 生成静态提示“模板文件不存在,无法解析文档!”解决办法
- 解决Office 2010打开文件提示“文件已损坏,无法打开。”的问题
- 解决用gedit打开文件修改后保存提示“gedit 无法在保存新文件时备份原来的文件。” 问题
- 解决Office 2010打开文件提示“文件已损坏,无法打开。”的问题
- 解决debian JDK无法安装问题提示./install.sfx.: 没有那个文件或目录
- springMVC实现REST开发详解(补充Json解析问题以及静态文件404错误解决办法)
- Xcode .m实现文件 关键字没有提示,不提示代码补全功能,问题解决。
- 安装xp时提示xxx.xml文件无法复制问题解决办法
- IIS无法解析*.aspx文件,提示“找不到该文件”的解决方法
- dedecms织梦网站本地迁移到服务器后,后台更新栏目文档提示模板文件不存在,无法解析文档!的解决办法
- 关于IIS服务启动失败的问题:“IIS提示‘另一个程序正在使用此文件,进程无法访问’”,的解决方法
- infopath发布的提示“无法解析SOAP消息”(The SOAP message cannot be parsed)问题解决方案
- 安装SQL Server 2000时出现以下错误提示:“以前的某个程序安装已在安装计算机创建挂起的文件操作,运行安装程序之前必须重新启动计算机” 说明:如果重启计算机无法解决问题,可能有以下两个原因
- 关于WORD提示“Word无法创建工作文件,请检查临时环境变量”问题的解决办法
- 解决debian JDK无法安装问题提示./install.sfx.: 没有那个文件或目录
- 解决网站无法实现APK文件下载问题
- IIS无法解析aspx文件,提示“找不到该文件”的解决方法
- 解决Windows下删除文件提示无法删除问题
- ubuntu下解决无法解析或打开软件包列表或状态文件的问题