文章出處

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類,實例化它

文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()