【天池赛事】零基础入门语义分割-地表建筑物识别 Task6:分割模型模型集成
【天池賽事】零基礎(chǔ)入門(mén)語(yǔ)義分割-地表建筑物識(shí)別
-
Task1:賽題理解與 baseline(3 天)
– 學(xué)習(xí)主題:理解賽題內(nèi)容解題流程
– 學(xué)習(xí)內(nèi)容:賽題理解、數(shù)據(jù)讀取、比賽 baseline 構(gòu)建
– 學(xué)習(xí)成果:比賽 baseline 提交 -
Task2:數(shù)據(jù)擴(kuò)增方法(3 天)
– 學(xué)習(xí)主題:語(yǔ)義分割任務(wù)中數(shù)據(jù)擴(kuò)增方法
– 學(xué)習(xí)內(nèi)容:掌握語(yǔ)義分割任務(wù)中數(shù)據(jù)擴(kuò)增方法的細(xì)節(jié)和使用
– 學(xué)習(xí)成果:數(shù)據(jù)擴(kuò)增方法的實(shí)踐 -
Task3:網(wǎng)絡(luò)模型結(jié)構(gòu)發(fā)展(3 天)
– 學(xué)習(xí)主題:掌握語(yǔ)義分割模型的發(fā)展脈絡(luò)
– 學(xué)習(xí)內(nèi)容: FCN、 Unet、 DeepLab、 SegNet、 PSPNet
– 學(xué)習(xí)成果:多種網(wǎng)絡(luò)模型的搭建 -
Task4:評(píng)價(jià)函數(shù)與損失函數(shù)(3 天)
– 學(xué)習(xí)主題:語(yǔ)義分割模型各種評(píng)價(jià)函數(shù)與損失函數(shù)
– 學(xué)習(xí)內(nèi)容: Dice、 IoU、 BCE、 Focal Loss、 Lovász-Softmax
– 學(xué)習(xí)成果:評(píng)價(jià)/損失函數(shù)的實(shí)踐 -
Task5:模型訓(xùn)練與驗(yàn)證(3 天)
– 學(xué)習(xí)主題:數(shù)據(jù)劃分方法
– 學(xué)習(xí)內(nèi)容:三種數(shù)據(jù)劃分方法、模型調(diào)參過(guò)程
– 學(xué)習(xí)成果:數(shù)據(jù)劃分具體操作 -
Task6:分割模型模型集成(3 天)
– 學(xué)習(xí)主題:語(yǔ)義分割模型集成方法
– 學(xué)習(xí)內(nèi)容: LookaHead、 SnapShot、 SWA、 TTA
– 學(xué)習(xí)成果:模型集成思路
Task6:分割模型模型集成
- 1 學(xué)習(xí)目標(biāo)
- 2 集成學(xué)習(xí)方法
- 3 深度學(xué)習(xí)中的集成學(xué)習(xí)
- 3.1 Dropout
- 3.2 TTA
- 3.3 Snapshot
- 4 本章小節(jié)
在上一章我們學(xué)習(xí)了如何構(gòu)建驗(yàn)證集,如何訓(xùn)練和驗(yàn)證。本章作為本次賽題學(xué)習(xí)的最后一章,將會(huì)講解如何使用集成學(xué)習(xí)提高預(yù)測(cè)精度。
本章講解的知識(shí)點(diǎn)包括:集成學(xué)習(xí)方法、深度學(xué)習(xí)中的集成學(xué)習(xí)和結(jié)果后處理思路。
1 學(xué)習(xí)目標(biāo)
- 學(xué)習(xí)集成學(xué)習(xí)方法以及交叉驗(yàn)證情況下的模型集成
- 學(xué)會(huì)使用深度學(xué)習(xí)模型的集成學(xué)習(xí)
2 集成學(xué)習(xí)方法
在機(jī)器學(xué)習(xí)中的集成學(xué)習(xí)可以在一定程度上提高預(yù)測(cè)精度,常見(jiàn)的集成學(xué)習(xí)方法有Stacking、Bagging和Boosting,同時(shí)這些集成學(xué)習(xí)方法與具體驗(yàn)證集劃分聯(lián)系緊密。
由于深度學(xué)習(xí)模型一般需要較長(zhǎng)的訓(xùn)練周期,如果硬件設(shè)備不允許建議選取留出法,如果需要追求精度可以使用交叉驗(yàn)證的方法。
下面假設(shè)構(gòu)建了10折交叉驗(yàn)證,訓(xùn)練得到10個(gè)語(yǔ)義分割模型。
那么在10個(gè)CNN模型可以使用如下方式進(jìn)行集成:
- 對(duì)預(yù)測(cè)的結(jié)果的概率值進(jìn)行平均,然后解碼為具體字符;
- 對(duì)預(yù)測(cè)的字符進(jìn)行投票,得到最終字符;
3 深度學(xué)習(xí)中的集成學(xué)習(xí)
此外在深度學(xué)習(xí)中本身還有一些集成學(xué)習(xí)思路的做法,值得借鑒學(xué)習(xí):
3.1 Dropout
Dropout可以作為訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)的一種技巧。在每個(gè)訓(xùn)練批次中,通過(guò)隨機(jī)讓一部分的節(jié)點(diǎn)停止工作。同時(shí)在預(yù)測(cè)的過(guò)程中讓所有的節(jié)點(diǎn)都起作用。
Dropout經(jīng)常出現(xiàn)在CNN網(wǎng)絡(luò)中,可以有效的緩解模型過(guò)擬合的情況,也可以在預(yù)測(cè)時(shí)增加模型的精度。
3.2 TTA
測(cè)試集數(shù)據(jù)擴(kuò)增(Test Time Augmentation,簡(jiǎn)稱(chēng)TTA)也是常用的集成學(xué)習(xí)技巧,數(shù)據(jù)擴(kuò)增不僅可以在訓(xùn)練時(shí)候用,而且可以同樣在預(yù)測(cè)時(shí)候進(jìn)行數(shù)據(jù)擴(kuò)增,對(duì)同一個(gè)樣本預(yù)測(cè)三次,然后對(duì)三次結(jié)果進(jìn)行平均。
for idx, name in enumerate(tqdm_notebook(glob.glob('./test_mask/*.png')[:])):image = cv2.imread(name)image = trfm(image)with torch.no_grad():image = image.to(DEVICE)[None]score1 = model(image).cpu().numpy()score2 = model(torch.flip(image, [0, 3]))score2 = torch.flip(score2, [3, 0]).cpu().numpy()score3 = model(torch.flip(image, [0, 2]))score3 = torch.flip(score3, [2, 0]).cpu().numpy()score = (score1 + score2 + score3) / 3.0score_sigmoid = score[0].argmax(0) + 13.3 Snapshot
本章的開(kāi)頭已經(jīng)提到,假設(shè)我們訓(xùn)練了10個(gè)CNN則可以將多個(gè)模型的預(yù)測(cè)結(jié)果進(jìn)行平均。但是加入只訓(xùn)練了一個(gè)CNN模型,如何做模型集成呢?
在論文Snapshot Ensembles中,作者提出使用cyclical learning rate進(jìn)行訓(xùn)練模型,并保存精度比較好的一些checkopint,最后將多個(gè)checkpoint進(jìn)行模型集成。
由于在cyclical learning rate中學(xué)習(xí)率的變化有周期性變大和減少的行為,因此CNN模型很有可能在跳出局部最優(yōu)進(jìn)入另一個(gè)局部最優(yōu)。在Snapshot論文中作者通過(guò)使用表明,此種方法可以在一定程度上提高模型精度,但需要更長(zhǎng)的訓(xùn)練時(shí)間。
4 本章小節(jié)
在本章中我們講解了深度學(xué)習(xí)模型做集成學(xué)習(xí)的各種方法,并以此次賽題為例講解了部分代碼。以下幾點(diǎn)需要同學(xué)們注意
-
集成學(xué)習(xí)只能在一定程度上提高精度,并需要耗費(fèi)較大的訓(xùn)練時(shí)間,因此建議先使用提高單個(gè)模型的精度,再考慮集成學(xué)習(xí)過(guò)程;
-
具體的集成學(xué)習(xí)方法需要與驗(yàn)證集劃分方法結(jié)合,Dropout和TTA在所有場(chǎng)景有可以起作用。
-
使用交叉驗(yàn)證訓(xùn)練模型,得到多個(gè)模型權(quán)重;
-
學(xué)習(xí)Snapshot和TTA的具體用法;
總結(jié)
以上是生活随笔為你收集整理的【天池赛事】零基础入门语义分割-地表建筑物识别 Task6:分割模型模型集成的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【天池赛事】零基础入门语义分割-地表建筑
- 下一篇: git 创建远程版本库(亲测有效)