在caffe上fine-tuning网络
關于fine-tuning的幾個小問題:
1、fine-tuning是什么意思
答:所謂fine-tuning就是微調的意思,也就是在一個已經有了不錯的performance的網絡基礎上,針對自己的任務微小的調整網絡中的參數。
2、為何要fine-tuning
答:因為我們做的方向經常是一些特定領域的識別分類任務,比如人臉,車輛,植物等等,而像ImageNet這樣上千萬級的數據庫,我們是不會用到其全部的數據,通常我們的數據量都是比較小的。但是對于一個深度神經網絡而言,我們需要輸入大量的訓練圖像來訓練參數,在這種情況下完全的重新去訓練一個網絡是非常困難的,所以我們通常會選擇在一個比較好的model上來調整參數。
3、目前可以選擇用來fine-tuning的原始model有哪些
答:我比較low,知道的不多,自己用過的有:AlexNet,VGG-16,VGG-19,Network In Network等
fine-tuning流程
fine-tuning的步驟與訓練神經網絡的步驟幾乎是一致的,主要有以下幾個步驟:
0、下載好已有的模型參數文件
1、準備好訓練數據與測試數據
2、計算圖像均值
3、修改網絡文件
4、修改solver文件中的初始參數
5、開始fine-tuning
接下里針對每一步進行具體的說明
0、下載已有的模型參數文件
已訓練好的模型參數文件在caffe中以后綴名為‘.caffemodel’的形式保存,這個文件需要我們自己在網上下載好。
1、準備訓練數據與測試數據
這里需要我們將所有的圖像生成一個帶標簽的list,每一行為圖像的存儲路徑和標簽,注意標簽一定要從0開始,大致的形式如下:
/FMD/image/fabric/fabric_moderate_001_new.jpg 0 /FMD/image/fabric/fabric_moderate_002_new.jpg 0 /FMD/image/fabric/fabric_moderate_003_new.jpg 0關于如何生成list并將圖像順序打亂可以參考文章:(http://blog.csdn.net/cheese_pop/article/details/52754837)
這樣之后,我們將得到兩份文本文件一個為訓練集,一個為測試集。
2、計算圖像均值
在計算圖像均值前,我們需要先將訓練集轉為lmdb的格式,caffe里已經自帶了convert_imageset工具,腳本代碼如下,如何修改成自己需要的寫在了注釋里:
#!/usr/bin/env sh # Create the imagenet lmdb inputs../caffe-master_github/build/tools/convert_imageset.bin \ #convert_imageset.bin所在路徑/data2 \ #這個行的內容與下一行中涉及到的trian.txt文件中的圖片路徑拼起來是圖像的絕對路徑/temp/train.txt \./101lmdb LMDB #保存的文件名及格式,(這里保存成LMDB數據格式)這樣生成了lmdb數據后,我們可以開始計算圖像均值,代碼如下:
../caffe-master_github/build/tools/compute_image_mean.bin 101lmdb mean.binaryproto其中第一個參數是compute_image_mean.bin工具所在路徑,第二個參數就是在上一步生成的lmdb數據庫,第三個參數為生成的均值文件。圖像的均值文件是以二進制的形式存儲的,可以看到里面是類似于亂碼的形式。
3、修改網絡prototxt文件
1、修改data層的代碼,source參數訓練集或測試的參數,meanfile參數修改為上一步中生成的mean.prototxt均值文件。
2、修改最后一層的名稱和學習率,修改名字是因為預訓練模型賦值的時候就會因為名字不匹配從而重新訓練,也就達成了我們適應新任務的目的;修改學習率是因為最后一層是重新學習,因此相比較其他層,這一層需要有更快的學習速率,因此我們將weight和bias的學習速率加快10倍。
4、修改solver文件中的初始參數
關于solver文件中的各個參數的含義,可以參考文章:caffe中solver.prototxt文件參數解釋
與重新訓練一個網絡不同的是,fine-tuning的時候loss已接近最優值,因此學習率和步長都應該調小一些。需要修改的參數有:
1、test_iter和test_interval。這兩個只需要根據自己的數據量和網絡文件中的batchsize設置的大小進行修改
2、base_lr 調低10倍甚至更多。trick:如果發現在fintune過程中loss的變化比較震蕩,可以進一步調低base_lr的大小
3、stepsize 和max_iter根據情況調低。
5、開始fine-tuning
fine-tunig時只需在腳本中載入預訓練好的model,腳本代碼:
../../caffe-master_github/build/tools/caffe train \-solver ./VGG_ILSVRC_19_layers_sovler.prototxt \-weights ./VGG_ILSVRC_19_layers.caffemodel \ #載入預訓練的model2>&1 | tee log.txt總結
以上是生活随笔為你收集整理的在caffe上fine-tuning网络的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php中文切齿,PHP 各种函数
- 下一篇: OpecCV颜色分割