Yolov3模型沒有框的解決方案之——提高訓練模型的置信度

在這裏插入圖片描述

前言

在之前的文章中我說過,如果你的Yolov3模型沒有錨框出現,最直接的解決發方案是降低閾值(產生框的門檻),但是這個方法治標不治本。(Yolov3訓練模型沒有框(理論上一定有用的解決方案)

今天,我帶大家來看一看,我們應該如何根治這個問題——提高模型的置信度。當我們訓練模型訓練精度大幅提升,執行度明顯提高時,即使設置的閾值很高,也一定可以生成錨框。

在這裏插入圖片描述

樣本容量

說到提高訓練的準確率,很多人的第一反應就是增加樣本的數量。但是今天我想告訴大家的是,這其實是大家的一個誤區,模型對事物的檢測能力和準確性在一定程度上,其實是兩個概念。

我們給計算機提供大量數據的時候,目的是讓計算機見識到更多的情況,就像是大家讀書的時候在刷題,你要題海戰術,這樣才能見到更多的題型,以後考試的時候見到各種各樣的題型就不慌了,你知道該怎麼去應付這種場景。

但是,大量地刷題只能表示你見過這種題型,這並不代表你對這種題型已經完全掌握了。現在我們遇到的就是這種情況,計算機做過這個題型,但是它並沒有掌握,所以在考試的時候,它給出的答案得分非常低,以至於低於你給定的顯示標準,所以錨框不會顯示。

在這樣的情況下,你餵給它再多的數據,錨框都不會出現的。

在這裏插入圖片描述

給定恰當的數據

你假如考試的時候想得高分,那麼你在平時刷題的時候就要選擇恰當的題目進行練習。

我舉個例子,假如你今天想要做人車識別,你就要先假設好場景,你究竟是要做城市裏面密密麻麻的人車,還是車展上目標很明顯的人車。

都市人車:

在這裏插入圖片描述

車展人車:

在這裏插入圖片描述
從圖像中,大家應該可以非常明顯地感受到,雖然都是人和車,但是這兩種情景下人車的外在特徵區別是很大的,你在給樣本的時候,如果把這兩種混在一起交給計算機訓練,不是說不可以,但確實是給計算機的學習帶來了很大的麻煩。特別是在你的樣本容量比較小的情況下,識別的效果肯定不會好。

再比方說,你給的汽車的樣式中,是完整的汽車和半個汽車,這對於人來說,人知道這都叫汽車,但計算機眼中,半個車和一個車長得區別很大哎。

比如大家對比一下上一張圖和下一張圖片:

在這裏插入圖片描述

調節 Batch_size

如果你給的樣本是ok的,但是訓練結果的置信度還是很低,那麼你需要去調整的就是batch_size的大小。

大家要明白batch_size到底的是幹什麼的,這個很重要!

我知道在很多人眼中,batch_size就是一次性取多少張圖片,但是你這樣的理解方式實在是太入門級別了。

我們調整參數,設置合適的訓練集的目的是爲了讓梯度朝着更加合理的方向下降,這纔是根本!

在這裏插入圖片描述
假如我們今天把batch_size調得很大,好處是,計算機可以一口氣了解這一組圖片的特徵,朝着一個大的方向進行梯度下降,這種做法可以使得迭代每一個世代的時間簡短,且loss值不容易被困在局部最小值出不來。

但是缺點也很明顯,第一是你的顯存夠不夠大,第二是由於太注重整體效果,對每一張圖片的訓練不夠仔細。這就像是你用很短的時間,一口氣做了很多張卷子,你心裏很清楚大概題型是怎麼樣的,但是你對於每一種題型的處理並沒有很好的理解。

在這樣的情況下,就很容易出現模型給出的置信度很低,以至於出不了錨框的現象。

在這樣的情況下,你應該減小batch_size的值,目的是每次訓練少一點的圖片,但是每一張圖片要訓練得更加仔細一些,這樣訓練出來的模型效果會有非常明顯地提升。但是缺點是訓練時間會比大batch_size明顯長很多。

在這裏插入圖片描述

總結

1、請先檢查一下你給出的樣本是否合適;

2、關注你生成錨框的閾值;

3、調節適當的Batch_size;

不同的電腦,不同的GPU,不同版本的CUDA、學習框架對Batch_size的適應程度是不一樣的,也許在別人的電腦上,這些參數的效果很好,而在你的電腦上就一塌糊塗。這些參數要靠大家一點一點去嘗試的。

祝大家學習愉快!
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章