【YOLO學習筆記】之YOLO配置檔案詳解
阿新 • • 發佈:2018-12-09
在YOLO初體驗中,應用到了一個字尾名為cfg的檔案,在darknet中有一個資料夾,下面有各種各樣的cfg檔案
這些cfg檔案都是YOLO的配置檔案,負責YOLO所需資料集的訓練工作,接下來,給大家詳細講解一下配置檔案。講解配置檔案,我以 yolov2-tiny.cfg 檔案為例。該檔案具體內容如下:
[net] # Testing # batch=1 # subdivisions=1 # Training batch=1 subdivisions=1 width=480 height=480 channels=3 momentum=0.9 decay=0.0005 angle=0 saturation = 1.5 exposure = 1.5 hue=.1 learning_rate=0.001 burn_in=1000 max_batches = 500200 policy=steps steps=400000,450000 scales=.1,.1 [convolutional] batch_normalize=1 filters=16 size=3 stride=1 pad=1 activation=leaky [maxpool] size=2 stride=2 [convolutional] batch_normalize=1 filters=32 size=3 stride=1 pad=1 activation=leaky [maxpool] size=2 stride=2 [convolutional] batch_normalize=1 filters=64 size=3 stride=1 pad=1 activation=leaky [maxpool] size=2 stride=2 [convolutional] batch_normalize=1 filters=128 size=3 stride=1 pad=1 activation=leaky [maxpool] size=2 stride=2 [convolutional] batch_normalize=1 filters=256 size=3 stride=1 pad=1 activation=leaky [maxpool] size=2 stride=2 [convolutional] batch_normalize=1 filters=512 size=3 stride=1 pad=1 activation=leaky [maxpool] size=2 stride=1 [convolutional] batch_normalize=1 filters=1024 size=3 stride=1 pad=1 activation=leaky ########### [convolutional] batch_normalize=1 size=3 stride=1 pad=1 filters=512 activation=leaky [convolutional] size=1 stride=1 pad=1 filters=30 activation=linear [region] anchors = 0.57273, 0.677385, 1.87446, 2.06253, 3.33843, 5.47434, 7.88282, 3.52778, 9.77052, 9.16828 bias_match=1 classes=1 coords=4 num=5 softmax=1 jitter=.2 rescore=0 object_scale=5 noobject_scale=1 class_scale=1 coord_scale=1 absolute=1 thresh = .6 random=1
加註釋後文件如下:
[net] # Testing # batch=1 # subdivisions=1 # Training batch=1 #每batch個樣本更新一次引數。每次迭代要進行訓練的圖片數量 。 subdivisions=1 #如果記憶體不夠大,將batch分割為subdivisions個子batch,每個子batch的大小為batch/subdivisions。 #在darknet程式碼中,會將batch/subdivisions命名為batch。 width=416 #Input影象的寬 height=416 #input影象的高 channels=3 #Input影象的通道數 momentum=0.9 #動量 decay=0.0005 #權重衰減正則項,防止過擬合 angle=0 #通過旋轉角度來生成更多訓練樣本 saturation = 1.5 #通過調整飽和度來生成更多訓練樣本 exposure = 1.5 #通過調整曝光量來生成更多訓練樣本 hue=.1 #通過調整色調來生成更多訓練樣本 learning_rate=0.0001 #初始學習率 max_batches = 500200 #訓練達到max_batches後停止學習 policy=steps #調整學習率的policy,有如下policy:CONSTANT, STEP, EXP, POLY, STEPS, SIG, RANDOM steps=400000,450000 #根據batch_num調整學習率 scales=10,.1,.1 #學習率變化的比例,累計相乘 [convolutional] batch_normalize=1 #是否做BN filters=16 #輸出多少個特徵圖 size=3 #卷積核的尺寸 stride=1 #做卷積運算的步長 pad=1 #如果pad為0,padding由 padding引數指定。如果pad為1,padding大小為size/2 activation=leaky #啟用函式: #logistic,loggy,relu,elu,relie,plse,hardtan,lhtan,linear,ramp,leaky,tanh,stair [maxpool] size=2 #池化層尺寸 stride=2 #池化步進 [convolutional] batch_normalize=1 filters=32 size=3 stride=1 pad=1 activation=leaky [maxpool] size=2 stride=2 [convolutional] batch_normalize=1 filters=64 size=3 stride=1 pad=1 activation=leaky [maxpool] size=2 stride=2 [convolutional] batch_normalize=1 filters=128 size=3 stride=1 pad=1 activation=leaky [maxpool] size=2 stride=2 [convolutional] batch_normalize=1 filters=256 size=3 stride=1 pad=1 activation=leaky [maxpool] size=2 stride=2 [convolutional] batch_normalize=1 filters=512 size=3 stride=1 pad=1 activation=leaky [maxpool] size=2 stride=1 [convolutional] batch_normalize=1 filters=1024 size=3 stride=1 pad=1 activation=leaky ####### [convolutional] batch_normalize=1 size=3 stride=1 pad=1 filters=1024 activation=leaky [convolutional] batch_normalize=1 size=3 stride=1 pad=1 filters=512 activation=leaky [convolutional] batch_normalize=1 size=3 stride=1 pad=1 filters=512 activation=leaky [convolutional] size=1 stride=1 pad=1 filters=125 #region前最後一個卷積層的filters數是特定的,計算公式為filter=(classes + coords + 1)*5) #5的意義是5個座標,論文中的x,y,w,h,confidence activation=linear [region] anchors = 0.57273, 0.677385, 1.87446, 2.06253, 3.33843, 5.47434, 7.88282, 3.52778, 9.77052, 9.16828 #預選框,可以手工挑選, #也可以通過k means 從訓練樣本中學出 bias_match=1 classes=20 #網路需要識別的物體種類數 coords=4 #每個box的4個座標x,y,w,h num=5 #每個grid cell預測幾個box,和anchors的數量一致。當想要使用更多anchors時需要調大num,且如果調大num後訓練時Obj趨近0的話可以嘗試調大object_scale softmax=1 #使用softmax做啟用函式 jitter=.2 #通過抖動增加噪聲來抑制過擬合 rescore=1 #暫理解為一個開關,非0時通過重打分來調整l.delta(預測值與真實值的差) object_scale=5 #柵格中有物體時,bbox的confidence loss對總loss計算貢獻的權重 noobject_scale=1 #柵格中沒有物體時,bbox的confidence loss對總loss計算貢獻的權重 class_scale=1 #類別loss對總loss計算貢獻的權重 coord_scale=1 #bbox座標預測loss對總loss計算貢獻的權重 absolute=1 thresh = .6 random=0 #random為1時會啟用Multi-Scale Training,隨機使用不同尺寸的圖片進行訓練。
可能大家對於Batch還是不太理解,在這裡我再著重說一下:
Batch,中文含義為“批”,一個batch由若干條資料構成。batch是進行網路優化的基本單位,網路引數的每一輪優化需要使用一個batch。batch中的樣本是被並行處理的。
那就會有人有問題了,既然是並行處理,那我就多設定一點Batch,這樣會不會更好呢?
其實對於Batch來說是分兩方面的:
一方面,與單個樣本相比,一個Batch的資料能更好的模擬資料集的分佈,Batch越大,則對輸入資料分佈模擬的越好,反應在網路訓練上,則體現為能讓網路訓練的方向“更加正確”,從這個方面來說,Batch越大,訓練效果越好。
但另一方面,一個batch也只能讓網路的引數更新一次,因此網路引數的迭代會較慢。
所以我們得出以下結論:在測試網路的時候,在條件的允許的範圍內儘量使用更大的Batch,這樣計算效率會更高。
大家有什麼其他關於配置檔案的問題可以給我留言哦,我們一起溝通交流。