已yolov3中cfg參數(shù)文件為例
batch=64 :每一次迭代(iteration)送到網(wǎng)絡(luò)的圖片數(shù)量,也叫做批數(shù)量。增大這個(gè)參數(shù)可以讓網(wǎng)絡(luò)在較少的迭代次數(shù)內(nèi)完成一個(gè)輪次(epoch)。在固定最大迭代次數(shù)的前提(一般如此)下,增加batch的數(shù)量會(huì)延長(zhǎng)訓(xùn)練時(shí)間,但是會(huì)更好的尋找到梯度下降的方向。如果GPU(顯存)夠大,可以增大這個(gè)值來提高內(nèi)存利用率。這個(gè)值是不斷的嘗試選取,過小的話可能會(huì)讓訓(xùn)練不夠收斂,過大的話會(huì)陷入局部最優(yōu)。
subdivison=32:這個(gè)參數(shù)會(huì)讓每一個(gè)batch不是一下子都丟到網(wǎng)絡(luò)中,而是會(huì)分成subdivision對(duì)應(yīng)數(shù)字的份數(shù),一份一份的都丟到網(wǎng)絡(luò)里,最后一起打包算一次iteration。這樣會(huì)降低對(duì)顯存的占用情況。如果把這個(gè)參數(shù)設(shè)置為1的話,就是將一個(gè)batch扔到網(wǎng)絡(luò)中喂數(shù)據(jù)。如果是2,一次仍一半。
batch_size:批大小。深度學(xué)習(xí)中,一般采用SGD(隨機(jī)梯度下降)訓(xùn)練,每次訓(xùn)練在訓(xùn)練集中取batch_size樣本訓(xùn)練,我理解為和batch一樣的大小數(shù)量。
iteration:迭代,1個(gè)iteration等同于使用batch_size大小的樣本訓(xùn)練一次。
epoch:輪次,1個(gè)epoach等于使用訓(xùn)練集中全部樣本訓(xùn)練一次。
width=32,height=32,channels=3:輸入input圖像的寬,高,為32dimentions。channels是信道(通道)數(shù),3代表RGB彩色圖片,1代表灰度圖(0代表黑,暗,255代表白,亮)4為RGBA圖,其中A是透明度,也就是一般的輸入(W,H,C),還有一種表示方式,一般用cvtColor將RGB換為另一種色彩空間,飽和度,色調(diào),亮度,CV_BGR2HSV
angle=180 圖片的角度變化,單位是度,代表生成新圖片的時(shí)候隨機(jī)旋轉(zhuǎn)-180到180度
saturation=1.5,exposure=1.5:飽和度和曝光度變化大小,tiny-yolo-voc.cfg中1到1.5倍以及1/1.5到1倍
hue=.1:色調(diào)變化范圍,tiny-yolo-voc.cfg中-0.1到0.1
每次迭代中,會(huì)基于角度,飽和度,曝光度,色調(diào)產(chǎn)生新的訓(xùn)練圖片
momentum=0.9:沖量,深度學(xué)習(xí)中最優(yōu)化方法中的動(dòng)量參數(shù),這個(gè)值影響著梯度下降 到最優(yōu)值的速度,這個(gè)參數(shù)代表建議沖量配置為0.9
decay=0.0005:衰減率,權(quán)值衰減,目的是為了防止過擬合,當(dāng)網(wǎng)絡(luò)逐漸過擬合的時(shí)候網(wǎng)絡(luò)權(quán)重往往會(huì)變大,因此,為了防止過擬合,在每次迭代過程中以某個(gè)小因子,也就是衰減率降低權(quán)重,decay參數(shù),這是給誤差函數(shù)增加一個(gè)懲罰項(xiàng),常用的懲罰項(xiàng)是所有權(quán)重的平方乘以一個(gè)decay的和,權(quán)值衰減懲罰項(xiàng)使得權(quán)值收斂到較小的絕對(duì)值,減少不重要參數(shù)對(duì)結(jié)果的影響。decay參數(shù)越大對(duì)過擬合的抑制能力越強(qiáng).
learning_rate=0.001:初始的學(xué)習(xí)率。訓(xùn)練發(fā)散的話可以降低學(xué)習(xí)率,學(xué)習(xí)遇到瓶頸,loss不變的話也可以降低學(xué)習(xí)率。學(xué)習(xí)率決定了參數(shù)移動(dòng)到最優(yōu)值的速度快慢,如果學(xué)習(xí)率過大,可能會(huì)越過最優(yōu)值無法收斂,甚至發(fā)散,反之,如果學(xué)習(xí)率過小,優(yōu)化的效率可能過低,算法長(zhǎng)時(shí)間無法收斂,也容易使算法陷入局部最優(yōu)(非凸函數(shù)不能保證達(dá)到全局最優(yōu))。合適的學(xué)習(xí)率是在保證收斂的前提下,能盡快的收斂。learning_rate的設(shè)置需要不斷嘗試,一開始的時(shí)候可以設(shè)置的大一點(diǎn),這可以使得weights快一點(diǎn)發(fā)生改變,在迭代一定的epoch之后人工減小學(xué)習(xí)率。在yolo網(wǎng)絡(luò)中,網(wǎng)絡(luò)訓(xùn)練160epoches,初始學(xué)習(xí)率0.001,在60和90epoches時(shí)將學(xué)習(xí)率縮小0.1倍
steps=100,25000,35000:學(xué)習(xí)率變化時(shí)的迭代次數(shù)
scales=10,.1,.1:學(xué)習(xí)率變化的比率。這是和之前的learn_rate,steps組合在一起的,舉個(gè)例子:learn_rate:0.001,step:100,25000,35000 scales:10,.1,.1 這組數(shù)據(jù)的意思是在0到100次的迭代(iteration)期間learning rate是原始的0.001,在100到25000次iteration期間,learning_rate變?yōu)樵瓉淼?0倍,也就是0.01,在25000-35000次迭代期間,learning_rate為上一個(gè)學(xué)習(xí)率的0.1倍,就是0.001,在35000到最大迭代次數(shù)(max_batches)期間,learing_rate為上一個(gè)值的0.1倍,也就是0.0001,。隨著iteration的增加,降低學(xué)習(xí)率可以使得模型更有效學(xué)習(xí),也可以更好的降低train loss.
burn_in=1000:在迭代次數(shù)小于burn_in時(shí)候,學(xué)習(xí)率的更新有一種方式,大于burn_in時(shí),才采用policy的更新方式
policy=steps:學(xué)習(xí)策略,一般都是step這種步進(jìn)式。policy一般有:constant,steps,exp,poly,step,RANDOM,等方式。
max_batches=50000:最大迭代次數(shù),訓(xùn)練達(dá)到max_batches后停止學(xué)習(xí)
[convolutional]
batch_normalize=1:是否做BN
filters=32:輸出多少個(gè)特征圖,每一個(gè)[region/yolo]層前最后一個(gè)卷積層中的filters=(classes+1+coords)*anchors_num,其中anchors_num是該層mask的一個(gè)值,如果沒有mask,則anchors_num=num,這層的anchor5的意義是5個(gè)坐標(biāo),論文中的tx,ty,tw,th,to。3×(5+len(classes))
sizes=3:卷積核的尺寸
stride=1:卷積運(yùn)算時(shí)的步長(zhǎng)
pad=1:如果pad=1,padding大小為size/2,如果pad=0,padding由padding參數(shù)指定
activation=leaky:激活函數(shù),leaky Relu,包括logistic,loggy,relu,elu,relie,plse,hardtan,lhtan,linear,ramp,leaky,tanh,stair
[yolo]:在yolov2中yolo層叫region層
mask=6,7,8:當(dāng)前屬于第幾個(gè)預(yù)選框,這一層預(yù)測(cè)了第7,8,9個(gè)anchor boxes,每個(gè)yolo層實(shí)際上只預(yù)測(cè)3個(gè)由mask定義的anchors。
anchors=10,13? ?16,30 ,33,23? 30,61? 62,45? 59,119? ,116,90? ?156,198? 373,326 :預(yù)測(cè)框的初始寬高,第一個(gè)是w,第二個(gè)是h,總數(shù)量是num*2,YOLOV2作者說anchors是使用K-Means獲得,其實(shí)就是計(jì)算出那種類型的框比較多,可以增加收斂速度,如果不設(shè)置anchors,默認(rèn)是0.5
classes=4:網(wǎng)絡(luò)需要識(shí)別的物體種類數(shù)
num=9:每隔grid cell預(yù)測(cè)幾個(gè)box,和anchors的數(shù)量一致。當(dāng)想使用更多anchors需要調(diào)用更大num,如果調(diào)大num后訓(xùn)練obj時(shí)趨進(jìn)0的話,可以嘗試調(diào)大object_scale
jitter=.3:通過抖動(dòng)增加噪聲來抑制過擬合
ignore_thresh =.5 :決定是否需要計(jì)算IOU誤差的參數(shù),若大于閾值(thresh),IOU誤差不會(huì)差在cost function中
truth_thresh=1
random=1:為1時(shí)會(huì)啟動(dòng)Multi-Scale Traing,隨機(jī)使用不同尺寸的圖片進(jìn)行訓(xùn)練,如果為0,每次訓(xùn)練大小與輸入大小一致,是否隨機(jī)確定最后的預(yù)測(cè)框,GPU小可設(shè)置為0
Region Avg IOU:平均的IOU,代表預(yù)測(cè)的bounding box和ground truth 的交集和并集之比,期望該值趨近于1.