對於模型的優化,我們可以通過適當修改網絡基本配置信息完成訓練上的優化。
yolov3.cfg文件:
[net]
# Testing #測試模式
batch=1
subdivisions=1
# Training #訓練模式 每次前向圖片的數目=batch/subdivisions
# batch=64
# subdivisions=16
#關於batch與subdivision:在訓練輸出中,訓練迭代包括8組,這些batch樣本又被平均分成subdivision=8次送入網絡參與訓練,以減輕內存占用的壓力;batch越大,訓練效果越好,subdivision越大,占用內存壓力越小
width=416
height=416
channels=3
#網絡輸入的寬、高、通道數這三個參數中,要求width==height, 並且為32的倍數,大分辨率可以檢測到更加細小的物體,從而影響precision
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,每次訓練大小與輸入大小一致
注:模型一般到20000次的時候就基本收斂了
如果想添加新的層,需要添加相應的源碼(src)

參考博客:https://blog.csdn.net/qq_43211132/article/details/91978149
