目前呢,caffe,theano,torch是當下比較流行的deep learning的深度學習框架,樓主最近也在做一些與此相關的事情。在這裡,我主要介紹一下如何在caffe上微調網路,適應我們自己特定的新任務。一般來說我們自己需要做的方向,比如在一些特定的領域的識別分類中,我們很難拿到大量的資料。因為像在imagenet上畢竟是乙個千萬級的影象資料庫,通常我們可能只能拿到幾千張或者幾萬張某一特定領域的影象,比如識別衣服啊、標誌啊、生物種類等等。在這種情況下重新訓練乙個新的網路是比較複雜的,而且引數不好調整,資料量也不夠,因此fine-tuning微調就是乙個比較理想的選擇。
微調網路,通常我們有乙個初始化的模型引數檔案,這裡是不同於training from scratch,scrachtch指的是我們訓練乙個新的網路,在訓練過程中,這些引數都被隨機初始化,而fine-tuning,是我們可以在imagenet上1000類分類訓練好的引數的基礎上,根據我們的分類識別任務進行特定的微調。
這裡我以乙個車型的識別為例,假設我們有431種車型需要識別,我的任務物件是車,現在有imagenet的模型引數檔案,在這裡使用的網路模型是caffenet,是乙個小型的網路,其實別的網路如googlenet也是一樣的原理。那麼這個任務的變化可以表示為:
任務:分類
類別數目:1000(imagenet上1000類的分類任務)------> 431(自己的特定資料集的分類任務431車型)
那麼在網路的微調中,我們的整個流程分為以下幾步:
依然是準備好我們的訓練資料和測試資料
計算資料集的均值檔案,因為集中特定領域的影象均值檔案會跟imagenet上比較general的資料的均值不太一樣
修改網路最後一層的輸出類別,並且需要加快最後一層的引數學習速率
調整solver的配置引數,通常學習速率和步長,迭代次數都要適當減少
啟動訓練,並且需要載入pretrained模型的引數
簡單的用流程圖標意一下:
這一點就不用說了,準備兩個txt檔案,放成list的形式,可以參考caffe下的example,影象路徑之後乙個空格之後跟著類別的id,如下,這裡記住id必須從0開始,要連續,否則會出錯,loss不下降,按照要求寫就ok。
這個是訓練的影象label,測試的也同理
使用caffe下的convert_imageset工具
具體命令是
/home/chenjie/louyihang/caffe/build/tools/convert_imageset /home/chenjie/dataset/compcars/data/cropped_image/ ../train_test_split/classification/train_model431_label_start0.txt ../intermediate_data/train_model431_lmdb -resize_width=227 -resize_height=227 -check_size -shuffle true其中第乙個引數是基位址路徑用來拼接的,第二個是label的檔案,第三個是生成的資料庫檔案支援leveldb或者lmdb,接著是resize的大小,最後是否隨機順序
參照caffe上的例程,我用的是caffenet,首先在輸入層data層,修改我們的source 和 meanfile, 根據之前生成的lmdb 和mean.binaryproto修改即可
最後輸出層是fc8,
1.首先修改名字,這樣預訓練模型賦值的時候這裡就會因為名字不匹配從而重新訓練,也就達成了我們適應新任務的目的。
1.調整學習速率,因為最後一層是重新學習,因此需要有更快的學習速率相比較其他層,因此我們將,weight和bias的學習速率加快10倍。
原來是fc8,記得把跟fc8連線的名字都要修改掉,修改後如下
原來的引數是用來training from scratch,從原始資料進行訓練的,因此一般來說學習速率、步長、迭代次數都比較大,在fine-tuning 微調呢,也正如它的名字,只需要微微調整,以下是兩個對比圖
主要的調整有:test_iter從1000改為了100,因為資料量減少了,base_lr從0.01變成了0.001,這個很重要,微調時的基本學習速率不能太大,學習策略沒有改變,步長從原來的100000變成了20000,最大的迭代次數也從450000變成了50000,動量和權重衰減項都沒有修改,依然是gpu模型,網路模型檔案和快照的路徑根據自己修改
ok,最後達到的效能還不錯accuray 是0.9,loss降的很低,這是我的caffe初次體驗,希望能幫到大家!
Caffe fine tuning 微調網路
目前呢,caffe,theano,torch是當下比較流行的deep learning的深度學習框架,樓主最近也在做一些與此相關的事情。在這裡,我主要介紹一下如何在caffe上微調網路,適應我們自己特定的新任務。一般來說我們自己需要做的方向,比如在一些特定的領域的識別分類中,我們很難拿到大量的資料。...
Caffe fine tuning 微調網路
目前呢,caffe,theano,torch是當下比較流行的deep learning的深度學習框架,樓主最近也在做一些與此相關的事情。在這裡,我主要介紹一下如何在caffe上微調網路,適應我們自己特定的新任務。一般來說我們自己需要做的方向,比如在一些特定的領域的識別分類中,我們很難拿到大量的資料。...
遷移學習 微調
場景 假設我們想從影象中識別不同種類的椅子,然後將購買鏈結推薦給使用者,一種可能的方法是 1 先找出100中常見的椅子,然後對椅子從各個角度進行拍照 2 通過該資料集訓練乙個深度學習模型 然而這個資料集的規模會遠遠小於imagenet樣本數,這種情況下會導致適用於imagenet的模型在現有的資料集...