1. 程式人生 > >Ubuntu下Caffe二分類實戰

Ubuntu下Caffe二分類實戰

Caffe實戰

看完本片部落格,您將可能能夠達到以下目的

  • 能夠對Shell程式設計以及caffe框架有著更深刻的理解
  • 能夠獨自對自己的資料集進行二分類訓練
  • 通過自己的掌握程度,將程式碼從二分類更改成N分類問題

檔案結構及概覽

在專案檔案中,我們主要需要關心的是下面目錄結構中的檔案,並理解其中在專案中整體的作用

project
│   README.md
│   run.sh
|   train.sh   
│
└─── Demo
|     |
|     └─── model
|     |
|     └─── nopos
|     |
|     └─── pos
| | | └─── result | └─── test | pos.txt | test.sh | └─── photo | | └─── model
  • README.md 檔案主要說明專案如何執行
  • run.sh 執行程式
  • train.sh 執行程式,和run.sh區別會之後進行討論
  • Demo目錄 對檔案進行訓練目錄
  • test目錄 對樣本進行測試的目錄

訓練

  • 準備資料集

    • 進入Demo目錄下,將正負樣本分別新增至 pos 以及 nopos 目錄下。Demo中的其他檔案不需要更改。(作者已經更改完畢)
  • 編輯train.sh

    • 將以下內容改成自己系統對應檔案的路徑。DataDir 表示Demo目錄的絕對路徑,而TOOLS表示caffe安裝目錄下的build/tools檔案目錄的絕對路徑。

shell程式設計,等號兩邊不能有空格。

# set these
dataDir=/home/rui/WANG/Project/Demo
TOOLS=/home/rui/Work/caffe/build/tools
# 

關於run.sh指令碼具體內容將不會詳細說明,因為本部落格主要目的是使用caffe進行二分類。如果想要詳細瞭解shell命令具體解釋,可以自己網上查詢相應的資料

開始訓練

  • 我們使用命令列進入Project目錄後,輸入
rui@Hopo:~$ sudo sh run.sh AlexNet

使用了AlexNet 引數傳入指令碼,這裡你可以在 Project/Demo 目錄下找到 AlexNet資料夾以及 GoogleNet 資料夾,分別對應相應的訓練模型,也即使是你可以傳入 GoogleNet 引數來使用 GoogleNet 進行訓練。

不過需要注意的是需要注意的的是:
0 vs.2 錯誤一般是 Gpu 記憶體不足,而0 vs.4, 一般是沒有使用sudo管理員模式執行。對於有些電腦,訓練時,直接強制推出。如果再想呼叫GPU,只能重啟電腦再進行訓練

  • 訓練結果儲存在了 /Demo/result 資料夾下了,可以在對應的 AlexNet 或者 GoogleNet 資料夾下查詢相應的訓練結果。

測試

測試檔案型別時,主要用到的是四個檔案,在test/model資料夾的目錄結構:

test
│   
└─── model
      |       caffenet.caffemodel
      |       deploy.prototxt
      |       image_mean.binaryproto
      |       synset_words.txt
  • caffenet.caffemodel 是訓練結果檔案,將訓練結果放在此資料夾內並改名成此名。將Project/Demo/result/ 資料夾下相應的檔案放在此處。
  • deploy.prototxt 是網路模型檔案,其實大部分都僅僅是在訓練網路模型中刪除了前向網路。
  • image_mean.binaryproto 是中值檔案,不影響測試結果,僅僅影響測試時間,可以將 Project/Demo/result/image_mean.binaryproto 放在這裡來縮減測試時間
  • synset_words.txt 是標註,即是測試時,命令列顯示的標註,內容可以改成自己想要的名字。


修改test/test.sh檔案

在test.sh資料夾中找到下列相應的內容,其中

  • CAFFE caffe安裝的根目錄
  • INPUT 測試所使用的model,model有相應的四個檔案
  • TEST_PHOTO 存放測試照片的資料夾
  • res_txt 測試結果存放路徑
CAFFE=/home/ubuntu/Softs/caffe-master
INPUT=/media/rui/WANG/Project/test/model
TEST_PHOTO=./photo
res_txt=/home/ubuntu/gdp/fire/qingdao/test/pos.txt

進行測試

不顯示照片進行測試:

rui@Hopo:~$ sudo sh test.sh 0

此時所帶的 0 表示測試時不顯示照片。僅僅在命令列顯示結果並且存在pos.txt資料夾中
如果將0 更改成 1,則比引數 0 多出來顯示照片這一步驟。






需要注意的是

在ubuntu16.04下程式設計,shell執行指令碼可能會提示語法錯誤。有可能是shell編碼設定的程式設計風格不對,得自己設定一下。具體可以百度,或者留言討論,如果碰到任何問題,可以留言諮詢,我會盡快答覆。

關於將二分類拓展成N分類我就不具體展開,如果想了解可以留言,我會進行相應答覆(其實是答主有點懶,而且進行N分類還要更改一些東西,之前弄過,但隔離的時間有點長忘記了,如果現在弄可能得花點時間,就算寫出來了可能還沒多少人看呢!)

最最重要的是,現在caffe差不多大部分已經差不多都遷移到了caffe2中了,還是趕快學caffe2吧