1. 程式人生 > >用Faster RCNN訓練自己的資料集

用Faster RCNN訓練自己的資料集

Faster RCNN(py caffe)工程各個目錄的作用:

  1. caffe-fast-rcnn:caffe框架目錄;
  2. data:用來存放pretrained(預訓練)模型以及讀取檔案的cache快取,還有一些下載模型的指令碼;
  3. experiments:存放配置檔案以及執行的log檔案,另外這個目錄下有scripts,裡面存放end2end和alt_opt兩種訓練方式的指令碼;
  4. lib:用來存放一些python介面檔案,如其下的datasets主要負責資料庫讀取,config負責一些訓練的配置選項;
  5. models:裡面存放了三個模型檔案,小型網路ZF,中型網路VGG_CNN_M_1024以及大型網路VGG16,根據你的硬體條件來選擇使用哪種網路,ZF和VGG_CNN_M_1024需要至少3G記憶體
    ,VGG16需要更多的記憶體,但不會超過11G;
  6. output:這裡存放的是訓練完成後的輸出目錄,這是運行了訓練後才會出現的目錄;
  7. tools:裡面存放的是訓練和測試的Python檔案;

一、簡單修改,用Pascal Voc 2007 格式,僅替換其中的XML檔案及圖片等

用自己資料集圖片標籤等替換原來的pascal voc

  1. 用自己要訓練的圖片/資料集替換FRCN_ROOT/data/VOCdevkit2007/VOC2007/JPEGImages/下的圖片;
  2. 用自己資料集對應的標籤替換FRCN_ROOT/data/VOCdevkit2007/VOC2007/Annotations/目錄下的XML檔案;
  3. 用自己做的train.txt、val.txt、trainval.txt、待檢測目標_train.txt、待檢測目標_val.txt、待檢測目標_trainval.txt(如:insulator_train.txt)等txt檔案替換FRCN_ROOT/data/VOCdevkit2007/VOC2007/ImageSets/Main/
    目錄下的txt檔案;

修改prototxt配置檔案

這些配置檔案都在FRCN_ROOT/models/pascal_voc/下。裡面有三種網路結構:VGG16、VGG_CNN_M_1024、ZF,本文選擇的是ZF 。每個網路結構中都有三個資料夾,分別是faster_rcnn_alt_opt、faster_rcnn_end2end、faster_rcnn; (網上說:使用近似聯合訓練,比交替優化快1.5倍,但是準確率相近,所以推薦使用這種方法)所以,更改faster_rcnn_end2end資料夾下的train.prototxt和test.prototxt:

  1. train.prototxt(所在目錄:/home/xu/FRCN_ROOT/models/pascal_voc/ZF/faster_rcnn_end2end/test.prototxt
    )中需要更改的地方有三處,第一處是’input-data’層: 將num_output原來的21(目標20種+背景1種=21)改為:資料集目標類別數+1:

第二處是cls_score層: num_output修改原理同第一處:

第三處是bbox_pred層,在這裡需將num_output原來的84改為:(目標類別數+1)×4,原來的是(20+1)*4=84:

  1. test.prototxt中沒有input-data層,所以只需按照train中的修改cls_score層以及bbox_pred層即可:

修改lib/datasets/pascal_voc.py,將類別改成自己的類別

進入RCN_ROOT/lib/datasets/,找到pascal_voc.py檔案,將類別修改為自己資料集的目標類別:

datasets目錄下主要有三個檔案,分別是 (1) factory.py:這是一個工廠類,用類生成imdb類並且返回資料庫供網路訓練和測試使用; (2) imdb.py:是資料庫讀寫類的基類,封裝了許多db的操作; (3) pascl_voc.pyRoss用這個類來操作;

開始訓練

cd FRCN_ROOT
./experiments/scripts/faster_rcnn_end2end.sh 0 ZF pascal_voc

由於訓練過程太長,可以將訓練過程產生的輸出定向輸入到log檔案中,這樣可方便檢視。只需在上述命令中加入定向輸入的命令即可,如下: ./experiments/scripts/faster_rcnn_end2end.sh 0 ZF pascal_voc > /home/xu/log/clothdirector.log 2>&1 !!!訓練前需要將cache中的pki檔案以及VOCdevkit2007中annotations_cache的快取刪掉。