py-faster-rcnn之python引入_caffe.so
本文并不给出“编写一个c++代码,然后编译为.so文件,然后在python中引入”的hello world,需要的请参考:http://www.oschina.net/question/437227_124449
本文意在强调,python的import,引入的不仅是.py(以及.pyc)文件,还可以引入.so文件
首先明确下,python的模块,是指:一个包含若干.py文件的目录dir,并且包含一个__init__.py
(内容可以为空,但不能不存在这个文件)
然后,当你需要使用这个目录dir下的某个文件some.py,那就这样引入:
import dir.some
以及,还可以用更复杂的from xx import yy
这种语法。
那么这个import
是按照什么路径查找的?上面这个import dir.some
是从相对路径(当前路径)查找,有时候还有import cv2
这种用法。其实是从python内部的sys.path中查找的。当然,你想添加新的目录到“查找目录”中,要么在python代码中往sys.path
上追加东西,要么在shell里设定PYTHONPATH包含你所需要的目录。增加到PYTHONPATH的会放到sys.path中。
比如,我的sys.path
可以发现,/usr/lib/python2.7/dist-packages
包含在sys.path
中。而import cv2
所引入的cv2所在路径为
/usr/lib/python2.7/dist-packages/cv2.86_64-linux-gnu.so`。咦,怎么不是cv.py呢?总之,在sys.path包含的目录下,找到的不仅仅是.py和.pyc文件,还有众多的.so文件。而且,大都可以引入(import)
所以,要明确一点:import xxx引入的不仅仅是.py(c)文件,还可以是.so文件
================= 分割线 ================
好了,现在应该可以知道,在py-faster-rcnn中,caffe-fast-rcnn/python/caffe/pycaffe.py
文件第13行, from ._caffe import SGDSolver
是啥意思,一目了然:将当前目录下_caffe.so
引入(也就是caffe-fast-rcnn/python/caffe/_caffe.so
)。
另:_caffe.so
是caffe-fast-rcnn/python/CMakeLists.txt
中指定的__linkname
:
if(NOT HAVE_PYTHON)
message(STATUS "Python interface is disabled or not all required dependencies found. Building without it...")
return()
endif()
include_directories(${PYTHON_INCLUDE_DIRS} ${NUMPY_INCLUDE_DIR} ${Boost_INCLUDE_DIRS})
file(GLOB_RECURSE python_srcs ${PROJECT_SOURCE_DIR}/python/*.cpp) #!! GLOB_RECURSE递归查找,其实只找到一个,${PROJECT_SOURCE_DIR}/python/caffe/_caffe.cpp
add_library(pycaffe SHARED ${python_srcs})
target_link_libraries(pycaffe ${Caffe_LINK} ${PYTHON_LIBRARIES} ${Boost_LIBRARIES})
set_target_properties(pycaffe PROPERTIES PREFIX "" OUTPUT_NAME "_caffe")
caffe_default_properties(pycaffe)
if(UNIX OR APPLE)
set(__linkname "${PROJECT_SOURCE_DIR}/python/caffe/_caffe.so") #!! _caffe.cpp被链接到_caffe.so文件
add_custom_command(TARGET pycaffe POST_BUILD
COMMAND ln -sf $<TARGET_LINKER_FILE:pycaffe> "${__linkname}"
COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_SOURCE_DIR}/python/caffe/proto
COMMAND touch ${PROJECT_SOURCE_DIR}/python/caffe/proto/__init__.py
COMMAND cp ${proto_gen_folder}/*.py ${PROJECT_SOURCE_DIR}/python/caffe/proto/
COMMENT "Creating symlink ${__linkname} -> ${PROJECT_BINARY_DIR}/lib/_caffe${Caffe_POSTFIX}.so")
endif()
# ---[ Install
file(GLOB files1 *.py requirements.txt)
install(FILES ${files1} DESTINATION python)
file(GLOB files2 caffe/*.py)
install(FILES ${files2} DESTINATION python/caffe)
install(TARGETS pycaffe DESTINATION python/caffe)
install(DIRECTORY caffe/imagenet caffe/proto caffe/test DESTINATION python/caffe)
注意到图中关键两行(#!!
标出),意思是caffe-fast-rcnn/python/caffe/_caffe.cpp
编译成caffe-fast-rcnn/python/caffe/_caffe.so
。这之后,就可以用import _caffe
引入_caffe.so
了。
py-faster-rcnn之python引入_caffe.so的更多相关文章
- py faster rcnn+ 1080Ti+cudnn5.0
看了py-faster-rcnn上的issue,原来大家都遇到各种问题. 我要好好琢磨一下,看看到底怎么样才能更好地把GPU卡发挥出来.最近真是和GPU卡较上劲了. 上午解决了g++的问题不是. 然后 ...
- py faster rcnn的lib编译出错问题
真是好事多磨啊,计算机系统依然是14.04,而cuda依然是8.0,唯一不同的是时间不一样,下载的各种库版本有差别,GPU的driver不一样. 但是这样就出问题了,py-faster rcnn的li ...
- faster rcnn 源码学习-------数据读入及RoIDataLayer相关模块解读
参考博客:::https://www.cnblogs.com/Dzhen/p/6845852.html 非常全面的解读参考:::https://blog.csdn.net/DaVinciL/artic ...
- Faster RCNN代码理解(Python)
转自http://www.infocool.net/kb/Python/201611/209696.html#原文地址 第一步,准备 从train_faster_rcnn_alt_opt.py入: 初 ...
- python引入同一目录下的py文件
python引入同一目录下的py文件 注意:python2和python3的包内import语法有区别,下面介绍一下python3的包内import语法 例如在admin.py文件中要引入dealco ...
- python 版Faster Rcnn
直接按照官网https://github.com/rbgirshick/py-faster-rcnn上的教程对faster Rcnn进行编译的时候,会发有一些层由于cudnn版本的更新,会报错如下: ...
- Faster R-CNN CPU环境搭建
操作系统: bigtop@bigtop-SdcOS-Hypervisor:~/py-faster-rcnn/tools$ cat /etc/issue Ubuntu LTS \n \l Python版 ...
- 如何才能将Faster R-CNN训练起来?
如何才能将Faster R-CNN训练起来? 首先进入 Faster RCNN 的官网啦,即:https://github.com/rbgirshick/py-faster-rcnn#installa ...
- 新人如何运行Faster RCNN的tensorflow代码
0.目的 刚刚学习faster rcnn目标检测算法,在尝试跑通github上面Xinlei Chen的tensorflow版本的faster rcnn代码时候遇到很多问题(我真是太菜),代码地址如下 ...
随机推荐
- 高性能 TCP/UDP/HTTP 通信框架 HP-Socket v4.0.1
HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/ ...
- Mysql增加、删除和修改列属性和约束,和一些有用的查询语句
最近在整理关于MySql的东西,把一些需要记录的东西写下来,以便以后查询和浏览,以下是一些操作技巧.添加表字段alter table` 表名称` add transactor varchar(10) ...
- vs2013\2015UML系列之-类图
1.UML简介Unified Modeling Language (UML)又称统一建模语言或标准建模语言. 简单说就是以图形方式表现模型,根据不同模型进行分类,在UML 2.0中有13种图,以下是他 ...
- video/audio在ios/android上播放兼容
1.audio自动播放 <audio src='xxx.mp3' autoplay></audio> 上面是audio标签autoplay属性是自动播放,但是在安卓部分浏览器和 ...
- 如何在Node.js中合并两个复杂对象
通常情况下,在Node.js中我们可以通过underscore的extend或者lodash的merge来合并两个对象,但是对于像下面这种复杂的对象,要如何来应对呢? 例如我有以下两个object: ...
- HTML5 Canvas玩转酷炫大波浪进度图
如上图所见,本文就是要实现上面那种效果. 由于最近AlloyTouch要写一个下拉刷新的酷炫loading效果.所以首选大波浪进度图. 首先要封装一下大波浪图片进度组件.基本的原理是利用Canvas绘 ...
- SQLSERVER常见系统函数之字符串函数(一)
好久没有写博客了,这段时间准备写一下字符串函数 QQ群: 499092562:欢迎交流 字符串函数: 1.LEN(需要获取长度的字符串) 返回:字符串的长度 示例: SELECT LEN('小搬运工很 ...
- 基于JQuery实现的文本框自动填充功能
1. 实现的方法 /* * js实现的文本框的自动完成功能 */ function doAutoComplete(textid,dataid,url){ $("#" + texti ...
- nginx端口占用案例分享
这里分享一个案例,问题的原因是反向代理使用不当. 现象 首先描述一下问题的现象.当时的问题是应用启动失败,日志里面报错显示端口占用.我们的应用都是通过脚本发布的,之前发布过多次都没有出现过问题.那么同 ...
- js中的constructor
定义和用法 constructor 属性返回对创建此对象的 Date 函数的引用. 语法 object.constructor constructor属性不影响任何JavaScript的内部属性.in ...