py-faster-rcnn之python引入_caffe.so

简介: 本文并不给出“编写一个c++代码,然后编译为.so文件,然后在python中引入”的hello world,需要的请参考:http://www.oschina.net/question/437227_124449本文意在强调,python的import,引入的不仅是.

本文并不给出“编写一个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

img_b05926c36520e0c4339c20fdfda7ea58.png

可以发现,/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.socaffe-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了。

目录
相关文章
|
3月前
|
存储 计算机视觉 异构计算
使用python&C++对bubbliiiing的yolo系列进行opencv.dnn进行推理部署
使用python&C++对bubbliiiing的yolo系列进行opencv.dnn进行推理部署
40 0
|
24天前
|
机器学习/深度学习 大数据 TensorFlow
使用TensorFlow实现Python简版神经网络模型
使用TensorFlow实现Python简版神经网络模型
|
4月前
|
存储 安全 数据库
python Pyramid
python Pyramid
57 1
|
计算机视觉 索引
YOLOv5的Tricks | 【Trick14】YOLOv5的val.py脚本的解析
YOLOv5的Tricks | 【Trick14】YOLOv5的val.py脚本的解析
1078 0
YOLOv5的Tricks | 【Trick14】YOLOv5的val.py脚本的解析
【YOLOV5-6.x讲解】模型搭建模块 models/yolo.py
【YOLOV5-6.x讲解】模型搭建模块 models/yolo.py
237 0
|
机器学习/深度学习 搜索推荐 TensorFlow
inference.py的代码解释
这是一个 Python 脚本,它用于导出经过训练的模型,使其可以在生产环境中进行推理。该脚本首先使用 TensorFlow 的 flags 定义了一些参数,如模型版本号、模型路径、输出目录等等。然后,它创建了一个名为 inference_graph 的 TensorFlow 图,并定义了一个 InferenceModel,该模型用于从输入数据中推断评级。
361 0
|
数据可视化 Linux 计算机视觉
|
并行计算 Ubuntu 算法框架/工具
Caffe:使用 cudnn 5.1 配置 Faster-RCNN Caffe 并运行 demo
系统:Ubuntu 16.04 环境:CUDA 8.0 + cudnn 5.1 + BLAS + opencv 3.0.0
128 0
|
机器学习/深度学习 数据可视化 API
Paddle Lite是什么,快速上手Python推理,pdmodel使用
“Paddle Lite 是一组工具,可帮助开发者在移动设备、嵌入式设备和 loT 设备上运行模型,以便实现设备端机器学习。”
402 0
|
Python
YOLOv5的Tricks | 【Trick13】YOLOv5的detect.py脚本的解析与简化
YOLOv5的Tricks | 【Trick13】YOLOv5的detect.py脚本的解析与简化
1233 0
YOLOv5的Tricks | 【Trick13】YOLOv5的detect.py脚本的解析与简化