? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?solver.prototxt
net:?"models/pascal_voc/VGG_CNN_M_1024/faster_rcnn_end2end/train.prototxt"??
設(shè)置深度網(wǎng)絡(luò)模型孙咪。每一個模型就是一個net宁改,需要在一個專門的配置文件中對net進行配置樊破,文件的路徑要從caffe的根目錄開始愉棱,其它的所有配置都是這樣。
test_iter:?100 ?
這個要與test layer中的batch_size結(jié)合起來理解哲戚。mnist數(shù)據(jù)中測試樣本總數(shù)為10000奔滑,一次性執(zhí)行全部數(shù)據(jù)效率很低,因此我們將測試數(shù)據(jù)分成幾個批次來執(zhí)行顺少,每個批次的數(shù)量就是batch_size朋其。假設(shè)我們設(shè)置batch_size為100王浴,則需要迭代100次才能將10000個數(shù)據(jù)全部執(zhí)行完。因此test_iter設(shè)置為100梅猿。執(zhí)行完一次全部數(shù)據(jù)氓辣,稱之為一個epoch
test_interval:?500 ?
測試間隔。也就是每訓(xùn)練500次袱蚓,才進行一次測試筛婉。
base_lr:?0.01 ?
lr_policy:"inv"??
gamma:?0.0001??
power:?0.75??
這四行可以放在一起理解,用于學(xué)習(xí)率的設(shè)置癞松。只要是梯度下降法來求解優(yōu)化爽撒,都會有一個學(xué)習(xí)率,也叫步長响蓉。base_lr用于設(shè)置基礎(chǔ)學(xué)習(xí)率硕勿,在迭代的過程中,可以對基礎(chǔ)學(xué)習(xí)率進行調(diào)整枫甲。怎么樣進行調(diào)整源武,就是調(diào)整的策略,由lr_policy來設(shè)置想幻。
lr_policy可以設(shè)置為下面這些值粱栖,相應(yīng)的學(xué)習(xí)率的計算為:
- fixed: ?保持base_lr不變.
- step: ?如果設(shè)置為step,則還需要設(shè)置一個stepsize, ?返回 base_lr * gamma ^ (floor(iter / stepsize)),其中iter表示當(dāng)前的迭代次數(shù)
- exp: ? 返回base_lr * gamma ^ iter, iter為當(dāng)前迭代次數(shù)
- inv: ? ? 如果設(shè)置為inv,還需要設(shè)置一個power, 返回base_lr * (1 + gamma * iter) ^ (- power)
- multistep:?如果設(shè)置為multistep,則還需要設(shè)置一個stepvalue脏毯。這個參數(shù)和step很相似闹究,step是均勻等間隔變化,而multistep則是根據(jù) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? stepvalue值變化
- poly: ?學(xué)習(xí)率進行多項式誤差, 返回 base_lr (1 - iter/max_iter) ^ (power)
- sigmoid: 學(xué)習(xí)率進行sigmod衰減食店,返回 base_lr ( 1/(1 + exp(-gamma * (iter - stepsize))))
multistep示例:
base_lr:?0.01 ?
momentum:?0.9??
weight_decay:?0.0005??
#?The?learning?rate?policy??
lr_policy:"multistep"??
gamma:?0.9??
stepvalue:?5000??
stepvalue:?7000??
stepvalue:?8000??
stepvalue:?9000??
stepvalue:?9500??
momentum?:0.9 ?
上一次梯度更新的權(quán)重
type:?SGD ?
優(yōu)化算法選擇渣淤。這一行可以省掉,因為默認值就是SGD吉嫩〖廴希總共有六種方法可選擇,在本文的開頭已介紹自娩。
weight_decay:?0.0005 ?
權(quán)重衰減項用踩,防止過擬合的一個參數(shù)。
display:?100 ?
每訓(xùn)練100次忙迁,在屏幕上顯示一次脐彩。如果設(shè)置為0,則不顯示动漾。
max_iter:?20000 ?
最大迭代次數(shù)丁屎。這個數(shù)設(shè)置太小荠锭,會導(dǎo)致沒有收斂旱眯,精確度很低。設(shè)置太大,會導(dǎo)致震蕩删豺,浪費時間共虑。
snapshot:?5000 ?
snapshot_prefix:"examples/mnist/lenet"??
快照。將訓(xùn)練出來的model和solver狀態(tài)進行保存呀页,snapshot用于設(shè)置訓(xùn)練多少次后進行保存妈拌,默認為0,不保存蓬蝶。snapshot_prefix設(shè)置保存路徑尘分。
還可以設(shè)置snapshot_diff,是否保存梯度值丸氛,默認為false,不保存培愁。
也可以設(shè)置snapshot_format,保存的類型缓窜。有兩種選擇:HDF5 和BINARYPROTO 定续,默認為BINARYPROTO
solver_mode:?CPU ?
設(shè)置運行模式。默認為GPU,如果你沒有GPU,則需要改成CPU,否則會出錯禾锤。
py-faster-rcnn代碼閱讀1-train_net.py & train.py
faster-rcnn 之 基于roidb get_minibatch(數(shù)據(jù)準(zhǔn)備操作)
https://blog.csdn.net/sloanqin/article/details/51611747
imdb
??image_set: split
??devkit_path: config.DATA_DIR(root/data/) + VOCdevkit + year
??data_path: devkit_path + '/' + 'VOC' + year
??image_index: a list read image name from
例如私股,root/data + /VOCdevkit2007/VOC2007/ImageSets/Main/{image_set}.txt
roidb: gt_roidb得到(cfg.TRAIN.PROPOSAL_METHOD=gt導(dǎo)致了此操作)
classes: 類別定義
num_classes: 類別的長度
class_to_ind:{類別名:類別索引}字典
num_images(): image_index'length,數(shù)據(jù)庫中圖片個數(shù)
image_path_at(index): 得到第index圖片的地址恩掷,data_path + '/' + 'JPEGImages' + image_index[index] + image_ext(.jpg)
在train_faster_rcnn_alt_opt.py的imdb.set_proposal_method之后一旦用imdb.roidb都會用gt_roidb讀取xml中的內(nèi)容中得到部分信息
xml的地址:data_path + '/' + 'Annotations' + '/' + index + '.xml'
??????????(root/data/) + VOCdevkit + year ?+ '/' + 'VOC' + year + '/' + 'Annotations' + '/' + index + '.xml'
get_training_roidb: 對得到的roi做是否反轉(zhuǎn)(參見roidb的flipped倡鲸,為了擴充數(shù)據(jù)庫)和到roidb.py的prepare_roidb中計算得到roidb的其他數(shù)據(jù)
def get_minibatch(roidb, num_classes):
這個函數(shù)會根據(jù)roidb中的信息,調(diào)用opencv讀取圖片黄娘,整理成blobs返回旦签,所以這個函數(shù)是faster-rcnn實際的數(shù)據(jù)準(zhǔn)備操作,我們來分析minibatch.py這個文件寸宏;
【輸入】:roidb是一個list宁炫,list中的每個元素是一個字典,每個字典對應(yīng)一張圖片的信息氮凝,其中的主要信息有:
boxes 一個二維數(shù)組羔巢,每一行存儲?xmin?ymin?xmax?ymax
gt _classes存儲了每個box所對應(yīng)的類索引(類數(shù)組在初始化函數(shù)中聲明)
gt _overlap是一個二維數(shù)組,共有num _classes(即類的個數(shù))行罩阵,每一行對應(yīng)的box的類索引處值為1竿秆,其余皆為0,后來被轉(zhuǎn)成了稀疏矩陣
seg _areas存儲著某個box的面積
flipped 為false 代表該圖片還未被翻轉(zhuǎn)(后來在train.py里會將翻轉(zhuǎn)的圖片加進去稿壁,用該變量用于區(qū)分
height:圖片原始的高
width:圖片原始的寬
image:圖片的路徑
??boxes: four rows.the proposal.left-up,right-down
(下面的值在roidb.py的prepare_roidb中得到)
image:image_path_at(index)幽钢,此roi的圖片地址
width:此圖片的寬
height: 高
max_classes: box的類別=labels(gt_overlaps行最大值索引)
max_overlaps:(gt_overlaps行最大值)(max_overlaps=0,max_classes=0傅是,即都是背景匪燕,否則不正確) ?
output_dir:?ROOT_DIR + 'output' + EXP_DIR('faster_rcnn_alt_opt') + imdb.name("voc_2007_trainval" or "voc_2007_test")