使用 Fast ai 進(jìn)行圖像分類(lèi)
介紹
從頭開(kāi)始訓(xùn)練深度學(xué)習(xí)模型可能是一項(xiàng)乏味的任務(wù)。你必須找到正確的訓(xùn)練權(quán)重,獲得最佳學(xué)習(xí)率,找到最佳超參數(shù)以及最適合你的數(shù)據(jù)和模型的架構(gòu)。再加上沒(méi)有足夠的質(zhì)量數(shù)據(jù)來(lái)訓(xùn)練,以及它需要的計(jì)算強(qiáng)度會(huì)對(duì)我們的資源造成嚴(yán)重?fù)p失,這些因素在第一輪就把你擊倒。但不要害怕,因?yàn)?Fast.a(chǎn)i 等深度學(xué)習(xí)庫(kù)會(huì)充當(dāng)我們強(qiáng)有力的助手,讓你立即重返賽場(chǎng)。
目錄
1. Fast.a(chǎn)i概述
2. 我們?yōu)槭裁匆褂?Fast.a(chǎn)i?
· 圖像數(shù)據(jù)包
· LR 查找
· fit_one_cycle
3. 案例研究:緊急與非緊急車(chē)輛分類(lèi)
Fast.a(chǎn)i概述
Fast.a(chǎn)i 是建立在 PyTorch 之上的流行深度學(xué)習(xí)框架。它旨在通過(guò)幾行代碼快速輕松地構(gòu)建最先進(jìn)的模型。它極大地簡(jiǎn)化了深度學(xué)習(xí)模型的訓(xùn)練過(guò)程,而不會(huì)影響訓(xùn)練模型的速度、靈活性和性能。Fast.a(chǎn)i 也支持計(jì)算機(jī)視覺(jué)和 NLP 中最先進(jìn)的技術(shù)和模型。
我們?yōu)槭裁匆褂?Fast.a(chǎn)i?
除了 Fast.a(chǎn)i 模型的高生產(chǎn)力和易用性之外,它還確保了我們能夠自定義高級(jí) API 而無(wú)需干預(yù)較低級(jí)的 API。Fast.a(chǎn)i 還包含一些非常酷的功能,使其成為初學(xué)者最喜歡的深度學(xué)習(xí)庫(kù)之一。
圖像數(shù)據(jù)包
圖像數(shù)據(jù)包有助于匯集我們的訓(xùn)練、驗(yàn)證和測(cè)試數(shù)據(jù),并通過(guò)執(zhí)行所有必需的轉(zhuǎn)換和標(biāo)準(zhǔn)化圖像數(shù)據(jù)來(lái)處理數(shù)據(jù)。
LR 查找
學(xué)習(xí)率會(huì)影響我們的模型學(xué)習(xí)和適應(yīng)問(wèn)題的速度。低學(xué)習(xí)率會(huì)減慢訓(xùn)練過(guò)程的收斂速度,而高學(xué)習(xí)率會(huì)導(dǎo)致性能出現(xiàn)令人不快的分歧。
因此,良好的學(xué)習(xí)率對(duì)于模型的令人滿意的性能至關(guān)重要,而找到最佳學(xué)習(xí)率就像大海撈針一樣。Fast.a(chǎn)i 的“l(fā)r_find()”是我們的騎士,它將我們從尋找合適學(xué)習(xí)率的痛苦中解救出來(lái)。
recorder.plot()
lr_find() 的工作原理是最初使用非常低的學(xué)習(xí)率來(lái)訓(xùn)練小批量數(shù)據(jù)并計(jì)算損失。然后它以比前一個(gè)稍高的學(xué)習(xí)率訓(xùn)練下一個(gè)小批量。這個(gè)過(guò)程一直持續(xù)到我們到達(dá)一個(gè)合適的學(xué)習(xí)率。我們可以使用 recorder.plot() 來(lái)獲取學(xué)習(xí)率與 Loss 的圖,這簡(jiǎn)化了選擇良好的學(xué)習(xí)率的任務(wù)。選擇學(xué)習(xí)率的依據(jù)是哪個(gè)學(xué)習(xí)率為我們的損失提供了最陡的斜率,而不是哪個(gè)學(xué)習(xí)率的損失最低。
fit_one_cycle
fit_one_cycle 方法實(shí)現(xiàn)了循環(huán)學(xué)習(xí)率的概念。在這種方法中,我們使用在最小和最大界限值之間波動(dòng)的學(xué)習(xí)率,而不是使用固定或指數(shù)下降的學(xué)習(xí)率。
循環(huán)學(xué)習(xí)率。訓(xùn)練神經(jīng)網(wǎng)絡(luò)的循環(huán)學(xué)習(xí)率 - https://arxiv.org/pdf/1506.01186.pdf
CLR 中的每個(gè)循環(huán)由 2 個(gè)步驟組成,其中學(xué)習(xí)率從最小值增加到最大值,下一步反之亦然。假設(shè)最佳學(xué)習(xí)率位于所選的最小值和最大值之間。這里,步長(zhǎng)表示用于增加或減少每一步的學(xué)習(xí)率的迭代次數(shù)。
我們使用循環(huán)學(xué)習(xí)率,通過(guò)循環(huán)數(shù)來(lái)擬合我們的模型。學(xué)習(xí)率在訓(xùn)練期間的每個(gè)循環(huán)中在所選的最小學(xué)習(xí)率到最大學(xué)習(xí)率之間振蕩。CLR 的使用消除了我們的訓(xùn)練模型陷入鞍點(diǎn)的可能性。
fit_one_cycle 方法還實(shí)現(xiàn)了學(xué)習(xí)率 Annealing 的概念,我們?cè)谧詈髱状蔚惺褂脺p少的 LR。最后一次迭代的學(xué)習(xí)率通常取為所選最小學(xué)習(xí)率的百分之一。這可以防止在我們接近它時(shí)超出最優(yōu)值。
案例研究:緊急與非緊急車(chē)輛分類(lèi)
讓我們嘗試使用 Fast.a(chǎn)i 在 Imagenets 數(shù)據(jù)集中使用預(yù)訓(xùn)練的 Resnet50 模型解決緊急與非緊急車(chē)輛分類(lèi)問(wèn)題。
導(dǎo)入模塊
from fastai.vision import *
from fastai.vision.models import resnet50
使用 ImageDataBunch 進(jìn)行數(shù)據(jù)增強(qiáng)
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)
模型訓(xùn)練
t_cnn1 = cnn_learner(data, resnet50, pretrained=True, metrics=[accuracy])
t_cnn1.fit_one_cycle(5)
最初,讓我們使用fit_one_cycle 訓(xùn)練我們的模型 5 個(gè)時(shí)期。這是為了了解模型的工作原理。
使用 fit_one_cycle() 進(jìn)行模型訓(xùn)練
在這里,驗(yàn)證損失遠(yuǎn)小于訓(xùn)練損失。這表明我們的模型擬合不足,與我們需要的模型相去甚遠(yuǎn)。
解凍圖層(unfreeze)
讓我們解凍預(yù)訓(xùn)練模型的層。這樣做是為了讓我們的模型學(xué)習(xí)特定于我們數(shù)據(jù)集的特征。我們?cè)俅螖M合我們的模型,看看模型現(xiàn)在是如何工作的。
t_cnn1.unfreeze()
t_cnn1.fit_one_cycle(8)
解凍圖層并訓(xùn)練模型
學(xué)習(xí)率查找器
使用 lr_find 和 recorder.plot,我們將能夠清楚地了解哪種學(xué)習(xí)率最適合我們的模型。利用學(xué)習(xí)率與損失圖來(lái)選擇學(xué)習(xí)率。
t_cnn1.lr_find()
t_cnn1.recorder.plot()
針對(duì)損失圖的學(xué)習(xí)率
可以看到 1e-4 之后的損失逐漸增加。因此,將初始層的學(xué)習(xí)率選擇為 1e-5,將后面的層選擇為 1e-4 將是一個(gè)明智的想法。
我們?cè)俅螖M合我們的方法并使用選擇的學(xué)習(xí)率對(duì)其進(jìn)行訓(xùn)練。該模型稍后會(huì)被凍結(jié)并導(dǎo)出以供以后使用。
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')
訓(xùn)練和凍結(jié)模型
fit_one_cycle() 中的切片用于實(shí)現(xiàn)判別學(xué)習(xí)。它基本上告訴模型以 1e-5 的學(xué)習(xí)率訓(xùn)練初始層,以 1e-4 的學(xué)習(xí)率訓(xùn)練最終層,以及它們之間的層,其值介于這兩個(gè)學(xué)習(xí)率之間。
預(yù)測(cè)
完成所有模型訓(xùn)練后,我們只剩下預(yù)測(cè)測(cè)試數(shù)據(jù)集的任務(wù)了。現(xiàn)在讓我們加載我們之前導(dǎo)出的測(cè)試數(shù)據(jù)和 Resnet50 模型,并使用它來(lái)預(yù)測(cè)我們的測(cè)試數(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)預(yù)測(cè)了我們的測(cè)試數(shù)據(jù),而無(wú)需花費(fèi)大量時(shí)間來(lái)建立一個(gè)更大的訓(xùn)練數(shù)據(jù)集、設(shè)計(jì)和訓(xùn)練我們的深度學(xué)習(xí)模型,也不會(huì)完全耗盡我們的計(jì)算資源。
原文標(biāo)題 : 使用 Fast ai 進(jìn)行圖像分類(lèi)

發(fā)表評(píng)論
請(qǐng)輸入評(píng)論內(nèi)容...
請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字
最新活動(dòng)更多
-
6月20日立即下載>> 【白皮書(shū)】精準(zhǔn)測(cè)量 安全高效——福祿克光伏行業(yè)解決方案
-
7月3日立即報(bào)名>> 【在線會(huì)議】英飛凌新一代智能照明方案賦能綠色建筑與工業(yè)互聯(lián)
-
7月22-29日立即報(bào)名>> 【線下論壇】第三屆安富利汽車(chē)生態(tài)圈峰會(huì)
-
7.30-8.1火熱報(bào)名中>> 全數(shù)會(huì)2025(第六屆)機(jī)器人及智能工廠展
-
7月31日免費(fèi)預(yù)約>> OFweek 2025具身機(jī)器人動(dòng)力電池技術(shù)應(yīng)用大會(huì)
-
免費(fèi)參會(huì)立即報(bào)名>> 7月30日- 8月1日 2025全數(shù)會(huì)工業(yè)芯片與傳感儀表展
推薦專(zhuān)題
- 1 AI 眼鏡讓百萬(wàn) APP「集體失業(yè)」?
- 2 大廠紛紛入局,百度、阿里、字節(jié)搶奪Agent話語(yǔ)權(quán)
- 3 深度報(bào)告|中國(guó)AI產(chǎn)業(yè)正在崛起成全球力量,市場(chǎng)潛力和關(guān)鍵挑戰(zhàn)有哪些?
- 4 一文看懂視覺(jué)語(yǔ)言動(dòng)作模型(VLA)及其應(yīng)用
- 5 上海跑出80億超級(jí)獨(dú)角獸:獲上市公司戰(zhàn)投,干人形機(jī)器人
- 6 國(guó)家數(shù)據(jù)局局長(zhǎng)劉烈宏調(diào)研格創(chuàng)東智
- 7 下一代入口之戰(zhàn):大廠為何紛紛押注智能體?
- 8 百億AI芯片訂單,瘋狂傾銷(xiāo)中東?
- 9 Robotaxi新消息密集釋放,量產(chǎn)元年誰(shuí)在領(lǐng)跑?
- 10 格斗大賽出圈!人形機(jī)器人致命短板曝光:頭腦過(guò)于簡(jiǎn)單