Caffe簡要介紹:
Caffe還沒有windows版本,所以我需要遠程登錄linux服務器
Caffe主要處理圖片/圖片序列
Caffe讀取的數據格式
從專用的數據庫中讀取(lmdb、leveldb) |
直接讀取圖片 |
從內存中讀取(會占很多內存) |
從HDF5文件中讀取 |
從滑動窗口中讀取(在大圖中滑動一次作為一張小圖) |
最常用的是前面兩種方式。默認是從lmdb數據庫格式中讀取,因此需要先把圖片文件轉換成lmdb格式文件。直接讀取圖片會導致無法減均值。如果不考慮減均值的情況,可直接讀取圖片。
Caffe操作1----准備數據
Step1:得到文件列表清單
上面的圖片源自FER庫,其中單張圖表示一個表情,寫代碼自動生成txt文檔
Step2:轉換成imdb格式
命令原理:
其中包括上面四個參數,粉色參數可以選擇不設,其中--表示可以不調整
實際操作:
在根目錄home下的/caffe路徑下打開終端,輸入sudo命令,輸入密碼,進入最大權限:
輸入命令:(輸入時注意空格)
在caffe中,作者為我們提供了這樣一個文件:convert_imageset.cpp,存放在根目錄下的tools文件夾下。編譯之后,生成對應的可執行文件放在 buile/tools/ 下面,這個文件的作用就是用於將圖片文件轉換成caffe框架中能直接使用的imdb文件。
屏幕上顯示:
查看結果:
在目標目錄下新增了我命名的一個文件夾
文件夾里包括兩個子文件,data.mdb存放數據;lock.mdb存放標簽
基礎知識補充
Linux下的文件夾與目錄
/home |
根目錄,分區時分得最大 |
/bin |
存放系統命令 |
/user |
最大的目錄,存放應用程序和文件 |
/etc |
存放配置文件 |
/dev |
設備特殊文件 |
/mnt |
用於臨時掛載硬盤、光盤 |
/src |
里面放源文件如cpp |
如何生成train.txt文件以及如何在轉imdb格式時調整圖片格式,見:http://www.cnblogs.com/denny402/p/5082341.html
Step3:計算均值
減去均值,可以提高精度。當然也可以選擇不減均值。
擴展名必須是binaryproto
實際代碼:
其中包括兩個參數,一個是放置imdb數據的文件地址,另一個是保存均值文件的地址及文件名字
得到binarypro均值文件
擴展閱讀:http://www.cnblogs.com/denny402/p/5102328.html
Caffe操作2----構建網絡結構
在運行的整個流程中,可以分為三個階段:訓練階段、驗證階段和測試階段。網絡結構在不同的階段是不同的,都存放在prototxt文件里面。為了方便,一般將訓練階段和驗證階段的網絡結構放在一個文件里,測試階段的網絡結構單獨放在一個文件里:
一個layer表示一層
layer是可以復制可以嵌套的
1)數據層
Name可以隨便取
Type是系統自帶的,不可以自己命名
Top表示向上傳送數據,bottom表示從下面接收數據,通過這個top還是bottom就決定了數據的流向以及不同層之間的鏈接關系
Phase:train表示只有訓練時調用這層
Mirror表示翻轉
Cropsize表示一張圖變為40*40*10,使得樣本數增加
Batchsize是2的倍數,表示批量處理
http://www.cnblogs.com/denny402/p/5070928.html
2)卷積層
Decay=0表示不衰減
Num_output 卷積核個數/節點數目
Kernal_size 一般是3*3 5*5 7*7 不能太大
Padding 卷積后圖變小,所以固定填充0,如果=2,表示周邊上下左右填充2個pixel
Gaussian表示用高斯方法對w與b進行初始化
http://www.cnblogs.com/denny402/p/5071126.html
3)激活層
常用relu,sigmod
http://www.cnblogs.com/denny402/p/5072507.html
4)池化層
caffe只支持max和average,stochastic是隨機的意思
Stride不能寫1,否則就沒有池化功能
http://www.cnblogs.com/denny402/p/5071126.html
5)全連接層
Xvaier初始化方法很好,默認值為0
Type類型都不變
http://www.cnblogs.com/denny402/p/5072746.html
6)其它層
Loss層加在全連接層后面
如果要測試,還加一層softmax層
Deploy.prototxt文件用於測試階段,測試數據沒有標簽值,因此數據輸入層與其它兩個階段不同。
Caffe自動會復制灰度圖變為3通道圖
Caffe操作3----配置參數solver.prototxt
這里設置全局參數
每訓練完成一個interval以后就驗證一次是否>449
基礎學習率決定收斂不收斂
Step:每隔多少變化一次
Stepshot:每訓練多少保存一次參數
http://www.cnblogs.com/denny402/p/5074049.html
Caffe操作4----訓練模型
這一步會生成caffe 的model文件,把參數訓練完成
例:
build/tools/caffe train -solver /home/bnu/fer/solver.prototxt
http://www.cnblogs.com/denny402/p/5076285.html
Caffe操作5----測試模型
Classification.bin是自帶的可執行體
http://www.cnblogs.com/denny402/p/5111018.html