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吧