對於模型的優化,咱們能夠經過適當修改網絡基本配置信息完成訓練上的優化。算法
yolov3.cfg文件:網絡
[net]
# Testing #測試模式
batch=1
subdivisions=1
# Training #訓練模式 每次前向圖片的數目=batch/subdivisions
# batch=64
# subdivisions=16
#關於batch與subdivision:在訓練輸出中,訓練迭代包括8組,這些batch樣本又被平均分紅subdivision=8次送入網絡參與訓練,以減輕內存佔用的壓力;batch越大,訓練效果越好,subdivision越大,佔用內存壓力越小dom
width=416
height=416
channels=3
#網絡輸入的寬、高、通道數這三個參數中,要求width==height, 而且爲32的倍數,大分辨率能夠檢測到更加細小的物體,從而影響precisionide
momentum=0.9 #動量,影響梯度降低到最優的速度,通常默認0.9
decay=0.0005 #權重衰減正則係數,防止過擬合
angle=0 #旋轉角度,從而生成更多訓練樣本
saturation = 1.5 #調整飽和度,從而生成更多訓練樣本
exposure = 1.5 #調整曝光度,從而生成更多訓練樣本
hue=.1 #調整色調,從而生成更多訓練樣本函數
learning_rate=0.001
#學習率決定了權值更新的速度,學習率大,更新的就快,但太快容易越過最優值,而學習率過小又更新的慢,效率低,通常學習率隨着訓練的進行不斷更改,先高一點,而後慢慢下降,通常在0.01--0.001
burn_in=1000
#學習率控制的參數,在迭代次數小於burn_in時,其學習率的更新有一種方式,大於burn_in時,才採用policy的更新方式
max_batches = 50200
#迭代次數,1000次之內,每訓練100次保存一次權重,1000次以上,每訓練10000次保存一次權重
policy=steps # 學習率策略,學習率降低的方式
steps=40000,45000 #學習率變更步長
scales=.1,.1
#學習率變更因子:如迭代到40000次時,學習率衰減十倍,45000次迭代時,學習率又會在前一個學習率的基礎上衰減十倍學習
[convolutional]
batch_normalize=1 #BN
filters=32 #卷積核數目
size=3 #卷積核尺寸
stride=1 #作卷積運算的步長
pad=1
#若是pad爲0,padding由 padding參數指定;若是pad爲1,padding大小爲size/2,padding應該是對輸入圖像左邊緣拓展的像素數量
activation=leaky #激活函數類型測試
[yolo]
mask = 6,7,8 #使用anchor時使用前三個尺寸
anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326
#anchors是能夠事先經過cmd指令計算出來的,是和圖片數量,width,height以及cluster(就是下面的num的值,即想要使用的anchors的數量)相關的預選框,能夠手工挑選,也能夠經過k-means算法從訓練樣本中學出優化
classes=20
num=9
#每一個grid cell預測幾個box,和anchors的數量一致。當想要使用更多anchors時須要調大num,且若是調大num後訓練時Obj趨近0的話能夠嘗試調大object_scale
jitter=.3 #經過抖動來防止過擬合,jitter就是crop的參數
ignore_thresh = .5
#ignore_thresh 指得是參與計算的IOU閾值大小。當預測的檢測框與ground true的IOU大於ignore_thresh的時候,參與loss的計算,不然,檢測框的不參與損失計算,目的是控制參與loss計算的檢測框的規模,當ignore_thresh過於大,接近於1的時候,那麼參與檢測框迴歸loss的個數就會比較少,同時也容易形成過擬合;而若是ignore_thresh設置的過於小,那麼參與計算的會數量規模就會很大。同時也容易在進行檢測框迴歸的時候形成欠擬合。
#參數設置:通常選取0.5-0.7之間的一個值,以前的計算基礎都是小尺度(13*13)用的是0.7,(26*26)用的是0.5。此次先將0.5更改成0.7。
truth_thresh = 1
random=1 #若是顯存小,設置爲0,關閉多尺度訓練,random設置成1,能夠增長檢測精度precision,每次迭代圖片大小隨機從320到608,步長爲32,若是爲0,每次訓練大小與輸入大小一致spa
注:模型通常到20000次的時候就基本收斂了.net
若是想添加新的層,須要添加相應的源碼(src)
參考博客:https://blog.csdn.net/qq_43211132/article/details/91978149