cfg說明:
[net] ★ [xxx]開始的行表示網(wǎng)絡(luò)的一層,其后的內(nèi)容為該層的參數(shù)配置,[net]為特殊的層,配置整個網(wǎng)絡(luò)
# Testing ★ #號開頭的行為注釋行,在解析cfg的文件時會忽略該行
# batch=1
# subdivisions=1
# Training
batch=64 ★ 這兒batch與機器學(xué)習(xí)中的batch有少許差別,僅表示網(wǎng)絡(luò)積累多少個樣本后進行一次BP
subdivisions=16 ★ 這個參數(shù)表示將一個batch的圖片分sub次完成網(wǎng)絡(luò)的前向傳播
★★ 敲黑板:在Darknet中,batch和sub是結(jié)合使用的,例如這兒的batch=64,sub=16表示訓(xùn)練的過
程中將一次性加載64張圖片進內(nèi)存,然后分16次完成前向傳播,意思是每次4張,前向傳播的循環(huán)過程中
累加loss求平均,待64張圖片都完成前向傳播后,再一次性后傳更新參數(shù)
★★★ 調(diào)參經(jīng)驗:sub一般設(shè)置16,不能太大或太小,且為8的倍數(shù),其實也沒啥硬性規(guī)定,看著舒服就好
batch的值可以根據(jù)顯存占用情況動態(tài)調(diào)整,一次性加減sub大小即可,通常情況下batch越大越好,還需
注意一點,在測試的時候batch和sub都設(shè)置為1,避免發(fā)生神秘錯誤!
width=608 ★ 網(wǎng)絡(luò)輸入的寬width
height=608 ★ 網(wǎng)絡(luò)輸入的高height
channels=3 ★ 網(wǎng)絡(luò)輸入的通道數(shù)channels
★★★ width和height一定要為32的倍數(shù),否則不能加載網(wǎng)絡(luò)
★ 提示:width也可以設(shè)置為不等于height,通常情況下,width和height的值越大,對于小目標的識別
效果越好,但受到了顯存的限制,讀者可以自行嘗試不同組合
momentum=0.9 ★ 動量 DeepLearning1中最優(yōu)化方法中的動量參數(shù),這個值影響著梯度下降到最優(yōu)值得速度
decay=0.0005 ★ 權(quán)重衰減正則項,防止過擬合
angle=0 ★ 數(shù)據(jù)增強參數(shù),通過旋轉(zhuǎn)角度來生成更多訓(xùn)練樣本
saturation = 1.5 ★ 數(shù)據(jù)增強參數(shù),通過調(diào)整飽和度來生成更多訓(xùn)練樣本
exposure = 1.5 ★ 數(shù)據(jù)增強參數(shù),通過調(diào)整曝光量來生成更多訓(xùn)練樣本
hue=.1 ★ 數(shù)據(jù)增強參數(shù),通過調(diào)整色調(diào)來生成更多訓(xùn)練樣本
learning_rate=0.001 ★ 學(xué)習(xí)率決定著權(quán)值更新的速度,設(shè)置得太大會使結(jié)果超過最優(yōu)值,太小會使下降速度過慢。
如果僅靠人為干預(yù)調(diào)整參數(shù),需要不斷修改學(xué)習(xí)率。剛開始訓(xùn)練時可以將學(xué)習(xí)率設(shè)置的高一點,
而一定輪數(shù)之后,將其減小在訓(xùn)練過程中,一般根據(jù)訓(xùn)練輪數(shù)設(shè)置動態(tài)變化的學(xué)習(xí)率。
剛開始訓(xùn)練時:學(xué)習(xí)率以 0.01 ~ 0.001 為宜。一定輪數(shù)過后:逐漸減緩。
接近訓(xùn)練結(jié)束:學(xué)習(xí)速率的衰減應(yīng)該在100倍以上。
學(xué)習(xí)率的調(diào)整參考https://blog.csdn.net/qq_33485434/article/details/80452941
★★★ 學(xué)習(xí)率調(diào)整一定不要太死,實際訓(xùn)練過程中根據(jù)loss的變化和其他指標動態(tài)調(diào)整,手動ctrl+c結(jié)
束此次訓(xùn)練后,修改學(xué)習(xí)率,再加載剛才保存的模型繼續(xù)訓(xùn)練即可完成手動調(diào)參,調(diào)整的依據(jù)是根據(jù)訓(xùn)練
日志來,如果loss波動太大,說明學(xué)習(xí)率過大,適當減小,變?yōu)?/5,1/10均可,如果loss幾乎不變,
可能網(wǎng)絡(luò)已經(jīng)收斂或者陷入了局部極小,此時可以適當增大學(xué)習(xí)率,注意每次調(diào)整學(xué)習(xí)率后一定要訓(xùn)練久
一點,充分觀察,調(diào)參是個細活,慢慢琢磨
★★ 一點小說明:實際學(xué)習(xí)率與GPU的個數(shù)有關(guān),例如你的學(xué)習(xí)率設(shè)置為0.001,如果你有4塊GPU,那
真實學(xué)習(xí)率為0.001/4
burn_in=1000 ★ 在迭代次數(shù)小于burn_in時,其學(xué)習(xí)率的更新有一種方式,大于burn_in時,才采用policy的更新方式
max_batches = 500200 ★ 訓(xùn)練次數(shù)達到max_batches后停止學(xué)習(xí),一次為跑完一個batch
policy=steps ★ 學(xué)習(xí)率調(diào)整的策略:constant, steps, exp, poly, step, sig, RANDOM,constant等方式
參考https://nanfei.ink/2018/01/23/YOLOv2%E8%B0%83%E5%8F%82%E6%80%BB%E7%BB%93/#more
steps=400000,450000
scales=.1,.1 ★ steps和scale是設(shè)置學(xué)習(xí)率的變化,比如迭代到400000次時,學(xué)習(xí)率衰減十倍,45000次迭代時,學(xué)
習(xí)率又會在前一個學(xué)習(xí)率的基礎(chǔ)上衰減十倍
[convolutional] ★ 一層卷積層的配置說明
batch_normalize=1 ★ 是否進行BN處理,什么是BN此處不贅述,1為是,0為不是
filters=32 ★ 卷積核個數(shù),也是輸出通道數(shù)
size=3 ★ 卷積核尺寸
stride=1 ★ 卷積步長
pad=1 ★ 卷積時是否進行0 padding,padding的個數(shù)與卷積核尺寸有關(guān),為size/2向下取整,如3/2=1
activation=leaky ★ 網(wǎng)絡(luò)層激活函數(shù)
★★ 卷積核尺寸3*3配合padding且步長為1時,不改變feature map的大小
# Downsample
[convolutional] ★ 下采樣層的配置說明
batch_normalize=1
filters=64
size=3
stride=2
pad=1
activation=leaky ★★ 卷積核尺寸為3*3,配合padding且步長為2時,feature map變?yōu)樵瓉淼囊话氪笮?
[shortcut] ★ shotcut層配置說明
from=-3 ★ 與前面的多少次進行融合,-3表示前面第三層
activation=linear ★ 層次激活函數(shù)
......
......
[convolutional] ★ YOLO層前面一層卷積層配置說明
size=1
stride=1
pad=1
filters=255 ★ filters=num(預(yù)測框個數(shù))*(classes+5),5的意義是4個坐標加一個置信率,論文中的tx,ty,tw,th,
c,classes為類別數(shù),COCO為80,num表示YOLO中每個cell預(yù)測的框的個數(shù),YOLOV3中為3
★★★ 自己使用時,此處的值一定要根據(jù)自己的數(shù)據(jù)集進行更改,例如你識別4個類,則:
filters=3*(4+5)=27,三個fileters都需要修改,切記
activation=linear
[yolo] ★ YOLO層配置說明
mask = 0,1,2 ★ 使用anchor的索引,0,1,2表示使用下面定義的anchors中的前三個anchor
anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326
classes=80 ★ 類別數(shù)目
num=9 ★ 每個grid cell總共預(yù)測幾個box,和anchors的數(shù)量一致。當想要使用更多anchors時需要調(diào)大num
jitter=.3 ★ 數(shù)據(jù)增強手段,此處jitter為隨機調(diào)整寬高比的范圍,該參數(shù)不好理解,在我的源代碼注釋中有詳細說明
ignore_thresh = .7
truth_thresh = 1 ★ 參與計算的IOU閾值大小.當預(yù)測的檢測框與ground true的IOU大于ignore_thresh的時候,參與
loss的計算,否則,檢測框的不參與損失計算。
★ 理解:目的是控制參與loss計算的檢測框的規(guī)模,當ignore_thresh過于大,接近于1的時候,那么參與
檢測框回歸loss的個數(shù)就會比較少,同時也容易造成過擬合;而如果ignore_thresh設(shè)置的過于小,那么
參與計算的會數(shù)量規(guī)模就會很大。同時也容易在進行檢測框回歸的時候造成欠擬合。
★ 參數(shù)設(shè)置:一般選取0.5-0.7之間的一個值,之前的計算基礎(chǔ)都是小尺度(13*13)用的是0.7,
(26*26)用的是0.5。這次先將0.5更改為0.7。參考:https://www.e-learn.cn/content/qita/804953
random=1 ★ 為1打開隨機多尺度訓(xùn)練,為0則關(guān)閉
★★ 提示:當打開隨機多尺度訓(xùn)練時,前面設(shè)置的網(wǎng)絡(luò)輸入尺寸width和height其實就不起作用了,width
會在320到608之間隨機取值,且width=height,沒10輪隨機改變一次,一般建議可以根據(jù)自己需要修改
隨機尺度訓(xùn)練的范圍,這樣可以增大batch,望讀者自行嘗試!
調(diào)參經(jīng)驗:
Yolo 總結(jié)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。