從E,P,T 下手調節代碼,梳理作者思路
綜合分析
E:
類別名的修改
訓練集標註
訓練集測試集的拆分
數據處理:訓練尺寸:最小尺寸和最大尺寸
P:
預訓練權重
rpn框數
T:
學習率
最大迭代次數
保存模型迭代次數
詳細步驟
首先可以肯定的是代碼以 experiments文件 中的 腳本文件scripts 開頭
我們以 rfcn_end2end_ohem.sh 爲案例開始梳理
期間調用了很多的配置文件需要我們修改,我們逐個分析:
一:運行文件
rfcn_end2end_ohem.sh 爲第一個修改內容,它是一個運行整個程序的腳本文件,可以修改的地方是第一個pascal_voc中的iters迭代次數 ITERS
同時我們也看到了三個配置文件的路徑
TRAIN_IMDB :訓練集路徑
TEST_IMDB:測試集路徑
PT_DIR:配置路徑
都需要進行修改,但這三個我們暫時不去理會
二:配置文件
同樣在experiments文件下有一個叫cfgs的文件夾,其中放了相對腳本的配置文件
所以我們修改的是 rfcn_end2end_ohem.yml 其中可以修改的參數是
SNAPSHOT_ITERS:參數,循環多少次,保存一次模型
RPN_POST_NMS_TOP_N : 選取多少個rpn框
三:數據安放
這時候就需要我們對EPT思路有所理解了,E代表數據,所以我們就先處理數據
首先我們要建立一個類似下面的結構,Annotations 存放xml文件 ,JPEGimages 存放圖片 , Main存放圖片名字類型的txt
然後將整個ImageSets文件放入data文件夾下,閱讀readme即可知詳細位置
Please copy this folder to $RFCN_ROOT/data/VOCdevkit0712/VOC0712
根據readme內容可知,最後的路徑在
四:修改類名
在lib文件夾下的 datasets/pascal_voc 是修改類名的py文件
同時在 fast_rcnn/config 中可以修改圖片尺度大小的配置,完成多尺度訓練
配置最大尺度和最小尺度
五:添加網絡
在data文件中 的imagenet_models 下添加主幹網絡,沒有則新建,閱讀readme即可得到下載網址
./data/scripts/fetch_imagenet_models.sh
六:迭代修改
model/pascal_voc/ResNet-50/rfcn_end2ends/solver_ohem.prototxt :
①調整學習率,多少次降低一次學習率,打印跨數
②模型名稱 snapshot_prefix = “ ”
model/pascal_voc/ResNet-50/rfcn_end2ends/train_agnostic_ohem.prototxt 和 test_agnostic.prototxt 相同
①類別數
②搜索PSROIPooling 修改num_output
③修改position sensitive ROI pooling 輸出
output
group_size
文件分析:
data:
新建cache(貯存器) 所有的標籤讀取起來,然後放在一起
* 要常清理,默認有的話會直接讀取,但我們的數據時有改變
* 還記錄了對數據集的所有操作,相當於日誌
imagenet_models:主幹網絡
main:分配好訓練集和測試集的圖片名,不需要後綴
experiments:
cfgs:配置參數
logs:觀看日誌可知後臺是否在運行程序
scripts:代碼運行文件
lib:庫
rpn:pyc是py編譯的中間過程,是rcnn的主要文件
datasets:
pascal_voc:
1.編輯類名
2.問題1:而此代碼的pascal設置第一位是1,所以減一
問題2:有的圖片設置位置超出區域後會轉回來
可以設置臨界點,比如大於20就規定20
fast_rcnn:
config:控制是否多尺度訓
model:
pascal_voc:
ResNet-50:
rfcn_end2ends:
solver_ohem.prototxt
①調整學習率,多少次降低一次學習率,打印跨數
②模型名稱 snapshot_prefix = “ ”
train_agnostic_ohem.prototxt
①類別數
②搜索ps 修改num_output
③修改position sensitive ROI pooling 輸出
output
group_size