文章出處
文章列表
faster-rcnn在訓練階段,根據一個solver的prototxt文件創建相應的網絡。僅憑一個prototxt就創建網絡?其實還涉及到自定義的PythonLayer. 比如lib/rpn/anchor_target_layer.py,一開始感覺它只定義了一個AnchorTargetLayer類但是沒有使用過(grep查找找不到),仔細分析源碼執行過程才發現,是因為使用了Boost.Python混編相關的技術,是在trainval.prototxt中有定義'python'類的層,并且指定到AnchorTargetLayer,而通過caffe的python接口,實例化solver成員的時候通過solver的prototxt引入trainval.prototxt,隨后逐層初始化,涉及到PythonLayer的時候則調用Boost.Python代碼來實例化它。
以end2end方式的代碼分析,自頂向下逐步解析。假定處于py-faster-rcnn目錄。
experiments/scripts/faster_rcnn_end2end.sh 指定了solver_prototxt
tools/train_net.py 根據solver_prototxt執行訓練任務
lib/fast_rcnn/train.py -> train_net()函數 -> SolverWrapper類實例 -> SolverWrapper構造函數,以solver_prototxt作為參數
caffe-fast-rcnn/python/caffe/_caffe.cpp -> #include的sgd_solvers.hpp 引入了SGDSolver
caffe-fast-rcnn/src/caffe/solver.cpp 構造函數 -> InitTrainNet() -> 調用Net()的構造函數 -> Net()的Init()函數
caffe-fast-rcnn/src/caffe/lyaer_factory.cpp及對應的hpp文件 -> layer的實例化 -> 對于自定義的PythonLayer類,實例化它
文章列表
全站熱搜