Caffe上用SSD訓練和測試自己的數據


    學習caffe第一天,用SSD上上手。

   我的根目錄$caffe_root為/home/gpu/ljy/caffe

   一、運行SSD示例代碼

   1.到https://github.com/weiliu89/caffe.git下載caffe-ssd代碼,是一個caffe文件夾

   2.參考已經配好的caffe目錄下的makefile.config修改¥caffe_root下的makefile.config.

   3.在$caffe_root下打開命令行終端,輸入以下命令

make -j8
make py make test -j8 make runtest -j8
編譯完成
4.下載VGG_ILSVRC_16_layers_fc_reduced.caffemodel預訓練模型,放到$caffe_root/models/VGG下。(沒有VGG文件夾就建一個)
下載數據集VOCtest_06_Nov-2007.tar等三個壓縮包放在$caffe_root/data下,並解壓。
5.修改
./data/VOC0712/create_list.sh里面的路徑為自己的路徑,修改./data/VOC0712/create_data.sh,本文如下圖所示:(VOC0712文件夾可能沒有,那就從網上下一個)

      

 6.命令行切換到$caffe_root並執行上面兩個腳本,直接命令行輸入就是執行
7.訓練,命令行輸入下面:
python examples/ssd/ssd_pascal.py
或者下載訓練好的模型
8.測試
A.python examples/ssd/score_ssd_pascal.py
這個要先改里面的gpu個數,輸出是分數
B.python examples/ssd/plot_detections.py
輸出是是視頻的標注...
C. ./.build_release/examples/ssd/ssd_detect.bin models/VGGNet/VOC0712/SSD_300x300/deploy.prototxt models/VGGNet/VOC0712/SSD_300x300/VGG_VOC0712_SSD_300x300_iter_120000.caffemodel /home/gpu/ljy/caffe/data/ljy_test/TestData/pictures.txt
這是單張圖片的測試,C++版本的,其中ctrl+h可以查看隱藏文件夾,最后那個pictures.txt是待測試文件夾的路徑列表,如下圖:

   

      

     測試結果如下:(暫時還不知道輸出的都是什么東西,可能是類別、置信度和位置吧)

     

    D 單張圖片測試,python版本

    點開ssd_detect.ipynb,復制並保存為ssd_detect.py,然后修改里面的路徑(包括$caffe_root和測試圖片的路徑),並在最后加上plt.show()

    然后命令行運行該代碼即可

 
        

   二、訓練並測試自己的數據

    1.生成訓練和測試數據

     我們自己的數據基本是jpeg或者其他圖片格式的,而caffe輸入的一般是LMDB的數據,所以我們要進行轉換。我們轉換的方法是

     A.將圖像用工具進行標注(工具這里先不介紹),得到txt標注文件

     B.將txt文件和圖片轉換成VOC格式(用腳本)

     C.將VOC格式轉換為LMDB格式,利用SSD示例代碼提供的轉換腳本。

 (1) 在 $caffe_root/data/VOCdevkit目錄下創建ljy_test目錄,該目錄中存放自己轉換完成的VOC數據集;
(2) $CAFFE_ROOT/examples目錄下創建ljy_test目錄;
(3) $CAFFE_ROOT/data目錄下創建ljy_test目錄,同時將data/VOC0712下的create_list.sh,create_data.sh,labelmap_voc.prototxt
這三個文件copy到ljy_test目錄下,分別重命名為create_list_ljy_test.sh,create_data_ljy_test.sh, labelmap_ljy_test.prototxt
(4) 對上面新生成的兩個create文件進行修改,主要修改是將VOC0712相關的信息替換成ljy_test
修改后的兩個文件分別如下:


然后修改
labelmap_indoor.prototxt,將該文件中的類別修改成和自己的數據集相匹配,注意需要保留一個label 0 , background類別

      完成上面步驟的修改后,可以開始LMDB數據數據的制作,在$CAFFE_ROOT目錄下分別運行:

  ./data/ljy_test/create_list_indoor.sh

  ./data/ljy_test/create_data_indoor.sh

  命令執行完畢后,可以在$CAFFE_ROOT/examples/ljy_test目錄下查看轉換完成的LMDB數據數據。

   2.訓練

  A.將預訓練好的模型放在$CAFFE_ROOT/models/VGGNet下(我們這里在運行SSD示例代碼的4已經放過了,可以省略)

 B.將$caffe_root/examples/ssd/ssd_pascal.py拷貝到自己的文件夾$caffe_root/examples/ljy_test/下,並重命名為ssd_pascal_ljy.py

 C.修改ssd_pascal_ljy.py為自己的各個路徑,其中要在$caffe_root/models/VGGNet/下建立ljy_test文件夾,修改如下:

 

  

  

  

  D.執行訓練代碼。在$caffe_root下打開命令行,並輸入

python examples/ljy_test/ssd_pascal_ljy.py
等待訓練就可以了...
有可能遇到loss=nan的情況,這個待議,正常情況下是下面醬紫的:

  3.測試

  A.c++版本的測試

   跟上面ssd示例測試的差不多,改一下路徑即可

  B.python版本的測試

  同最上面

  4.參考:http://blog.csdn.net/u014696921/article/details/53353896,https://github.com/weiliu89/caffe.git

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM