首先从solver中读入并生成一个solver,然后根据solver的net路径生成一个net,net调用layer_factory循环生成每个层,最后根据读入module或是filler来初始化参数。
从上面的流程可以知道layer_factory是循环生成每个层,.cpp文件也的确写了#if WITH_PYTHON_LAYER,然后有什么什么操作,比如储存python layer的python_param,并调用setup,这里实际上已经是利用boost进行C++ Python混编了。这些操作的定义就在python_layer.hpp文件中。
layer_factory中python layer的setup相关操作是,先根据param找到module的位置,再加载module,再根据层名加载层,然后前向计算反向计算什么的。
这些就已经算是达到目的了。不过只是知道相对路径,怎么可能加载成功呢?fast rcnn的tools文件夹中有一个_init_paths里有写一些预操作,比如将lib路径写入PYTHONPATH中,当然如果写入的话,这样就可以直接加载了。