木工支模價(jià)格明細(xì)表搜索引擎優(yōu)化的流程是什么
文章目錄
- 1 前言
- 2 概念介紹
- 2.1 什么是圖像語義分割
- 3 條件隨機(jī)場(chǎng)的深度學(xué)習(xí)模型
- 3\. 1 多尺度特征融合
- 4 語義分割開發(fā)過程
- 4.1 建立
- 4.2 下載CamVid數(shù)據(jù)集
- 4.3 加載CamVid圖像
- 4.4 加載CamVid像素標(biāo)簽圖像
- 5 PyTorch 實(shí)現(xiàn)語義分割
- 5.1 數(shù)據(jù)集準(zhǔn)備
- 5.2 訓(xùn)練基準(zhǔn)模型
- 5.3 損失函數(shù)
- 5.4 歸一化層
- 5.5 數(shù)據(jù)增強(qiáng)
- 5.6 實(shí)現(xiàn)效果
- 6 最后
1 前言
🔥 優(yōu)質(zhì)競(jìng)賽項(xiàng)目系列,今天要分享的是
🚩 基于深度學(xué)習(xí)實(shí)現(xiàn)語義分割算法系統(tǒng)
該項(xiàng)目較為新穎,適合作為競(jìng)賽課題方向,學(xué)長(zhǎng)非常推薦!
🥇學(xué)長(zhǎng)這里給一個(gè)題目綜合評(píng)分(每項(xiàng)滿分5分)
- 難度系數(shù):3分
- 工作量:4分
- 創(chuàng)新點(diǎn):4分
🧿 更多資料, 項(xiàng)目分享:
https://gitee.com/dancheng-senior/postgraduate
2 概念介紹
2.1 什么是圖像語義分割
這幾年,隨著深度學(xué)習(xí)理論和大規(guī)模并行計(jì)算設(shè)備快速發(fā)展,計(jì)算機(jī)視覺的諸多難點(diǎn)實(shí)現(xiàn)了質(zhì)的突破,包括圖像分類叫、目標(biāo)檢測(cè)、語義分割等等。
其中圖像分類和目標(biāo)檢測(cè)在各種場(chǎng)景應(yīng)用中大放光彩。目前最先進(jìn)網(wǎng)絡(luò)的準(zhǔn)確度已經(jīng)超過人類。
而圖像語義分割是一.種語義信息更豐富的視覺識(shí)別任務(wù),其主要任務(wù)是實(shí)現(xiàn)像素級(jí)別的分類。
圖像語義分割示意圖如下圖所示。
圖像語義分割技術(shù)在實(shí)際中有著非常廣泛的應(yīng)用,如自動(dòng)駕駛、生物醫(yī)學(xué)以及現(xiàn)實(shí)增強(qiáng)技術(shù)等等。
語義分割在自動(dòng)駕駛的應(yīng)用:
3 條件隨機(jī)場(chǎng)的深度學(xué)習(xí)模型
整個(gè)深度學(xué)習(xí)模型框架下如圖:
3. 1 多尺度特征融合
圖像中的各類物體都以不同的形態(tài)出現(xiàn), 用來觀測(cè)它們的尺度也不盡相同, 不同的物體需要用合適的尺度來測(cè)量。
尺度也有很多種, 宏觀上大的如“米”、“千米” 甚至“光年”; 微觀上小的如“微米”、“納米” 甚至是“飛米”。 在日常生活中,
人們也經(jīng)常接觸到尺度上的變換, 例如人們經(jīng)常用到的電子地圖上的放大與縮小、 照相機(jī)焦距的變化等,都是以不同的尺度來觀察或者測(cè)量不同的物體。
當(dāng)人們將一幅圖像輸入到計(jì)算機(jī)中時(shí), 計(jì)算機(jī)要嘗試很多不同的尺度以便得到描述圖片中不同物體的最合適的尺度。
卷積神經(jīng)網(wǎng)絡(luò)中含有大量的超參數(shù), 而且在網(wǎng)絡(luò)中的任何一個(gè)參數(shù), 都會(huì)對(duì)網(wǎng)絡(luò)生成的特征映射產(chǎn)生影響。 當(dāng)卷積神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)已經(jīng)確定下來時(shí),
網(wǎng)絡(luò)中每一層學(xué)習(xí)到的特征映射的尺度也隨之固定了下來, 擁有了在一定程度上的尺度不變性。
與此同時(shí), 為了完成當(dāng)前的任務(wù), 網(wǎng)絡(luò)中的這些已經(jīng)設(shè)置好的超參數(shù)不能被隨意更改, 所以必須要考慮融合多尺度特征的神經(jīng)網(wǎng)絡(luò)。
這種神經(jīng)網(wǎng)絡(luò)可以學(xué)習(xí)學(xué)長(zhǎng)提供的框架不同尺度的圖像特征, 獲得不同尺度的預(yù)測(cè), 進(jìn)而將它們?nèi)诤?#xff0c; 獲得最后的輸出。
一種多尺度特征融合網(wǎng)絡(luò)如下所示。
4 語義分割開發(fā)過程
學(xué)長(zhǎng)在這詳細(xì)說明圖像語義分割,如何進(jìn)行開發(fā)和設(shè)計(jì)
語義分割網(wǎng)絡(luò)對(duì)圖像中的每個(gè)像素進(jìn)行分類,從而產(chǎn)生按類別分割的圖像。語義分割的應(yīng)用包括用于自主駕駛的道路分割和用于醫(yī)學(xué)診斷的癌細(xì)胞分割。有關(guān)詳細(xì)信息,請(qǐng)參閱語義分段基礎(chǔ)知識(shí)(計(jì)算機(jī)視覺系統(tǒng)工具箱)。
為了說明訓(xùn)練過程,學(xué)長(zhǎng)訓(xùn)練SegNet ,一種設(shè)計(jì)用于語義圖像分割的卷積神經(jīng)網(wǎng)絡(luò)(CNN)。用于語義分段的其他類型網(wǎng)絡(luò)包括完全卷積網(wǎng)絡(luò)(FCN)和U-
Net。此處顯示的培訓(xùn)程序也可以應(yīng)用于這些網(wǎng)絡(luò)。
此示例使用劍橋大學(xué)的CamVid數(shù)據(jù)集進(jìn)行培訓(xùn)。此數(shù)據(jù)集是包含駕駛時(shí)獲得的街道視圖的圖像集合。該數(shù)據(jù)集為32種語義類提供了像素級(jí)標(biāo)簽,包括汽車,行人和道路。
4.1 建立
此示例創(chuàng)建具有從VGG-16網(wǎng)絡(luò)初始化的權(quán)重的SegNet網(wǎng)絡(luò)。要獲得VGG-16,請(qǐng)安裝適用于VGG-16網(wǎng)絡(luò)的Deep Learning
Toolbox?模型。安裝完成后,運(yùn)行以下代碼以驗(yàn)證安裝是否正確。
?
vgg16();
下載預(yù)訓(xùn)練版的SegNet。預(yù)訓(xùn)練模型允許您運(yùn)行整個(gè)示例,而無需等待培訓(xùn)完成。pretrainedURL = 'https: //www.mathworks.com/supportfiles/vision/data/segnetVGG16CamVid.mat ' ;
pretrainedFolder = fullfile(tempdir,'pretrainedSegNet');
pretrainedSegNet = fullfile(pretrainedFolder,'segnetVGG16CamVid.mat');
如果?存在(pretrainedFolder,'dir')MKDIR(pretrainedFolder);disp('下載預(yù)訓(xùn)練的SegNet(107 MB)......');websave(pretrainedSegNet,pretrainedURL);
結(jié)束
強(qiáng)烈建議使用具有計(jì)算能力3.0或更高版本的支持CUDA的NVIDIA?GPU來運(yùn)行此示例。使用GPU需要Parallel Computing
Toolbox?。
4.2 下載CamVid數(shù)據(jù)集
從以下URL下載CamVid數(shù)據(jù)集。
imageURL = 'http://web4.cs.ucl.ac.uk/staff/g.brostow/MotionSegRecData/files/701_StillsRaw_full.zip’ ;
labelURL = 'http://web4.cs.ucl.ac.uk/staff/g.brostow/MotionSegRecData/data/LabeledApproved_full.zip’ ;outputFolder = fullfile(tempdir,‘CamVid’);如果?存在(outputFolder,‘dir’)MKDIR(outputFolder)
labelsZip = fullfile(outputFolder,'labels.zip');
imagesZip = fullfile(outputFolder,'images.zip'); disp('下載16 MB CamVid數(shù)據(jù)集標(biāo)簽......');
websave(labelsZip,labelURL);
unzip(labelsZip,fullfile(outputFolder,'labels'));disp('下載557 MB CamVid數(shù)據(jù)集圖像......');
websave(imagesZip,imageURL);
解壓縮(imagesZip,fullfile(outputFolder,'images'));
注意:數(shù)據(jù)的下載時(shí)間取決于您的Internet連接。上面使用的命令會(huì)阻止MATLAB,直到下載完成?;蛘?#xff0c;您可以使用Web瀏覽器首先將數(shù)據(jù)集下載到本地磁盤。要使用從Web下載的文件,請(qǐng)將outputFolder上面的變量更改為下載文件的位置。
4.3 加載CamVid圖像
?
使用imageDatastore加載CamVid圖像。在imageDatastore使您能夠高效地裝載大量收集圖像的磁盤上。imgDir = fullfile(outputFolder,'images','701_StillsRaw_full');
imds = imageDatastore(imgDir);
顯示其中一個(gè)圖像。
4.4 加載CamVid像素標(biāo)簽圖像
使用pixelLabelDatastore加載CamVid像素標(biāo)簽圖像數(shù)據(jù)。A
pixelLabelDatastore將像素標(biāo)簽數(shù)據(jù)和標(biāo)簽ID封裝到類名映射中。
按照原始SegNet論文[1]中使用的程序,將CamVid中的32個(gè)原始類分組為11個(gè)類。指定這些類。
?
class = [“Sky” “Building” “Pole” “Road” “Pavement” “Tree” “SignSymbol” “Fence” “Car” “Pedestrian” “Bicyclist” ];
要將32個(gè)類減少為11個(gè),將原始數(shù)據(jù)集中的多個(gè)類組合在一起。例如,“Car”是“Car”,“SUVPickupTruck”,“Truck_Bus”,“Train”和“OtherMoving”的組合。使用支持函數(shù)返回分組的標(biāo)簽ID,該函數(shù)camvidPixelLabelIDs在本示例的末尾列出。
?
abelIDs = camvidPixelLabelIDs();
使用類和標(biāo)簽ID來創(chuàng)建 pixelLabelDatastore.labelDir = fullfile(outputFolder,'labels');
pxds = pixelLabelDatastore(labelDir,classes,labelIDs);
通過將其疊加在圖像上來讀取并顯示其中一個(gè)像素標(biāo)記的圖像。C = readimage(pxds,1);cmap = camvidColorMap;B = labeloverlay(I,C,'ColorMap',cmap);
imshow(B)
pixelLabelColorbar(CMAP,班);
5 PyTorch 實(shí)現(xiàn)語義分割
學(xué)長(zhǎng)這里給出一個(gè)具體實(shí)例 :
使用2020年ECCV Vipriors Chalange Start Code實(shí)現(xiàn)語義分割,并且做了一些優(yōu)化,讓進(jìn)度更高
5.1 數(shù)據(jù)集準(zhǔn)備
使用Cityscapes的數(shù)據(jù)集MiniCity Dataset。
將各基準(zhǔn)類別進(jìn)行輸入:
從0-18計(jì)數(shù),對(duì)各類別進(jìn)行像素標(biāo)記:
使用deeplab v3進(jìn)行基線測(cè)試,結(jié)果發(fā)現(xiàn)次要類別的IoU特別低,這樣會(huì)導(dǎo)致難以跟背景進(jìn)行區(qū)分。
如下圖中所示的墻、柵欄、公共汽車、火車等。
注意: 以上的結(jié)果表述數(shù)據(jù)集存在嚴(yán)重的類別不平衡問題。
5.2 訓(xùn)練基準(zhǔn)模型
使用來自torchvision的DeepLabV3進(jìn)行訓(xùn)練。
硬件為4個(gè)RTX 2080 Ti GPU (11GB x 4),如果只有1個(gè)GPU或較小的GPU內(nèi)存,請(qǐng)使用較小的批處理大小(< = 8)。
?
python baseline.py --save_path baseline_run_deeplabv3_resnet50 --crop_size 576 1152 --batch_size 8;
python baseline.py --save_path baseline_run_deeplabv3_resnet101 --model DeepLabv3_resnet101 --train_size 512 1024 --test_size 512 1024 --crop_size 384 768 --batch_size 8;
?
5.3 損失函數(shù)
有3種損失函數(shù)可供選擇,分別是:交叉熵?fù)p失函數(shù)(Cross-Entropy Loss)、類別加權(quán)交叉熵?fù)p失函數(shù)(Class-Weighted Cross
Entropy Loss)和焦點(diǎn)損失函數(shù)(Focal Loss)。
交叉熵?fù)p失函數(shù),常用在大多數(shù)語義分割場(chǎng)景,但它有一個(gè)明顯的缺點(diǎn),那就是對(duì)于只用分割前景和背景的時(shí)候,當(dāng)前景像素的數(shù)量遠(yuǎn)遠(yuǎn)小于背景像素的數(shù)量時(shí),模型嚴(yán)重偏向背景,導(dǎo)致效果不好。
?
# Cross Entropy Loss
python baseline.py --save_path baseline_run_deeplabv3_resnet50 --crop_size 576 1152 --batch_size 8;
?
類別加權(quán)交叉熵?fù)p失函數(shù)是在交叉熵?fù)p失函數(shù)的基礎(chǔ)上為每一個(gè)類別添加了一個(gè)權(quán)重參數(shù),使其在樣本數(shù)量不均衡的情況下可以獲得更好的效果。
?
# Weighted Cross Entropy Loss
python baseline.py --save_path baseline_run_deeplabv3_resnet50_wce --crop_size 576 1152 --batch_size 8 --loss weighted_ce;
?
焦點(diǎn)損失函數(shù)則更進(jìn)一步,用來解決難易樣本數(shù)量不平衡。
?
# Focal Loss
python baseline.py --save_path baseline_run_deeplabv3_resnet50_focal --crop_size 576 1152 --batch_size 8 --loss focal --focal_gamma 2.0;
5.4 歸一化層
BN是在batch上,對(duì)N、H、W做歸一化,而保留通道 C 的維度。BN對(duì)較小的batch size效果不好。
5.5 數(shù)據(jù)增強(qiáng)
2種數(shù)據(jù)增強(qiáng)技術(shù)
- CutMix
- Copy Blob
在 Blob 存儲(chǔ)的基礎(chǔ)上構(gòu)建,并通過Copy的方式增強(qiáng)了性能。
另外,如果要解決前面所提到的類別不平衡問題,則可以使用視覺歸納優(yōu)先的CopyBlob進(jìn)行增強(qiáng)。
?
# CopyBlob Augmentation
python baseline.py --save_path baseline_run_deeplabv3_resnet50_copyblob --crop_size 576 1152 --batch_size 8 --copyblob;
?
5.6 實(shí)現(xiàn)效果
多尺度推斷
使用[0.5,0.75,1.0,1.25,1.5,1.75,2.0,2.2]進(jìn)行多尺度推理。另外,使用H-Flip,同時(shí)必須使用單一批次。
?
# Multi-Scale Inference
python baseline.py --save_path baseline_run_deeplabv3_resnet50 --batch_size 1 --predict --mst;
?
使用驗(yàn)證集計(jì)算度量
計(jì)算指標(biāo)并將結(jié)果保存到results.txt中。
?
python evaluate.py --results baseline_run_deeplabv3_resnet50/results_val --batch_size 1 --predict --mst;
?
訓(xùn)練結(jié)果
最后的單一模型結(jié)果是0.6069831962012341,
如果使用了更大的模型或者更大的網(wǎng)絡(luò)結(jié)構(gòu),性能可能會(huì)有所提高。
另外,如果使用了各種集成模型,性能也會(huì)有所提高。
6 最后
🧿 更多資料, 項(xiàng)目分享:
https://gitee.com/dancheng-senior/postgraduate