中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

如何用PyTorch進行語義分割

本篇內(nèi)容主要講解“如何用PyTorch進行語義分割”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“如何用PyTorch進行語義分割”吧!

創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司,專注成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計、網(wǎng)站營銷推廣,域名與空間,雅安服務(wù)器托管網(wǎng)站托管有關(guān)企業(yè)網(wǎng)站制作方案、改版、費用等問題,請聯(lián)系創(chuàng)新互聯(lián)。

預(yù)設(shè)置

在開始訓(xùn)練之前,得首先設(shè)置一下庫、數(shù)據(jù)集等。

庫準備

pip install -r requirements.txt

下載數(shù)據(jù)集

教程使用的是來自Cityscapes的數(shù)據(jù)集MiniCity Dataset。

數(shù)據(jù)集的簡單數(shù)據(jù)分析

將各基準類別進行輸入:

如何用PyTorch進行語義分割

之后,便從0-18計數(shù),對各類別進行像素標記:

如何用PyTorch進行語義分割

使用deeplab v3進行基線測試,結(jié)果發(fā)現(xiàn)次要類別的IoU特別低,這樣會導(dǎo)致難以跟背景進行區(qū)分。

如下圖中所示的墻、柵欄、公共汽車、火車等。

如何用PyTorch進行語義分割

分析結(jié)論:數(shù)據(jù)集存在嚴重的類別不平衡問題。

訓(xùn)練基準模型

使用來自torchvision的DeepLabV3進行訓(xùn)練。

硬件為4個RTX 2080 Ti GPU (11GB x 4),如果只有1個GPU或較小的GPU內(nèi)存,請使用較小的批處理大小(< = 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;

 損失函數(shù)

有3種損失函數(shù)可供選擇,分別是:交叉熵損失函數(shù)(Cross-Entropy Loss)、類別加權(quán)交叉熵損失函數(shù)(Class-Weighted Cross Entropy Loss)和焦點損失函數(shù)(Focal Loss)。

交叉熵損失函數(shù),常用在大多數(shù)語義分割場景,但它有一個明顯的缺點,那就是對于只用分割前景和背景的時候,當前景像素的數(shù)量遠遠小于背景像素的數(shù)量時,模型嚴重偏向背景,導(dǎo)致效果不好。

# Cross Entropy Loss  python baseline.py --save_path baseline_run_deeplabv3_resnet50 --crop_size 576 1152 --batch_size 8;

類別加權(quán)交叉熵損失函數(shù)是在交叉熵損失函數(shù)的基礎(chǔ)上為每一個類別添加了一個權(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;

焦點損失函數(shù)則更進一步,用來解決難易樣本數(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;

歸一化層

有4種歸一化方法:BN(Batch Normalization)、IN(Instance Normalization)、GN(Group Normalization)和EvoNorm(Evolving Normalization)。

如何用PyTorch進行語義分割

BN是在batch上,對N、H、W做歸一化,而保留通道 C 的維度。BN對較小的batch size效果不好。

# Batch Normalization  python baseline.py --save_path baseline_run_deeplabv3_resnet50 --crop_size 576 1152 --batch_size 8;

IN在圖像像素上,對H、W做歸一化,用在風(fēng)格化遷移。

# Instance Normalization  python baseline.py --save_path baseline_run_deeplabv3_resnet50_instancenorm --crop_size 576 1152 --batch_size 8 --norm instance;

GN將通道分組,然后再做歸一化。

# Group Normalization  python baseline.py --save_path baseline_run_deeplabv3_resnet50_groupnorm --crop_size 576 1152 --batch_size 8 --norm group;

EvoNorm則是4月份由谷歌和DeepMind 聯(lián)合發(fā)布的一項新技術(shù)。實驗證明,EvoNorms 在多個圖像分類模型上效果顯著,而且還能很好地遷移到 Mask R-CNN 模型和 BigGAN。

# Evolving Normalization  python baseline.py --save_path baseline_run_deeplabv3_resnet50_evonorm --crop_size 576 1152 --batch_size 8 --norm evo;

數(shù)據(jù)增強

2種數(shù)據(jù)增強技術(shù):CutMix、Copy Blob。

  •  CutMix

將一部分區(qū)域cut掉但不填充0像素,而是隨機填充訓(xùn)練集中的其他數(shù)據(jù)的區(qū)域像素值,分類結(jié)果按一定的比例分配。

如何用PyTorch進行語義分割

而在這里,則是在原有CutMix的基礎(chǔ)上,引入了語義分割。

# CutMix Augmentation  python baseline.py --save_path baseline_run_deeplabv3_resnet50_cutmix --crop_size 576 1152 --batch_size 8 --cutmix;
  •  Copy Blob

在 Blob 存儲的基礎(chǔ)上構(gòu)建,并通過Copy的方式增強了性能。

如何用PyTorch進行語義分割

另外,如果要解決前面所提到的類別不平衡問題,則可以使用視覺歸納優(yōu)先的CopyBlob進行增強。

# CopyBlob Augmentation  python baseline.py --save_path baseline_run_deeplabv3_resnet50_copyblob --crop_size 576 1152 --batch_size 8 --copyblob;

推理

訓(xùn)練結(jié)束后,對訓(xùn)練完成的模型進行評估。

python baseline.py --save_path baseline_run_deeplabv3_resnet50 --batch_size 4 --predict;

多尺度推斷

使用[0.5,0.75,1.0,1.25,1.5,1.75,2.0,2.2]進行多尺度推理。另外,使用H-Flip,同時必須使用單一批次。

# Multi-Scale Inference  python baseline.py --save_path baseline_run_deeplabv3_resnet50 --batch_size 1 --predict --mst;

使用驗證集計算度量

計算指標并將結(jié)果保存到results.txt中。

python evaluate.py --results baseline_run_deeplabv3_resnet50/results_val --batch_size 1 --predict --mst;

最終結(jié)果

如何用PyTorch進行語義分割

最后的單一模型結(jié)果是0.6069831962012341,

到此,相信大家對“如何用PyTorch進行語義分割”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

新聞名稱:如何用PyTorch進行語義分割
網(wǎng)站鏈接:http://www.rwnh.cn/article32/jihdsc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、微信公眾號、手機網(wǎng)站建設(shè)搜索引擎優(yōu)化、App設(shè)計品牌網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)
谢通门县| 武山县| 搜索| 定西市| 平江县| 肇州县| 固镇县| 泸溪县| 新巴尔虎右旗| 鄂温| 西充县| 绥滨县| 深水埗区| 阜康市| 格尔木市| 桦南县| 德兴市| 茂名市| 甘德县| 突泉县| 新安县| 安阳市| 五莲县| 肇东市| 巴青县| 铜鼓县| 锡林浩特市| 安新县| 辉南县| 习水县| 稻城县| 咸丰县| 文安县| 花垣县| 六枝特区| 济阳县| 阿克陶县| 安顺市| 襄垣县| 连城县| 长治县|