使用 Fast ai 進行圖像分類
介紹
從頭開始訓練深度學習模型可能是一項乏味的任務。你必須找到正確的訓練權重,獲得最佳學習率,找到最佳超參數(shù)以及最適合你的數(shù)據(jù)和模型的架構。再加上沒有足夠的質(zhì)量數(shù)據(jù)來訓練,以及它需要的計算強度會對我們的資源造成嚴重損失,這些因素在第一輪就把你擊倒。但不要害怕,因為 Fast.a(chǎn)i 等深度學習庫會充當我們強有力的助手,讓你立即重返賽場。
目錄
1. Fast.a(chǎn)i概述
2. 我們?yōu)槭裁匆褂?Fast.a(chǎn)i?
· 圖像數(shù)據(jù)包
· LR 查找
· fit_one_cycle
3. 案例研究:緊急與非緊急車輛分類
Fast.a(chǎn)i概述
Fast.a(chǎn)i 是建立在 PyTorch 之上的流行深度學習框架。它旨在通過幾行代碼快速輕松地構建最先進的模型。它極大地簡化了深度學習模型的訓練過程,而不會影響訓練模型的速度、靈活性和性能。Fast.a(chǎn)i 也支持計算機視覺和 NLP 中最先進的技術和模型。
我們?yōu)槭裁匆褂?Fast.a(chǎn)i?
除了 Fast.a(chǎn)i 模型的高生產(chǎn)力和易用性之外,它還確保了我們能夠自定義高級 API 而無需干預較低級的 API。Fast.a(chǎn)i 還包含一些非常酷的功能,使其成為初學者最喜歡的深度學習庫之一。
圖像數(shù)據(jù)包
圖像數(shù)據(jù)包有助于匯集我們的訓練、驗證和測試數(shù)據(jù),并通過執(zhí)行所有必需的轉換和標準化圖像數(shù)據(jù)來處理數(shù)據(jù)。
LR 查找
學習率會影響我們的模型學習和適應問題的速度。低學習率會減慢訓練過程的收斂速度,而高學習率會導致性能出現(xiàn)令人不快的分歧。
因此,良好的學習率對于模型的令人滿意的性能至關重要,而找到最佳學習率就像大海撈針一樣。Fast.a(chǎn)i 的“l(fā)r_find()”是我們的騎士,它將我們從尋找合適學習率的痛苦中解救出來。
recorder.plot()
lr_find() 的工作原理是最初使用非常低的學習率來訓練小批量數(shù)據(jù)并計算損失。然后它以比前一個稍高的學習率訓練下一個小批量。這個過程一直持續(xù)到我們到達一個合適的學習率。我們可以使用 recorder.plot() 來獲取學習率與 Loss 的圖,這簡化了選擇良好的學習率的任務。選擇學習率的依據(jù)是哪個學習率為我們的損失提供了最陡的斜率,而不是哪個學習率的損失最低。
fit_one_cycle
fit_one_cycle 方法實現(xiàn)了循環(huán)學習率的概念。在這種方法中,我們使用在最小和最大界限值之間波動的學習率,而不是使用固定或指數(shù)下降的學習率。
循環(huán)學習率。訓練神經(jīng)網(wǎng)絡的循環(huán)學習率 - https://arxiv.org/pdf/1506.01186.pdf
CLR 中的每個循環(huán)由 2 個步驟組成,其中學習率從最小值增加到最大值,下一步反之亦然。假設最佳學習率位于所選的最小值和最大值之間。這里,步長表示用于增加或減少每一步的學習率的迭代次數(shù)。
我們使用循環(huán)學習率,通過循環(huán)數(shù)來擬合我們的模型。學習率在訓練期間的每個循環(huán)中在所選的最小學習率到最大學習率之間振蕩。CLR 的使用消除了我們的訓練模型陷入鞍點的可能性。
fit_one_cycle 方法還實現(xiàn)了學習率 Annealing 的概念,我們在最后幾次迭代中使用減少的 LR。最后一次迭代的學習率通常取為所選最小學習率的百分之一。這可以防止在我們接近它時超出最優(yōu)值。
案例研究:緊急與非緊急車輛分類
讓我們嘗試使用 Fast.a(chǎn)i 在 Imagenets 數(shù)據(jù)集中使用預訓練的 Resnet50 模型解決緊急與非緊急車輛分類問題。
導入模塊
from fastai.vision import *
from fastai.vision.models import resnet50
使用 ImageDataBunch 進行數(shù)據(jù)增強
tfms = get_transforms(do_flip=True, flip_vert=True, max_rotate=50, max_lighting=0.1, max_warp=0 )
data = ImageDataBunch.from_df('/content/drive/MyDrive/CV_Vehicle_classification/train_data/images', train, ds_tfms=tfms, label_delim= None, valid_pct=0.2, fn_col=0, label_col=1 , size=299,bs=64).normalize(imagenet_stats)
模型訓練
t_cnn1 = cnn_learner(data, resnet50, pretrained=True, metrics=[accuracy])
t_cnn1.fit_one_cycle(5)
最初,讓我們使用fit_one_cycle 訓練我們的模型 5 個時期。這是為了了解模型的工作原理。
使用 fit_one_cycle() 進行模型訓練
在這里,驗證損失遠小于訓練損失。這表明我們的模型擬合不足,與我們需要的模型相去甚遠。
解凍圖層(unfreeze)
讓我們解凍預訓練模型的層。這樣做是為了讓我們的模型學習特定于我們數(shù)據(jù)集的特征。我們再次擬合我們的模型,看看模型現(xiàn)在是如何工作的。
t_cnn1.unfreeze()
t_cnn1.fit_one_cycle(8)
解凍圖層并訓練模型
學習率查找器
使用 lr_find 和 recorder.plot,我們將能夠清楚地了解哪種學習率最適合我們的模型。利用學習率與損失圖來選擇學習率。
t_cnn1.lr_find()
t_cnn1.recorder.plot()
針對損失圖的學習率
可以看到 1e-4 之后的損失逐漸增加。因此,將初始層的學習率選擇為 1e-5,將后面的層選擇為 1e-4 將是一個明智的想法。
我們再次擬合我們的方法并使用選擇的學習率對其進行訓練。該模型稍后會被凍結并導出以供以后使用。
t_cnn1.fit_one_cycle(10,max_lr=slice(1e-5, 1e-4))
t_cnn1.freeze()
t_cnn1.export('/content/drive/MyDrive/CV_Vehicle_classification/model/Bmodel_fastai_resnet50.h5')
訓練和凍結模型
fit_one_cycle() 中的切片用于實現(xiàn)判別學習。它基本上告訴模型以 1e-5 的學習率訓練初始層,以 1e-4 的學習率訓練最終層,以及它們之間的層,其值介于這兩個學習率之間。
預測
完成所有模型訓練后,我們只剩下預測測試數(shù)據(jù)集的任務了,F(xiàn)在讓我們加載我們之前導出的測試數(shù)據(jù)和 Resnet50 模型,并使用它來預測我們的測試數(shù)據(jù)。
test_data = ImageList.from_df(test, cols=['image_names'], path='/content/drive/MyDrive/CV_Vehicle_classification/train_data/images')
t_rn50 = load_learner('/content/drive/MyDrive/CV_Vehicle_classification/model/', 'Bmodel_fastai_resnet50.h5', test = test_data)
y_trn50 = t_rn50.TTA(ds_type = DatasetType.Test)
preds = y_trn50[0].a(chǎn)rgmax(-1)
尾注
瞧!我們現(xiàn)在已經(jīng)預測了我們的測試數(shù)據(jù),而無需花費大量時間來建立一個更大的訓練數(shù)據(jù)集、設計和訓練我們的深度學習模型,也不會完全耗盡我們的計算資源。
原文標題 : 使用 Fast ai 進行圖像分類
請輸入評論內(nèi)容...
請輸入評論/評論長度6~500個字
最新活動更多
-
即日-11.13立即報名>>> 【在線會議】多物理場仿真助跑新能源汽車
-
11月28日立即報名>>> 2024工程師系列—工業(yè)電子技術在線會議
-
12月19日立即報名>> 【線下會議】OFweek 2024(第九屆)物聯(lián)網(wǎng)產(chǎn)業(yè)大會
-
即日-12.26火熱報名中>> OFweek2024中國智造CIO在線峰會
-
即日-2025.8.1立即下載>> 《2024智能制造產(chǎn)業(yè)高端化、智能化、綠色化發(fā)展藍皮書》
-
精彩回顧立即查看>> 【限時免費下載】TE暖通空調(diào)系統(tǒng)高效可靠的組件解決方案
推薦專題
-
5 夾縫中的文遠知行
- 高級軟件工程師 廣東省/深圳市
- 自動化高級工程師 廣東省/深圳市
- 光器件研發(fā)工程師 福建省/福州市
- 銷售總監(jiān)(光器件) 北京市/海淀區(qū)
- 激光器高級銷售經(jīng)理 上海市/虹口區(qū)
- 光器件物理工程師 北京市/海淀區(qū)
- 激光研發(fā)工程師 北京市/昌平區(qū)
- 技術專家 廣東省/江門市
- 封裝工程師 北京市/海淀區(qū)
- 結構工程師 廣東省/深圳市