caffe 如何调用python层
2015-12-30 12:44
387 查看
这两天一直在研究faster rcnn的源码,可是依旧感觉云里雾里,故下定决心把caffe调用python layer的流程仔细走一遍,好明白到底是什么在调用python layer。话说 linux 调试还真是蛋疼啊,木有ide那样直接下断点,gdb又不会用,只能傻比比的不断的LOG(INFO)输出。还好最终还是明白了,我就直接顺着faster rcnn来说,并记录在此。
faster rcnn最核心的代码就是在lib文件中,其他的都只是各种调用文件而已。不过lib里写了很多个模块,如何让caffe知道模块在哪里,并调用呢?这是我搞一晚上的初衷。我先大概说一下caffe正常的流程,首先从文件中读入solver并生成一个solver,然后根据solver的net路径生成一个net,net调用layer_factory循环生成每个层,最后根据读入model或是filler来初始化参数。实际上也怪自己马虎大意,没太细看代码,导致所用的时间比较多。从上面的流程可以知道layer_factory是循环生成每个层,我看.cpp文件也的确写了#if WITH_PYTHON_LAYER,然后有什么什么操作,比如储存python layer的python_param,并调用setup,不过我没看出来这里实际上已经是利用boost进行C++ Python混编了。这些操作的定义就在python_layer.hpp文件中,我当初还以为在什么pythonXXX.cpp中,找了半天也没找到。layer_factory中python layer的setup相关具体操作是,先根据param找到module的位置,再加载module,再根据层名加载层,然后前向计算反向计算什么的。这些就已经算是达到目的了。不过只是知道相对路径,怎么可能加载成功呢?然后又继续找啊找,终于在faster rcnn的tools文件中找到。_init_paths里有写一些预操作,比如将lib路径写入PYTHONPATH中,当然如果写入的话,这样就可以直接加载了。终于搞定。
这次也算是个小问题而已,不过只有再理清了整条脉络,看代码才会更加清晰,故也算是个重要的问题吧。不过这次也算是暴露了我不认真的问题,以后还是要耐心仔细找答案才行啊。。。。
faster rcnn最核心的代码就是在lib文件中,其他的都只是各种调用文件而已。不过lib里写了很多个模块,如何让caffe知道模块在哪里,并调用呢?这是我搞一晚上的初衷。我先大概说一下caffe正常的流程,首先从文件中读入solver并生成一个solver,然后根据solver的net路径生成一个net,net调用layer_factory循环生成每个层,最后根据读入model或是filler来初始化参数。实际上也怪自己马虎大意,没太细看代码,导致所用的时间比较多。从上面的流程可以知道layer_factory是循环生成每个层,我看.cpp文件也的确写了#if WITH_PYTHON_LAYER,然后有什么什么操作,比如储存python layer的python_param,并调用setup,不过我没看出来这里实际上已经是利用boost进行C++ Python混编了。这些操作的定义就在python_layer.hpp文件中,我当初还以为在什么pythonXXX.cpp中,找了半天也没找到。layer_factory中python layer的setup相关具体操作是,先根据param找到module的位置,再加载module,再根据层名加载层,然后前向计算反向计算什么的。这些就已经算是达到目的了。不过只是知道相对路径,怎么可能加载成功呢?然后又继续找啊找,终于在faster rcnn的tools文件中找到。_init_paths里有写一些预操作,比如将lib路径写入PYTHONPATH中,当然如果写入的话,这样就可以直接加载了。终于搞定。
这次也算是个小问题而已,不过只有再理清了整条脉络,看代码才会更加清晰,故也算是个重要的问题吧。不过这次也算是暴露了我不认真的问题,以后还是要耐心仔细找答案才行啊。。。。
相关文章推荐
- Caffe学习系列(13):数据可视化环境(python接口)配置
- python AES-16位加密解密功能实现
- Python 获取Twitter用户与Friends和Followers的关系(eg, 交集,差集)
- 仿射变换(Affine transformation)与python实践
- python 字典排序
- python手记(51)
- Python 1.6 使用dict和set
- [python] 专题八.多线程编程之thread和threading
- python模拟登陆和发布信息
- python Tab自动补全命令设置
- 4. Median of Two Sorted Arrays leetcode python New season for 2016
- 【python】多个文件共用日志系统的重复打印问题
- C#中通过Process运行Python脚本
- leetcode之Binary Tree Paths
- Python 1.5 循环
- leetcode之Sum Root to Leaf Numbers
- 修改ubuntu的默认python版本
- supervisor运行python程序时的环境配置
- python之commands模块
- leetcode之Path Sum