1. 程式人生 > >配置caffe-SSD

配置caffe-SSD

  • 訓練模型

    • 在下載的caffe根目錄執行如下命令訓練,在examples/ssd下存在幾個.py檔案,訓練的時間較長,迭代60000次,博主訓練了一天!
       python examples/ssd/ssd_pascal.py

    實驗效果

    (1)在圖片測試集上測試

       python examples/ssd/score_ssd_pascal.py
     

    利用它跑了一遍資料集,得出準確率可以達到百分之70多

    (2)在視訊上測試

       python examples/ssd/ssd_pascal_video.py 
     

    利用師兄的行人視訊做了測試,實時性高,但是漏檢率蠻嚴重的,這是不可避免的 
    這裡寫圖片描述

     
    這裡寫圖片描述 
    當然,直接跑是他自帶的視訊,想跑自己的程式碼的話,要先用vim開啟該檔案,定位到51行,修改視訊路徑為已有本地視訊,這樣就可以暢快的跑自己的視訊

    (3)在攝像頭上測試

       python examples/ssd/ssd_pascal_webcam.py

    博主移植到桌上型電腦上出現了問題,還沒有改好bug,改好了會分享給大家

    後期工作

    • 研究SSD的python原始碼,用來訓練和檢測交通標誌\文字檢測,人臉檢測等等

    作者給定的預訓練模型

    如果沒有好的機器配置或者省事一些的,可以使用作者給出的訓練好的模型:

    • Models trained on VOC0712:
      SSD300
       SSD500
    • 還有其他的模型,這裡就不一一列舉,感興趣的可以去官方主頁看,連結已在前面給出

    最近一直在搞object detection玩,之前用的是faster-rcnn,準確率方面73.2%,效果還不錯,但是識別速度有點欠缺,我用的GPU是GTX980ti, 識別速度大概是15fps.最近發現SSD(single shot multibox detector) 這篇論文效果和速度都不錯,我自己實驗了一下,速度確實比faster-rcnn快不少。下面分兩部分來介紹。第一部分介紹SSD的安裝,第二部分介紹如何基於SSD訓練自己的資料集。

     

    第二部分 訓練自己的資料集

    caffe/models/VGGNet/

    下載VOC2007和VOC2012資料集, 放在/data目錄下:

    cd data
    wget http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar
    wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar
    wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar
    
    tar -xvf VOCtrainval_11-May-2012.tar
    tar -xvf VOCtrainval_06-Nov-2007.tar
    tar -xvf VOCtest_06-Nov-2007.tar
     

    建立lmdb格式的資料:

    cd caffe
    ./data/VOC0712/create_list.sh
    # It will create lmdb files for trainval and test with encoded original image:
    #   - $HOME/data/VOCdevkit/VOC0712/lmdb/VOC0712_trainval_lmdb
    #   - $HOME/data/VOCdevkit/VOC0712/lmdb/VOC0712_test_lmdb
    ./data/VOC0712/create_data.sh
     

    訓練和測試

    python examples/ssd/ssd_pascal.py
    
     

    論文中,作者已經預訓練好模型,下載連結:http://www.cs.unc.edu/%7Ewliu/projects/SSD/models_VGGNet_VOC0712_SSD_300x300.tar.gz,我們不必自己再去訓練, 下載完成後放入指定的資料夾下。 
    測試時,我們使用/example/ssd/目錄裡的ssd_detect.ipynb,執行這個檔案,需要安裝ipython及ipython-notebook, 或者直接把裡面的程式碼拷貝出來,寫到一個新的python檔案裡,比如命名ssd_detector.py.

    OK, 下面修改一系列檔案來訓練自己的資料集 
    兩種方案, 第一:保持原來的檔案目錄結構及檔名不變, 只替換裡面的資料。第二:重新新建一個與之前類似的目錄結構,改成自己命名的資料夾,第二種方法,有一定的風險性,需要修改程式裡涉及資料路徑的程式碼。在之前講解的faster-rcnnan那篇部落格中, 我們採用第一種方案。本次我們採用第二種方案。 
    在/data目錄下建立一個自己的資料夾:

    cd /data
    mkdir mydataset
     

    把/data/VOC0712目錄下的create_list.sh 、create_data.sh、labelmap_voc.prototxt 這三個檔案拷貝到/mydataset下:

    cp data/create* ./mydataset
    cp data/label* ./mydataset
     

    labelmap_voc.prototxt, 此檔案定義label。

    在/data/VOCdevkit目錄下建立mydataset, 並放入自己的資料集:

    cd data/VOCdevkit
    mkdir mydataset
    cd mydataset
    mkdir Annotations
    mkdir ImageSets
    mkdir JPEGImages
    cd ImageSets
    mkdir Layout
    mkdir Main
    mkdir Segmentation
     

    其中Annotations中存放一些列XML檔案,包含object的bbox,name等; 
    ImageSets中三個子目錄下均存放train.txt, val.txt, trainval.txt, test.txt這幾個檔案,檔案內容為圖片的檔名(不帶字尾); 
    JPEGImages存放所有的圖片;

    在/examples下建立mydataset資料夾:

    mkdir mydataset

    資料夾記憶體放生成的lmdb檔案。

    上述資料夾建立好後, 開始生成lmdb檔案, 在建立之前需要修改相關路徑:

    ./data/mydataset/create_list.sh
    ./data/mydataset/create_data.sh
     

    此時,在examples/mydataset/資料夾下可以看到兩個子資料夾, mydataset_trainval_lmdb, mydataset_test_lmdb;裡面均包含data.dmb和lock.dmb;

    到此為止,我們的資料集就做好了。接下來就開始訓練了。訓練程式為/examples/ssd/ssd_pascal.py,執行之前,我們需要修改相關路徑程式碼:

    cd /examples/ssd
    vim sd_pascal.py, 修改如下:
    57行: train_data路徑;
    59行:test_data路徑;
    197-203行:save_dir、snapshot_dir、job_dir、output_result_dir路徑;
    216-220行: name_size_file、label_map_file路徑;
    223行:num_classes 修改為1 + 類別數
    315行:num_test_image:測試集圖片數目
     

    另外, 如果你只有一個GPU, 需要修改285行: 
    gpus=”0,1,2,3” ===> 改為”0” 
    否則,訓練的時候會出錯。 
    修改完後執行

    python ./examples/ssd/ssd_pascal.py 

    訓練完, 修改ssd_detector.py中模型路徑, 任意找一張圖片識別,看看效果怎麼樣。