yolov3-voc.cfg 參數超詳細說明

[net]                   #   [xxx]開始的行表示網絡的一層,其後的內容爲該層的參數配置,[net]爲特殊的層,配置整個網絡
# Testing               #   測試模式,batch 和 subdivisions 通常都爲1
batch=1                 
subdivisions=1

# Training              #   訓練模式,batch 和 subdivisions 須要本身選取。
# batch=64 # batch 爲每一次迭代送到網絡的圖片數量,也叫批數量。
                        #   增大 batch 可讓網絡在較少的迭代次數內完成一個 epoch。
                        #   1個 epoch 就是使用訓練集中的所有樣本訓練一次。
                        #   在固定最大迭代次數的前提下,增長 batch 會延長訓練時間,但會更好的尋找到梯度降低的方向。
                        #   顯存容許的狀況下,能夠適當增大 batch 來提升內存利用率和訓練效果,一般 batch 越大越好。
                        #   這個值是須要你們不斷嘗試選取的,太小的話會讓訓練不夠收斂,過大會陷入局部最優。
                                     
# subdivisions=16 # 表示將一個 batch 的圖片分 subdivisions 份放進網絡裏,
                        #   一份一份的跑完後,再一塊兒打包算做完成一次 iteration。
                        #   1個 iteration 就是使用 batch 個樣本訓練一次。
                        #   注意 batch 要是 subdivisions 的整數倍
                        # subdivisions 越大,能夠減輕 CPU/GPU 的壓力。
                        #   (分組數目越多,每組樣本數量則會更少,顯卡壓力也會相應減小)
----------------------------------------------------------------------------------------------------------------
width=416               #   輸入圖像的寬
height=416              #   輸入圖像的高
                        #   如顯存容許,width 和 height 的值越大,對於小目標的識別效果越好。
                        # width 和 height 影響網絡對輸入圖像的分辨率,從而影響precision,只能夠設置成32的倍數,
                        #   因下采樣參數是32,故不一樣尺寸的圖像也選擇爲 32 的倍數(320352608),最小320,最大608# width 和 height 能夠不相等。

channels=3              #   輸入圖像的通道數,3爲RGB彩色圖片,1爲灰度圖,4爲RGBA圖,A通道表示透明度
----------------------------------------------------------------------------------------------------------------                        
momentum=0.9            #   DeepLearning1中最優化方法中的動量參數,這個值影響着梯度降低到最優值得速度
                        #   注:SGD方法的一個缺點是其更新方向徹底依賴於當前 batch 計算出的梯度,於是十分不穩定。
                        # momentum 算法借用了物理中的動量概念,它模擬的是物體運動時的慣性,
                        #   即更新的時候在必定程度上保留以前更新的方向,同時利用當前batch的梯度微調最終的更新方向。
                        #   這樣一來,能夠在必定程度上增長穩定性,從而學習地更快,而且還有必定擺脫局部最優的能力。

decay=0.0005            #   權重衰減正則項,防止過擬合。大的權值會使得系統出現overfitting,下降其泛化性能。
                        #   所以,爲了不出現 overfitting,會給偏差函數添加一個懲罰項,
                        #   經常使用的懲罰項是全部權重的平方乘以一個衰減常量之和。用來懲罰大的權值。
                        #   權值衰減懲罰項使得權值收斂到較小的絕對值,從而懲罰大的權值。
                        # decay參數越大對過擬合的抑制能力越強
----------------------------------------------------------------------------------------------------------------
angle=0                 #   數據加強參數,經過隨機旋轉[-angle,angle]度來生成更多訓練樣本 
saturation = 1.5        #   數據加強參數,經過調整飽和度來生成更多訓練樣本
exposure = 1.5          #   數據加強參數,經過調整曝光度來生成更多訓練樣本
hue=.1                  #   數據加強參數,經過調整色調來生成更多訓練樣本
                        #   每次迭代中,會基於角度、飽和度、曝光度、色調產生新的訓練樣本,能夠防止過擬合。
----------------------------------------------------------------------------------------------------------------
learning_rate=0.001     #   學習率,決定着權值更新的速度,設置得太大會使結果超過最優值,過小會使降低速度過慢。
                        #   學習率決定了參數移動到最優值的速度快慢,若是學習率過大,
                        #   極可能會越過最優值致使函數沒法收斂,甚至發散;反之,若是學習率太小,優化的效率可能太低,
                        #   算法長時間沒法收斂,也易使算法陷入局部最優(非凸函數不能保證達到全局最優)。

                        #   合適的學習率應該是在保證收斂的前提下,能儘快收斂。
                        #   設置較好的learning rate,須要不斷嘗試。在一開始的時候,能夠將其設大一點,
                        #   這樣可使weights快一點發生改變,在迭代必定的epochs以後人工減少學習率,
                        #   通常根據訓練輪數設置動態變化的學習率。在yolo訓練中,網絡訓練160epoches,
                        #   初始學習率爲0.001,在6090epochs時將學習率除以10。
                        #   接近訓練結束:學習速率的衰減應該在100倍以上。
                        
                        #   學習率調整不要太死,實際訓練過程當中根據loss的變化和其餘指標動態調整,手動ctrl+c結束這次訓練後,
                        #   修改學習率,再加載剛纔保存的模型繼續訓練便可完成手動調參,調整的依據是根據訓練日誌來,
                        #   若是loss波動太大,說明學習率過大,適當減少,變爲1/51/10都可,若是loss幾乎不變,
                        #   可能網絡已經收斂或者陷入了局部極小,此時能夠適當增大學習率,注意每次調整學習率後必定要訓練久一點,
                        #   充分觀察,調參是個細活,屢次實踐體會,慢慢琢磨。
                        #   實際學習率與GPU的個數有關,例如你的學習率設置爲0.001,若是你有4塊GPU,那真實學習率爲0.001/4。

burn_in=1000            #   在迭代次數小於burn_in時,其學習率的更新有一種方式,大於burn_in時,採用policy的更新方式
                        #***這裏以前的更新方式不知道什麼*****************************************

max_batches = 50200     #   訓練次數達到max_batches後中止學習,一次爲跑完一個batch
policy=steps            #   學習率調整的策略:constant, steps, exp, poly, step, sig, RANDOM,constant等方式
steps=40000,45000     
scales=.1,.1            # steps和scale是設置學習率的變化,好比迭代到40000次時,學習率衰減10倍,
                        #   45000次迭代時,學習率又會在前一個學習率的基礎上衰減10倍。
----------------------------------------------------------------------------------------------------------------
[convolutional]         #   一層卷積層的配置說明,直到下一個[XXX],都是該層的配置
batch_normalize=1       #   是否進行BN處理,關於BN,https://www.cnblogs.com/eilearn/p/9780696.html
filters=32              #   卷積核個數,也是輸出通道數,輸出特徵圖數量
size=3                  #   卷積核尺寸,這裏是3*3
stride=1                #   卷積步長
pad=1                   #   若是 pad 爲0,padding由 padding 參數指定。
                        #   若是 pad 爲1,padding大小爲size/2向下取整,如3/2=1。

activation=leaky        #   網絡層激活函數,常見激活函數以下:
                        # logistic,loggy,relu,elu,relie,plse,
                        # hardtan,lhtan,linear,ramp,leaky,tanh,stair
       
[convolutional]
batch_normalize=1
filters=64
size=3
stride=2
pad=1
activation=leaky

[convolutional]
batch_normalize=1
filters=32
size=1
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
filters=64
size=3
stride=1
pad=1
activation=leaky
----------------------------------------------------------------------------------------------------------------
[shortcut]              # shotcut 層配置說明
                        # shortcut 部分是卷積的跨層鏈接,就像 Resnet 中使用的同樣,
                        #	本層的輸入與輸出通常保持一致,而且不進行其餘操做,只是求差。
from=-3                 #   參數 from 是 −3,意思是 shortcut 層前面倒數第3層網絡的輸出做爲本層的輸入。

activation=linear       #   層次激活函數
                        #   關於 shortcut,https://cloud.tencent.com/developer/article/1148375
----------------------------------------------------------------------------------------------------------------
......                  #   這裏還有若干層,參數同樣,不贅述
......
......
----------------------------------------------------------------------------------------------------------------
[convolutional]         #   YOLO層前面一層卷積層配置說明
size=1
stride=1
pad=1
filters=75              #   這一層的filters須要根據公式設置
                        # filters = (classes + 5) * anchors_num
                        # classes 爲類別數,與下面yolo層的classes一致,
                        #   5 的意義是4個座標加一個置信率,論文中的tx,ty,tw,th,to
                        #   anchors_num 表示YOLO中每一個cell預測框的個數,YOLOV3中爲3
                        #   此處 filters = (20 + 5) * 3 = 75
                        
activation=linear
----------------------------------------------------------------------------------------------------------------
[yolo]                  #   [yolo/region]層配置說明,在yoloV2中yolo層叫region層
mask = 6,7,8            #   使用 anchor 的索引,從0開始,6,7,8表示使用下面定義的anchors中的最後三個 anchor
anchors = 10,13,  16,30,  33,23,  30,61,  62,45,  59,119,  116,90,  156,198,  373,326   #   預測框的初始寬高,
                                                                                        #   第一個是w,第二個是h
classes=20              #   類別數目
num=9                   #   每一個grid cell總共預測幾個box,和anchors的數量一致。當想要使用更多anchors時須要調大num
jitter=.3               #   利用抖動產生更多訓練樣本,YOLOv2中使用的是crop,filp,以及net層的angle

ignore_thresh = .5      #   ignore_thresh 指得是參與計算的IOU的閾值大小。
                        #   當IOU大於ignore_thresh,不會參與loss的計算,不然,檢測框將會參與損失計算。
                        #   關於 IOU,https://www.cnblogs.com/darkknightzh/p/9043395.html

                        #   參數目的和理解:目的是控制參與loss計算的檢測框的規模,當ignore_thresh過大,
                        #   接近於1的時候,那麼參與檢測框迴歸loss的個數就會比較少,同時也容易形成過擬合;
                        #   而若是ignore_thresh設置的太小,那麼參與計算的檢測框迴歸loss數量規模就會很大。
                        #   同時也容易在進行檢測框迴歸的時候形成欠擬合。

                        #   參數設置:通常選取0.5-0.7之間的一個值

truth_thresh = 1        
random=1                #   爲1打開隨機多尺度訓練,爲 0 則關閉

                        #   提示:當打開隨機多尺度訓練時,前面設置的網絡輸入尺寸width和height其實就不起做用了,
                        # width會在320到608之間隨機取值,且width=height,
                        #   每10輪隨機改變一次,能夠根據本身須要修改隨機尺度訓練的範圍,這樣能夠增大batch
----------------------------------------------------------------------------------------------------------------
[route]                 #   看到有人講這一層是融合層,就是把層進行合併,而後輸出到下一層
layers = -4             #   將本層前面倒數第4層的輸出做爲本層的輸出
			#   若是layers = -1, 61 則表示將本層的上一層與整個網絡的第61層的輸出相做爲本層輸出
			#   相加規則爲:如上一層的輸出爲52 x 52 x 128,第61層的輸出爲52 x 52 x 256
			#   則本層輸出爲52 x 52 x (128+256),因此route的兩層的 weight 和 height 必須相等
			#   若不相等,則本層輸出爲 0 x 0 x 0,下一層得不到有效輸入,
			#   就會報 Layer before convolutional must output image. 而後中止
**********************************************************


[upsample]              #   上採樣層
stride=2                #   卷積步長

# 參考:
# https://www.cnblogs.com/hls91/p/10911997.html
# https://blog.csdn.net/qq_35872456/article/details/84216129
# https://blog.csdn.net/phinoo/article/details/83022101
複製代碼
相關文章
相關標籤/搜索