使用 Fast ai 進(jìn)行圖像分類
介紹
從頭開始訓(xùn)練深度學(xué)習(xí)模型可能是一項(xiàng)乏味的任務(wù)。你必須找到正確的訓(xùn)練權(quán)重,獲得最佳學(xué)習(xí)率,找到最佳超參數(shù)以及最適合你的數(shù)據(jù)和模型的架構(gòu)。再加上沒有足夠的質(zhì)量數(shù)據(jù)來訓(xùn)練,以及它需要的計(jì)算強(qiáng)度會(huì)對(duì)我們的資源造成嚴(yán)重?fù)p失,這些因素在第一輪就把你擊倒。但不要害怕,因?yàn)?Fast.a(chǎn)i 等深度學(xué)習(xí)庫會(huì)充當(dāng)我們強(qiáng)有力的助手,讓你立即重返賽場。
目錄
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 之上的流行深度學(xué)習(xí)框架。它旨在通過幾行代碼快速輕松地構(gòu)建最先進(jìn)的模型。它極大地簡化了深度學(xué)習(xí)模型的訓(xùn)練過程,而不會(huì)影響訓(xùn)練模型的速度、靈活性和性能。Fast.a(chǎn)i 也支持計(jì)算機(jī)視覺和 NLP 中最先進(jìn)的技術(shù)和模型。
我們?yōu)槭裁匆褂?Fast.a(chǎn)i?
除了 Fast.a(chǎn)i 模型的高生產(chǎn)力和易用性之外,它還確保了我們能夠自定義高級(jí) API 而無需干預(yù)較低級(jí)的 API。Fast.a(chǎn)i 還包含一些非?岬墓δ,使其成為初學(xué)者最喜歡的深度學(xué)習(xí)庫之一。
圖像數(shù)據(jù)包
圖像數(shù)據(jù)包有助于匯集我們的訓(xùn)練、驗(yàn)證和測試數(shù)據(jù),并通過執(zhí)行所有必需的轉(zhuǎn)換和標(biāo)準(zhǔn)化圖像數(shù)據(jù)來處理數(shù)據(jù)。
LR 查找
學(xué)習(xí)率會(huì)影響我們的模型學(xué)習(xí)和適應(yīng)問題的速度。低學(xué)習(xí)率會(huì)減慢訓(xùn)練過程的收斂速度,而高學(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í)率的痛苦中解救出來。
recorder.plot()
lr_find() 的工作原理是最初使用非常低的學(xué)習(xí)率來訓(xùn)練小批量數(shù)據(jù)并計(jì)算損失。然后它以比前一個(gè)稍高的學(xué)習(xí)率訓(xùn)練下一個(gè)小批量。這個(gè)過程一直持續(xù)到我們到達(dá)一個(gè)合適的學(xué)習(xí)率。我們可以使用 recorder.plot() 來獲取學(xué)習(xí)率與 Loss 的圖,這簡化了選擇良好的學(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í)率位于所選的最小值和最大值之間。這里,步長表示用于增加或減少每一步的學(xué)習(xí)率的迭代次數(shù)。
我們使用循環(huán)學(xué)習(xí)率,通過循環(huán)數(shù)來擬合我們的模型。學(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)值。
案例研究:緊急與非緊急車輛分類
讓我們嘗試使用 Fast.a(chǎn)i 在 Imagenets 數(shù)據(jù)集中使用預(yù)訓(xùn)練的 Resnet50 模型解決緊急與非緊急車輛分類問題。
導(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í)率與損失圖來選擇學(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ù)測
完成所有模型訓(xùn)練后,我們只剩下預(yù)測測試數(shù)據(jù)集的任務(wù)了,F(xiàn)在讓我們加載我們之前導(dǎo)出的測試數(shù)據(jù)和 Resnet50 模型,并使用它來預(yù)測我們的測試數(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ù)測了我們的測試數(shù)據(jù),而無需花費(fèi)大量時(shí)間來建立一個(gè)更大的訓(xùn)練數(shù)據(jù)集、設(shè)計(jì)和訓(xùn)練我們的深度學(xué)習(xí)模型,也不會(huì)完全耗盡我們的計(jì)算資源。
原文標(biāo)題 : 使用 Fast ai 進(jìn)行圖像分類

發(fā)表評(píng)論
請(qǐng)輸入評(píng)論內(nèi)容...
請(qǐng)輸入評(píng)論/評(píng)論長度6~500個(gè)字
您提交的評(píng)論過于頻繁,請(qǐng)輸入驗(yàn)證碼繼續(xù)
最新活動(dòng)更多
-
3月27日立即報(bào)名>> 【工程師系列】汽車電子技術(shù)在線大會(huì)
-
4月30日立即下載>> 【村田汽車】汽車E/E架構(gòu)革新中,新智能座艙挑戰(zhàn)的解決方案
-
5月15-17日立即預(yù)約>> 【線下巡回】2025年STM32峰會(huì)
-
即日-5.15立即報(bào)名>>> 【在線會(huì)議】安森美Hyperlux™ ID系列引領(lǐng)iToF技術(shù)革新
-
5月15日立即下載>> 【白皮書】精確和高效地表征3000V/20A功率器件應(yīng)用指南
-
5月16日立即參評(píng) >> 【評(píng)選啟動(dòng)】維科杯·OFweek 2025(第十屆)人工智能行業(yè)年度評(píng)選
推薦專題
- 1 UALink規(guī)范發(fā)布:挑戰(zhàn)英偉達(dá)AI統(tǒng)治的開始
- 2 北電數(shù)智主辦酒仙橋論壇,探索AI產(chǎn)業(yè)發(fā)展新路徑
- 3 降薪、加班、裁員三重暴擊,“AI四小龍”已折戟兩家
- 4 “AI寒武紀(jì)”爆發(fā)至今,五類新物種登上歷史舞臺(tái)
- 5 國產(chǎn)智駕迎戰(zhàn)特斯拉FSD,AI含量差幾何?
- 6 光計(jì)算迎來商業(yè)化突破,但落地仍需時(shí)間
- 7 東陽光:2024年扭虧、一季度凈利大增,液冷疊加具身智能打開成長空間
- 8 地平線自動(dòng)駕駛方案解讀
- 9 封殺AI“照騙”,“淘寶們”終于不忍了?
- 10 優(yōu)必選:營收大增主靠小件,虧損繼續(xù)又逢關(guān)稅,能否乘機(jī)器人東風(fēng)翻身?