yolo---參數解釋之訓練log中各參數


                                                                         yolo---參數解釋之訓練log中各參數

 

******訓練log中各參數的意義*************************************************************
yolov3-voc
Learning Rate: 0.001, Momentum: 0.9, Decay: 0.0005
Resizing
384
Loaded: 0.000077 seconds
Region 82 Avg IOU: 0.293486, Class: 0.443128, Obj: 0.680025, No Obj: 0.532993, .5R: 0.142857, .75R: 0.000000,  count: 7
Region 94 Avg IOU: 0.203765, Class: 0.575399, Obj: 0.361495, No Obj: 0.513690, .5R: 0.000000, .75R: 0.000000,  count: 4
Region 106 Avg IOU: 0.148327, Class: 0.769327, Obj: 0.539390, No Obj: 0.469288, .5R: 0.000000, .75R: 0.000000,  count: 1
...
...
...
Region 82 Avg IOU: 0.257638, Class: 0.441840, Obj: 0.617525, No Obj: 0.531992, .5R: 0.071429, .75R: 0.000000,  count: 14
Region 94 Avg IOU: 0.070440, Class: 0.604375, Obj: 0.246185, No Obj: 0.513274, .5R: 0.000000, .75R: 0.000000,  count: 6
Region 106 Avg IOU: 0.072315, Class: 0.733155, Obj: 0.818539, No Obj: 0.469309, .5R: 0.000000, .75R: 0.000000,  count: 1
156: 840.799866, 840.799866 avg, 0.000000 rate, 1.843955 seconds, 64 images
*******************************************************************
訓練結果顯示參數說明:
(1)Learning Rate: 0.001, 學習率 .
    學習率: 決定了參數移動到最優值的速度快慢. 
    如果學習率過大,很可能會越過最優值導致函數無法收斂,甚至發散;反之,如果學習率過小,優化的效率可能過低,算法長時間無法收斂,也易使算法陷入局部最優(非凸函數不能保證達到全局最優)。合適的學習率應該是在保證收斂的前提下,能盡快收斂。
    設置較好的learning rate,需要不斷嘗試。在一開始的時候,可以將其設大一點,這樣可以使weights快一點發生改變,在迭代一定的epochs之后人工減小學習率。
    在yolo訓練中,網絡訓練160epoches,初始學習率為0.001,在60和90epochs時將學習率除以10。
(2)Momentum: 0.9, 滑動平均模型 .
    在訓練的過程中不斷地對參數求滑動平均,這樣能夠更有效地保持穩定性,使其對當前參數更新不敏感。例如加動量項的隨機梯度下降法就是在學習率上應用滑動平均模型。,一般會選擇0.9~0.95.

(3)Decay: 0.0005, 權重衰減 .
    使用的目的是防止過擬合,當網絡逐漸過擬合時網絡權值往往會變大,因此,為了避免過擬合,在每次迭代過程中以某個小因子降低每個權值,也等效於給誤差函數添加一個懲罰項,常用的懲罰項是所有權重的平方乘以一個衰減常量之和。權值衰減懲罰項使得權值收斂到較小的絕對值。

(4)Region 82, Region 94, Region 106表示三個不同尺度(8294106)上預測到的不同大小的參數。
    82 卷積層為最大的預測尺度, 使用較大的 mask, 但是可以預測出較小的物體;
    94 卷積層為中間的預測尺度, 使用中等的 mask;
    106卷積層為最小的預測尺度, 使用較小的 mask, 可以預測出較大的物體.
    @https://blog.csdn.net/xiao_lxl/article/details/85127959

(5)上述列舉中,表示所有訓練圖片中的一個批次(batch)
    批次大小的划分根據在cfg/yolov3.cfg中設定的, 批次大小的划分根據我們在 .cfg 文件中設置的subdivisions參數。
    在當前使用的 .cfg 文件中 batch = 64 ,subdivision = 8,所以在訓練輸出中,訓練迭代包含了8組(8組Region 82, Region 94, Region 106),每組又包含了8張圖片,跟設定的batch和subdivision的值一致。
    注: 也就是說每輪迭代會從所有訓練集里隨機抽取 batch = 64 個樣本參與訓練,所有這些 batch 個樣本又被均分為 subdivision = 8 次送入網絡參與訓練,以減輕內存占用的壓力)

(6)觀察某一個尺度上的參數, 下面以第一行 Region 82 分析:
【Region 82 Avg IOU: 0.293486, Class: 0.443128, Obj: 0.680025, No Obj: 0.532993, .5R: 0.142857, .75R: 0.000000,  count: 7】
•   Region Avg IOU:0.293486: 表示在當前 subdivision 內的圖片的平均 IOU, 代表預測的矩形框和真實目標的交集與並集之比, 這里是 29.36%,由於剛開始訓練,所以此模型的精度遠遠不夠。
•   Class: 0.443128:   標注物體分類的正確率, 期望該值趨近於1;
•   Obj: 0.680025:    越接近 1 越好;
•   No Obj:0.532993:  期望該值越來越小, 但不為零;
•   .5R: 0.142857:    以IOU=0.5為閾值時候的recall; recall = 檢出的正樣本/實際的正樣本.
                       是在 recall/count 中定義的, 是當前模型在所有 subdivision 圖片中檢測出的正樣本與實際的正樣本的比值。全部的正樣本被正確的檢測到應該是1。
•   .75R: 0.000000 :   以IOU=0.75為閾值時候的recall;
•   count: 7:         所有當前 subdivision 圖片(本例中一共 8 張)中包含正樣本的圖片的數量。 
                       在輸出 log 中的其他行中, 可以看到其他subdivision 也有的只含有 61 個正樣本, 說明在 subdivision 中含有不包含在檢測對象 classes 中的圖片

(7)批輸出【 9798:  0.370096,  0.451929 avg,  0.001000 rate,  3.300000 seconds,  627072 images 】
•   9798: 指示當前訓練的迭代次數
•   0.370096: 是總體的Loss(損失)
•   0.451929 avg: 是平均Loss,這個數值應該越低越好,一般來說,一旦這個數值低於0.060730 avg就可以終止訓練了。
•   0.001000 rate: 代表當前的學習率,是在.cfg文件中定義的。
•   3.300000 seconds: 表示當前批次訓練花費的總時間。
•   627072 images: 這一行最后的這個數值是9798*64的大小,表示到目前為止,參與訓練的圖片的總量。


(8)分塊輸出【 Region Avg IOU: 0.326577,Class: 0.742537,Obj: 0.033966,No Obj: 0.000793,Avg Recall: 0.12500,count: 8 】
•   Region Avg IOU: 0.326577: 表示在當前subdivision內的圖片的平均IOU,代表預測的矩形框和真實目標的交集與並集之比,這里是32.66%,這個模型需要進一步的訓練。
•   Class: 0.742537: 標注物體分類的正確率,期望該值趨近於1。
•   Obj: 0.033966: 越接近1越好。
•   No Obj: 0.000793: 期望該值越來越小,但不為零。
•   Avg Recall: 0.12500: 是在recall/count中定義的,是當前模型在所有subdivision圖片中檢測出的正樣本與實際的正樣本的比值。在本例中,只有八分之一的正樣本被正確的檢測到。(和最開始初定的閾值有關系)
•   count: 8:count后的值是所有的當前subdivision圖片(本例中一共8張)中包含正樣本的圖片的數量。在輸出log中的其他行中,可以看到其他subdivision也有的只含有6或7個正樣本,說明在subdivision中含有不含檢測對象的圖片。
@https://blog.csdn.net/xiao_lxl/article/details/85127959
********************************************************************************************
...
...
...
Loading weights from ./wp_data/case3-cls84-weights/yolov3_weight.conv.66...
 seen 64 
Done!
Learning Rate: 0.001, Momentum: 0.9, Decay: 0.0005
 If error occurs - run training with flag: -dont_show 
Resizing
608 x 608 
 try to allocate additional workspace_size = 215.15 MB 
 CUDA allocate done! 
Loaded: 0.000069 seconds

v3 (mse loss, Normalizer: (iou: 0.750000, cls: 1.000000) Region 82 Avg (IOU: 0.130423, GIOU: 0.130423), Class: 0.777553, Obj: 0.372095, No Obj: 0.434500, .5R: 0.000000, .75R: 0.000000, count: 1
...
...
v3 (mse loss, Normalizer: (iou: 0.750000, cls: 1.000000) Region 82 Avg (IOU: -nan, GIOU: -nan), Class: -nan, Obj: -nan, No Obj: 0.434966, .5R: -nan, .75R: -nan, count: 0
v3 (mse loss, Normalizer: (iou: 0.750000, cls: 1.000000) Region 94 Avg (IOU: 0.347062, GIOU: 0.260316), Class: 0.537231, Obj: 0.459746, No Obj: 0.507364, .5R: 0.142857, .75R: 0.000000, count: 14
...
...
v3 (mse loss, Normalizer: (iou: 0.750000, cls: 1.000000) Region 82 Avg (IOU: -nan, GIOU: -nan), Class: -nan, Obj: -nan, No Obj: 0.434781, .5R: -nan, .75R: -nan, count: 0
v3 (mse loss, Normalizer: (iou: 0.750000, cls: 1.000000) Region 94 Avg (IOU: 0.255715, GIOU: 0.049848), Class: 0.641193, Obj: 0.390348, No Obj: 0.507421, .5R: 0.000000, .75R: 0.000000, count: 7
...
...

v3 (mse loss, Normalizer: (iou: 0.750000, cls: 1.000000) Region 82 Avg (IOU: -nan, GIOU: -nan), Class: -nan, Obj: -nan, No Obj: 0.434521, .5R: -nan, .75R: -nan, count: 0
v3 (mse loss, Normalizer: (iou: 0.750000, cls: 1.000000) Region 94 Avg (IOU: 0.272013, GIOU: 0.236511), Class: 0.617063, Obj: 0.395308, No Obj: 0.507380, .5R: 0.000000, .75R: 0.000000, count: 4
...
...
v3 (mse loss, Normalizer: (iou: 0.750000, cls: 1.000000) Region 82 Avg (IOU: -nan, GIOU: -nan), Class: -nan, Obj: -nan, No Obj: 0.434870, .5R: -nan, .75R: -nan, count: 0
v3 (mse loss, Normalizer: (iou: 0.750000, cls: 1.000000) Region 94 Avg (IOU: 0.315608, GIOU: 0.164685), Class: 0.552984, Obj: 0.492209, No Obj: 0.507285, .5R: 0.142857, .75R: 0.000000, count: 14
v3 (mse loss, Normalizer: (iou: 0.750000, cls: 1.000000) Region 106 Avg (IOU: 0.249113, GIOU: 0.112020), Class: 0.505489, Obj: 0.479450, No Obj: 0.473681, .5R: 0.028571, .75R: 0.028571, count: 35
...
...
v3 (mse loss, Normalizer: (iou: 0.750000, cls: 1.000000) Region 106 Avg (IOU: 0.243135, GIOU: 0.081533), Class: 0.508788, Obj: 0.439726, No Obj: 0.473779, .5R: 0.076923, .75R: 0.000000, count: 52

 1: 1974.407104, 1974.407104 avg loss, 0.000000 rate, 3.823940 seconds, 64 images
Loaded: 0.000018 seconds


***說明:v3(mse loss, Normalizer :( iou :0.750000) cls:1.000000)這句話,心里就很忐忑,后來知道了可能是新版本ab優化后的,加了些超參

 

********************************************************************************************
參考@https://www.cnblogs.com/hls91/p/10911997.html已實踐了幾次,正確性進一步尚待驗證。簡單說明:1)如果看到avg loss =nan?     說明訓練錯誤; 某一行的Class=-nan說明目標太大或者太小,某個尺度檢測不到,屬於正常 
@https://zhuanlan.zhihu.com/p/25110930 @https://blog.csdn.net/maweifei/article/details/81148414
2)什么時候應該停止訓練?     當loss不在下降或者下降極慢的情況可以停止訓練,一般loss=0.7左右就可以了
(3)在訓練集上測試正確率很高,在其他測試集上測試效果很差?  說明過擬合了。解決,提前停止訓練,或者增大樣本數量訓練
(4)如何提高目標檢測正確率包括IOU,分類正確率?     設置yolo層 random =1,增加不同的分辨率。或者增大圖片本身分辨率。或者根據你自定義的數據集去重新計算anchor尺寸(darknet.exe detector calc_anchors data/obj.data -num_of_clusters 9 -width 416 -height 416 then set the same 9 anchors in each of 3 [yolo]-layers in your cfg-file)
(5)如何增加訓練樣本?     樣本特點盡量多樣化,亮度,旋轉,背景,目標位置,尺寸. 添加沒有標注框的圖片和其空的txt文件,作為negative數據
(6)訓練的圖片較小,但是實際檢測圖片大,怎么檢測小目標?     
    1.使在用416*416訓練完之后,也可以在cfg文件中設置較大的width和height,增加網絡對圖像的分辨率,從而更可能檢測出圖像中的小目標,而不需要重新訓練
    2.set `[route] layers = -1, 11`
      set ` [upsample] stride=4`
(7)網絡模型耗費資源多大?(我用過就兩個)
    [yolov3.cfg]  [236MB COCO-91類]  [4GB GPU-RAM]
    [yolov3.cfg]  [194MB VOC-20類]  [4GB GPU-RAM]
    [yolov3-tiny.cfg]  [34MB COCO-91類]  [1GB GPU-RAM]
    [yolov3-tiny.cfg]  [26MB VOC-20類]  [1GB GPU-RAM]
(8)多GPU怎么訓練?
     首先用一個gpu訓練1000次迭代后的網絡,再用多gpu訓練
darknet.exe detector train data/voc.data cfg/yolov3-voc.cfg /backup/yolov3-voc_1000.weights -gpus 0,1,2,39)有哪些命令行來對神經網絡進行訓練和測試?     
    1.檢測圖片: build\darknet\x64\darknet.exe detector test data/coco.data cfg/yolov3.cfg yolov3.weights  -thresh 0.25 xxx.jpg
    2.檢測視頻:將test 改為 demo ; xxx.jpg 改為xxx.mp4
    3.調用網絡攝像頭:將xxx.mp4 改為 http://192.168.0.80:8080/video?dummy=x.mjpg -i 0
    4.批量檢測:-dont_show -ext_output < data/train.txt >  result.txt
    5.手持端網絡攝像頭:下載mjpeg-stream 軟件, xxx.jpg 改為 IP Webcam / Smart WebCam
(10)如何評價模型好壞?
    build\darknet\x64\darknet.exe detector map data\defect.data cfg\yolov3.cfg backup\yolov3.weights
    利用上面命令計算各權重文件,選擇具有最高IoU(聯合的交集)和mAP(平均精度)的權重文件
(11)如果測試時出現權重不能識別目標的情況?
      很可能是因為yolov3.cfg文件開頭的Traing下面兩行沒有注釋掉,並且把Testing下面兩行去掉注釋就可以正常使用.
(12)模型什么時候保存?如何更改?
    迭代次數小於1000時,每100次保存一次,大於1000時,沒10000次保存一次。
    自己可以根據需求進行更改,然后重新編譯即可[ 先 make clean ,然后再 make]。
    代碼位置: examples/detector.c line 13813)yolo v3 論文閱讀
    優點:速度快,精度提升,小目標檢測有改善;
    不足:中大目標有一定程度的削弱,遮擋漏檢,速度稍慢於V2。

參考@https://www.cnblogs.com/hls91/p/10911997.html ,https://blog.csdn.net/lilai619/article/details/7969510


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM