MicroNet實(shí)戰(zhàn)分享!使用MicroNet實(shí)現(xiàn)圖像分類(lèi)(一)
來(lái)源:投稿 作者:AI浩
編輯:學(xué)姐
MicroNet實(shí)戰(zhàn)?
摘要
本文通過(guò)對(duì)植物幼苗分類(lèi)的實(shí)際例子來(lái)感受一下MicroNet模型的效果。模型來(lái)自官方,我自己寫(xiě)了train和test部分。從得分情況來(lái)看,這個(gè)模型非常的優(yōu)秀,我選擇用的MicroNet-M3模型,大小僅有6M,但是ACC在95%左右,成績(jī)非常驚艷?。。?/p>
這篇文章從實(shí)戰(zhàn)的角度手把手帶領(lǐng)大家完成訓(xùn)練和測(cè)試。通過(guò)這篇文章能讓你學(xué)到:
如何使用數(shù)據(jù)增強(qiáng),包括transforms的增強(qiáng)、CutOut、MixUp、CutMix等增強(qiáng)手段??
如何配置MicroNet模型實(shí)現(xiàn)訓(xùn)練??
如何使用pytorch自帶混合精度??
如何使用梯度裁剪防止梯度爆炸??
如何使用DP多顯卡訓(xùn)練??
如何繪制loss和acc曲線(xiàn)??
如何生成val的測(cè)評(píng)報(bào)告??
如何編寫(xiě)測(cè)試腳本測(cè)試測(cè)試集??
如何使用余弦退火策略調(diào)整學(xué)習(xí)率??
如何使用AverageMeter類(lèi)統(tǒng)計(jì)ACC和loss等自定義變量??
如何理解和統(tǒng)計(jì)ACC1和ACC5?
安裝包
1、安裝timm
使用pip就行,命令:
2、安裝yacs
yacs的作者大名鼎鼎的Ross Girshick,faster-rcnn的作者。github地址:https://github.com/rbgirshick/yacs
yacs是一個(gè)輕量級(jí)用于定義和管理系統(tǒng)配置的開(kāi)源庫(kù),是科學(xué)實(shí)驗(yàn)軟件中常用的參數(shù)配置。在機(jī)器學(xué)習(xí)、深度學(xué)習(xí)模型訓(xùn)練過(guò)程中的超參數(shù)配置(卷積神經(jīng)網(wǎng)絡(luò)的深度,初始學(xué)習(xí)率等)??茖W(xué)實(shí)驗(yàn)的重現(xiàn)性至關(guān)重要,因此,需要記錄實(shí)驗(yàn)過(guò)程中的參數(shù)設(shè)置,以達(dá)到后期進(jìn)行實(shí)驗(yàn)的重現(xiàn)。yacs使用一種簡(jiǎn)單的,可讀的yaml格式。
數(shù)據(jù)增強(qiáng)Cutout和Mixup
為了提高成績(jī)我在代碼中加入Cutout和Mixup這兩種增強(qiáng)方式。實(shí)現(xiàn)這兩種增強(qiáng)需要安裝torchtoolbox。安裝命令:
Cutout實(shí)現(xiàn),在transforms中。
需要導(dǎo)入包:from timm.data.mixup import Mixup,
定義Mixup,和SoftTargetCrossEntropy
參數(shù)詳解:?
mixup_alpha (float): mixup alpha 值,如果 > 0,則 mixup 處于活動(dòng)狀態(tài)。
cutmix_alpha (float):cutmix alpha 值,如果 > 0,cutmix 處于活動(dòng)狀態(tài)。
cutmix_minmax (List[float]):cutmix 最小/最大圖像比率,cutmix 處于活動(dòng)狀態(tài),如果不是 None,則使用這個(gè) vs alpha。
如果設(shè)置了 cutmix_minmax 則cutmix_alpha 默認(rèn)為1.0
prob (float): 每批次或元素應(yīng)用 mixup 或 cutmix 的概率。
switch_prob (float): 當(dāng)兩者都處于活動(dòng)狀態(tài)時(shí)切換cutmix 和mixup 的概率 。
mode (str): 如何應(yīng)用 mixup/cutmix 參數(shù)(每個(gè)’batch’,‘pair’(元素對(duì)),‘elem’(元素)。
correct_lam (bool): 當(dāng) cutmix bbox 被圖像邊框剪裁時(shí)應(yīng)用。lambda 校正
label_smoothing (float):將標(biāo)簽平滑應(yīng)用于混合目標(biāo)張量。
num_classes (int): 目標(biāo)的類(lèi)數(shù)。
項(xiàng)目結(jié)構(gòu)
mean_std.py:計(jì)算mean和std的值。
makedata.py:生成數(shù)據(jù)集。
models文件夾下的micronet.py、activation.py和microconfig.py:來(lái)自官方的pytorch版本的代碼。
micronet.py:網(wǎng)絡(luò)文件。?
activation.py:激活函數(shù)文件,定義了DYShiftMax激活函數(shù)。?
microconfig.py:網(wǎng)絡(luò)配置參數(shù)。定義了m0到m3網(wǎng)絡(luò)的參數(shù)。?
utils文件夾下的defaults.py定義了cfg的參數(shù),這些參數(shù)是m0到m3網(wǎng)絡(luò)的設(shè)置參數(shù)。
詳細(xì)的參數(shù)設(shè)置如下:?
M0:
M1:
M2:
M3:
為了能在DP方式中使用混合精度,還需要在模型的forward函數(shù)前增加@autocast().

計(jì)算mean和std
為了使模型更加快速的收斂,我們需要計(jì)算出mean和std的值,新建mean_std.py,插入代碼:
數(shù)據(jù)集結(jié)構(gòu):

運(yùn)行結(jié)果:
把這個(gè)結(jié)果記錄下來(lái),后面要用!
生成數(shù)據(jù)集
我們整理還的圖像分類(lèi)的數(shù)據(jù)集結(jié)構(gòu)是這樣的
pytorch和keras默認(rèn)加載方式是ImageNet數(shù)據(jù)集格式,格式是
新增格式轉(zhuǎn)化腳本makedata.py,插入代碼:
完成上面的內(nèi)容就可以開(kāi)啟訓(xùn)練和測(cè)試了。
今天分享圖像分類(lèi)的論文資料!都是CVPR高分論文!
關(guān)注【學(xué)姐帶你玩AI】公眾號(hào)
回復(fù)“CVPR”免費(fèi)獲??!