使用caffe框架利用faster-rcnn來訓練自己的數據集

最近在研究caffe,前前後後差不多快一週了,論文看得比較少,直接上手來做的,期間遇到無數問題,大大小小的無數問題,不過通過上網,看別人的博客,幾乎踩了很多大坑,這裏給大家總結一下,希望後續同樣做深度學習的小夥伴能夠少踩點坑。在這裏,我就不做重複功了,具體的配置還有改動的地方我會引用別人的博客,然後補充說明這些博客介紹得並不全面的地方。


備註:以下內容會不定期更新,該篇博客主要對安裝caffe使用faster-rcnn中出現的問題進行分享,配置還有使用部分引用網上其它博客。


文件下載地址鏈接:http://pan.baidu.com/s/1qYnjZCo 密碼:g7bo


實驗目的:實驗室最近要開始做深度學習,配置了一臺K80服務器,按現在的水平顯卡性能屬於中等偏上,不過做做實驗應該是夠了。最初打算先實現個最簡單的目標檢測,即人臉檢測,目的很簡單,就是輸入一張圖片,判斷有沒有人臉,並且把人臉部分用box給框出來。


實驗工具:caffe框架

                  faster-rcnn


主要語言:C++, Python


實驗步驟

一、caffe框架的配置

                  這裏給出rbg大神在github上的地址:https://github.com/rbgirshick/py-faster-rcnn

                  這裏要注意,caffe的框架一定要使用rbg大神github上的版本,不建議使用伯克利大學維護的那一份caffe的代碼,具體的原因主要是,使用faster-rcnn方法的這個版本的caffe比較老,現在官方維護的那個版本改動了一些部分,而且rbg大神使用了Python layer來定義了caffe中的數據層(data layer),所以在編譯的時候需要將Python layer打開,這個之後會講到。按道理,config文件修改合理的話肯定不會出問題的,不過建議還是使用大神的版本,比較省事。

                  rbg大神的caffe配置參考這篇博客,http://www.cnblogs.com/louyihang-loves-baiyan/p/4885659.html#3573006

                  上面這是一篇fast-rcnn的配置博客,實在抱歉,前幾天我還找到一份faster-rcnn坑比較少的配置博客,今天怎麼翻都找不到了,這一篇雖然是fast-rcnn的配置博客,不過我剛剛仔細看了下,配置過程是同樣的,而且作者寫得很用心,可以避免不少彎路。

                   大概流程就是先到py-faster-rcnn-master文件下的caffe-fast-rcnn(可以再壞境變量中修改爲$FRCNN_CAFFE),修改config文件,將博客中提到的地方都取消註釋,然後到py-faster-rcnn-master文件夾(環境變量中命名爲$FRCNN_ROOT)中的lib文件夾中,執行

cd $FRCN_ROOT/lib
make

這裏需要注意下,確保你的Linux gcc的版本爲最新版,因爲版本比較老的話,編譯有個部分會出錯中斷。

                    接下來就是到$FRCNN_CAFFE中編譯caffe和pycaffe,執行命令

cd $FRCNN_CAFFE
make -j8 && make pycaffe
                    暫時想不到別的會出錯的地方,如果大家出現什麼問題,可以再下面留言告訴我,我能解決的一定儘快解決。


                    至此,caffe框架的配置算是完成了。

二、運行faster-rcnn的demo

                   完成了配置以後,爲了驗證是否正確安裝,可以到$FRCNN_ROOT的tools文件夾中,對demo.py文件進行執行:

./demo.py

                   這裏如果機器配置合適的話,就直接默認執行就好,因爲默認執行以後使用的是大型網絡vgg16,其他的參數主要爲:
def parse_args():
    """Parse input arguments."""
    parser = argparse.ArgumentParser(description='Faster R-CNN demo')
    parser.add_argument('--gpu', dest='gpu_id', help='GPU device id to use [0]',
                        default=0, type=int)
    parser.add_argument('--cpu', dest='cpu_mode',
                        help='Use CPU mode (overrides --gpu)',
                        action='store_true')
    parser.add_argument('--net', dest='demo_net', help='Network to use [vgg16]',
                        choices=NETS.keys(), default='vgg16')

    args = parser.parse_args()

    return args

                    這個函數大家可以看到,能夠傳入示例腳本的有--gpu  這裏選擇使用哪一塊gpu,默認是0,傳入的參數是數字,也就是說,不能使用-a來制定使用所有的gpu核來進行訓練;--net參數,選擇你要使用的是哪一個網絡,網絡的腳本dict如下:
NETS = {'vgg16': ('VGG16',
                  'VGG16_faster_rcnn_final.caffemodel'),
        'zf': ('ZF',
                  'ZF_faster_rcnn_final.caffemodel')}

                    這裏提供一個格式,後面進行預測的時候可以去定製。

                    至此執行以後一般不會不會成功,應該說一定不會成功,還有faster-rcnn的caffemodel和prototxt文件還沒有下載,在$FRCNN_ROOT的data/script中有腳本,打開fetch_faster_rcnn_models.sh文件,按照上面引用博客裏面的方法,拿到鏈接地址以後使用下載工具去下載,這樣速度會快很多,prototxt文件在$FRCNN_ROOT的model中已經有文件存在了,到時候注意路徑選擇合適的文件就好了。(需要下載的文件已經放到網盤,大家可以下載

                     至此,執行demo的示例步驟也結束了。


三、使用示例腳本對官方數據進行訓練

                     在$FRCNN_ROOT的experiments/script中有腳本可以使用,名字爲:faster_rcnn_end2end.sh,腳本里面需要下載的的數據集爲VOC2007,在上面提供的雲盤地址中有資源存在了,可供下載。將數據集可以下載到自己的硬盤裏面,然後把掛載的硬盤路徑通過軟鏈接鏈接到$FRCNN_ROOT的data/路徑中,這樣暫時在數據集上沒有問題了。

                     腳本中提供的路徑都不是正常的路徑,需要將全局變量添加進去,比如這一句:

LOG="experiments/logs/faster_rcnn_end2end_${NET}_${EXTRA_ARGS_SLUG}.txt.`date +'%Y-%m-%d_%H-%M-%S'`"

                     系統中是不存在這個地址路徑的,需要在前面加上$FRCNN_ROOT,即爲:

LOG="$FRCNN_ROOT/experiments/logs/faster_rcnn_end2end_${NET}_${EXTRA_ARGS_SLUG}.txt.`date +'%Y-%m-%d_%H-%M-%S'`"

                     其他地方也是類似,也可以在前面加上../../ 使用相對路徑來完成。




                    未完待續。。。。。

發佈了30 篇原創文章 · 獲贊 54 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章