1. 程式人生 > >【YOLO學習筆記】之YOLO配置檔案詳解

【YOLO學習筆記】之YOLO配置檔案詳解

在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,這樣計算效率會更高

大家有什麼其他關於配置檔案的問題可以給我留言哦,我們一起溝通交流。