YOLO 之理解預訓練和微調

2021-10-06 03:20:19 字數 1428 閱讀 1335

問題描述:在閱讀yolo**的時候,總是出現預訓練(pretraining)以及微調(fine tuning)。那麼問題來了:

預訓練是什麼?為什麼要用預訓練?怎樣預訓練?

微調是什麼?為什麼要用微調?怎樣微調?

什麼是預訓練和微調?

你需要搭建乙個網路模型來完成乙個特定的影象分類的任務。首先,你需要隨機初始化引數,然後開始訓練網路,不斷調整直到網路的損失越來越小。在訓練的過程中,一開始初始化的引數會不斷變化。當你覺得結果很滿意的時候,你就可以將訓練模型的引數儲存下來,以便訓練好的模型可以在下次執行類似任務時獲得較好的結果。這個過程就是 pre−training。

之後,你又接收到乙個類似的影象分類的任務。這時候,你可以直接使用之前儲存下來的模型的引數來作為這一任務的初始化引數,然後在訓練的過程中,依據結果不斷進行一些修改。這時候,你使用的就是乙個 pre−trained模型,而過程就是 finetuning。

所以,預訓練 就是指預先訓練的乙個模型或者指預先訓練模型的過程;微調 就是指將預訓練過的模型作用於自己的資料集,並使引數適應自己資料集的過程。

預訓練和微調的作用

在 cnn領域中,實際上,很少人自己從頭訓練乙個 cnn網路。主要原因是自己很小的概率會擁有足夠大的資料集,基本是幾百或者幾千張,不像 imagenet有 1200 萬張這樣的規模。擁有的資料集不夠大,而又想使用很好的模型的話,很容易會造成過擬合。

所以,一般的操作都是在乙個大型的資料集上(imagenet)訓練乙個模型,然後使用該模型作為類似任務的初始化或者特徵提取器。比如 vgg,inception等模型都提供了自己的訓練引數,以便人們可以拿來微調。這樣既節省了時間和計算資源,又能很快的達到較好的效果。

(二)個人理解(小白級解釋):

首先,為什麼使用預訓練呢?因為自己的資料集規模不夠大,一般只有幾百張,數千張,直接應用這些資料訓練乙個網路,效果可能不太好,訓練的模型引數可能不是最優的,容易產生過擬合問題。故提出一種思路,先在 imagenet 上預訓練,當預訓練效果比較好時,將訓練模型的引數儲存下來,再訓練自己的資料集。為什麼呢?因為 imagenet有 1200 萬張,擁有足夠大的資料集,方便達到最好的訓練效果。為什麼要用訓練模型引數呢?因為預訓練的結果是比較好的,引數也是最優的,使用預訓練模型的引數具有一定的參考意義。

然後,什麼是微調?微調就是微調預訓練模型的引數,以適應自己資料集的訓練。為什麼要微調呢?畢竟每個人的資料集不一樣,個人需求也不一樣(有的要求速度快,有的要求精度高),個人硬體配置不一樣,故微調是根據自己的實際情況而定。

最後,當訓練完自己的資料集以後,就可以檢測了,**物體的位置和類別。

74附:yolov1**訓練部分原文敘述。

預訓練與微調

預訓練 pre training trained 和微調 fine tuning 這兩個詞經常在 中見到,今天主要按以下兩點來說明。所以,預訓練就是指預先訓練的乙個模型或者指預先訓練模型的過程 微調就是指將預訓練過的模型作用於自己的資料集,並使引數適應自己資料集的過程。在 cnn 領域中,實際上,很...

BERT的通俗理解 預訓練模型 微調

1 預訓練模型 bert是乙個預訓練的模型,那麼什麼是預訓練呢?舉例子進行簡單的介紹 假設已有a訓練集,先用a對網路進行預訓練,在a任務上學會網路引數,然後儲存以備後用,當來乙個新的任務b,採取相同的網路結構,網路引數初始化的時候可以載入a學習好的引數,其他的高層引數隨機初始化,之後用b任務的訓練資...

YOLO 之理解召回率 精確率和準確率

某呼上是這樣解釋的 精確率 precision 和準確率 accuracy 是不一樣的。實際上非常簡單,精確率是針對我們 結果而言的,它表示的是 為正的樣本中有多少是真正的正樣本。那麼 為正就有兩種可能了,一種就是把正類 為正類 tp 另一種就是把負類 為正類 fp 也就是 p t ptp fp p...