【YOLO】YOLO網絡中參數的解讀

1.Batch_Size(批尺寸) 
該參數主要用於批梯度降低算法(Batch Gradient Descent)中,批梯度降低算法是每次迭代都遍歷批中的全部樣本,由批中的樣本共同決定最優的方向,Batch_Size 正是批中的樣本數量。 算法

若數據集比較小,能夠採用全數據集(Full Batch Learning)的形式,由全數據肯定的方向能更好地表明樣本整體,從而更準確地朝向極值所在的方向;但該種方式並不適用於大數據集; 
另外一個極端是每次只訓練一個樣本,即Batch_Size=1,每次修正方向以各自樣本的梯度方向修正,橫衝直撞各自爲政,難以達到收斂。 
在合理範圍內增大Batch_Size,能夠 
(1)提升內存利用率,進而提升大矩陣乘法的並行效率; 
(2)跑完一次epoch(全數據集)所需的迭代次數減小,對於相同數據量的處理速度進一步加快; 
(3)在必定範圍內,通常來講Batch_Size越大,其肯定的降低方向越準,引發的訓練震盪越小。 
盲目增大Batch_Size的壞處: 
(1)超出內存容量; 
(2)跑完一次epoch(全數據集)所需的迭代次數減少,要想達到相同的精度,所須要的epoch數量越多,對參數的修正更加緩慢; 
(3)Batch_Size 增大到必定程度,其肯定的降低方向已經基本再也不變化; 
Batch_Size參數調試: 
大的Batch_Size在顯存能容許的狀況下收斂速度是比較快的但有時會陷入局部最小的狀況;小Batch_Size引入的隨機性會更大些,有可能會有更好的效果,可是收斂速度會慢一些;當Batch_Size過小,而類別數又比較多的時候,會致使loss函數震盪而不收斂。具體調試過程當中,通常可根據GPU顯存,設置爲最大,並且通常要求是8的倍數,選擇一部分數據,跑幾個Batch看看loss是否在變小,再選擇合適的Batch_Size。 
每Batch_Size個樣本更新一次參數。網絡

2.subdivisions 
若是內存不夠大,將batch分割爲subdivisions個子batch,每一個子batch的大小爲batch/subdivisions; 
darknet代碼中,是將batch/subdivisions命名爲batch;dom

3.衝量-momentum 
梯度降低法中一種經常使用的加速技術,對於通常的SGD,其表達式爲函數

沿着負梯度方向降低,而帶momentum項的SGD則寫成oop

其中是momentum係數,通俗的理解上面的式子就是,若是上一次的momentum(即)與這一次的負梯度方向是相同的,那麼此次降低的幅度就會加大,所以能夠起到加速收斂的做用,衝量的建議配置爲0.9。學習

4.權值衰減-weight decay 
使用的目的是防止過擬合,當網絡逐漸過擬合時網絡權值每每會變大,所以,爲了不過擬合,在每次迭代過程當中以某個小因子下降每一個權值,也等效於給偏差函數添加一個懲罰項,經常使用的懲罰項是全部權重的平方乘以一個衰減常量之和。權值衰減懲罰項使得權值收斂到較小的絕對值。大數據

5.angle、saturation、exposure、hue 
angle:圖片角度變化,單位爲度,假如angle=5,就是生成新圖片的時候隨機旋轉-5~5度  
saturation & exposure: 飽和度與曝光變化大小,tiny-yolo-voc.cfg中1到1.5倍,以及1/1.5~1倍  
hue:色調變化範圍,tiny-yolo-voc.cfg中-0.1~0.1  
在每次迭代中,會基於角度、飽和度、曝光、色調產生新的訓練圖片。優化

6.學習率-learning rate 
學習率決定了參數移動到最優值的速度快慢,若是學習率過大,極可能會越過最優值致使函數沒法收斂,甚至發散;反之,若是學習率太小,優化的效率可能太低,算法長時間沒法收斂,也易使算法陷入局部最優(非凸函數不能保證達到全局最優)。合適的學習率應該是在保證收斂的前提下,能儘快收斂。 
設置較好的learning rate,須要不斷嘗試。在一開始的時候,能夠將其設大一點,這樣可使weights快一點發生改變,在迭代必定的epochs以後人工減少學習率。 
在yolo訓練中,網絡訓練160epoches,初始學習率爲0.001,在60和90epochs時將學習率除以10。spa

7.burn_in 
與學習率的動態變化有關??? 
if (batch_num < net.burn_in) return net.learning_rate * pow((float)batch_num / net.burn_in, net.power); 
Yolo network.c中出現的代碼.net

8.最大迭代次數-max_batches 
權重更新次數

9.調整學習率的策略-policy 
調整學習率的policy,有以下policy:CONSTANT, STEP, EXP, POLY,STEPS, SIG, RANDOM

10.學習率變化時的迭代次數-steps 
根據batch_num調整學習率,若steps=100,25000,35000,則在迭代100次,25000次,35000次時學習率發生變化,該參數與policy中的steps對應;

11.學習率變化的比率-scales 
相對於當前學習率的變化比率,累計相乘,與steps中的參數個數保持一致;

12.是否作BN-batch_normalize

13.激活函數-activation 
包括logistic,loggy,relu,elu,relie,plse,hardtan,lhtan,linear,ramp,leaky,tanh,stair

14.[route] layer 
the route layer is to bring finer grained features in from earlier in the network 
15.[reorg] layer 
the reorg layer is to make these features match the feature map size at the later layer;The end feature map is 13x13, the feature map from earlier is 26x26x512. The reorg layer maps the 26x26x512 feature map onto a 13x13x2048 feature map so that it can be concate_nated with the feature maps at 13x13 resolution.

16.anchors 
anchors:預測框的初始寬高,第一個是w,第二個是h,總數量是num*2,YOLOv2做者說anchors是使用K-MEANS得到,其實就是計算出哪一種類型的框比較多,能夠增長收斂速度,若是不設置anchors,默認是0.5;

17.jitter 
經過抖動增長噪聲來抑制過擬合

18.rescore 
可理解爲一個開關,非0時經過重打分來調整l.delta(預測值與真實值的差)

19.random(yolo模型訓練) 
random爲1時會啓用Multi-Scale Training,隨機使用不一樣尺寸的圖片進行訓練,若是爲0,每次訓練大小與輸入大小一致; 
是否隨機肯定最後的預測框

幾個尺寸說明

(1)batch_size:批大小。在深度學習中,通常採用SGD訓練,即每次訓練在訓練集中取batch_size個樣本訓練; 
(2)iteration:1個iteration等於使用batchsize個樣本訓練一次; 
(3)epoch:1個epoch等於使用訓練集中的所有樣本訓練一次;

訓練log中各參數的意義  Region Avg IOU:平均的IOU,表明預測的bounding box和ground truth的交集與並集之比,指望該值趨近於1。  Class:是標註物體的機率,指望該值趨近於1.  Obj:指望該值趨近於1.  No Obj:指望該值愈來愈小但不爲零.  Avg Recall:指望該值趨近1  avg:平均損失,指望該值趨近於0

相關文章
相關標籤/搜索