使用Transformer進(jìn)行語義分割的簡單高效設(shè)計(jì)。
將 Transformer 與輕量級多層感知 (MLP) 解碼器相結(jié)合,表現(xiàn)SOTA!性能優(yōu)于SETR、Auto-Deeplab和OCRNet等網(wǎng)絡(luò)
相比于ViT,Swin Transfomer計(jì)算復(fù)雜度大幅度降低,具有輸入圖像大小線性計(jì)算復(fù)雜度。Swin Transformer隨著深度加深,逐漸合并圖像塊來構(gòu)建層次化Transformer,可以作為通用的視覺骨干網(wǎng)絡(luò),應(yīng)用于圖像分類、目標(biāo)檢測和語義分割等任務(wù)。
Swin Transformer
行了,不扯了,直接上干貨!?。。。。。。。。。。。?!
系統(tǒng)配置
- 操作系統(tǒng):Ubuntu 18.04
- 內(nèi)存:8G × 2
- CPU:Intel? Core? i5-8300H CPU @ 2.30GHz × 8
- 顯卡:NVIDIA GeForce GTX 3090 單卡
代碼鏈接
github地址:https://github.com/NVlabs/SegFormer
針對MMCV 選擇系統(tǒng)
ubuntu 配置環(huán)境很方便,所以不做詳細(xì)介紹,只講解win10安裝方式:ubuntu安裝方式會單獨(dú)說
MMCV 選擇系統(tǒng)時,由于mmcv-full 對windows目前沒做高版本配置,相對不友好。需要自己下載源碼編譯。
Windows環(huán)境要求:
- VS2019
- pytorch 1.8.1
- torchvision 0.9.1
安裝虛擬環(huán)境
conda create -n swinseg python=3.8
conda activate swinseg conda
install pytorch=1.8 torchvision cudatoolkit=10.2 -c pytorch
pip install cython matplotlib opencv-python==4.5.1.48
安裝vs2019,不需要安裝全部包,只需要安裝編譯庫即可,完成后查看如下路徑是否存在,加粗部分會根據(jù)版本不同不同。
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC*14.29.30037*\bin\Hostx86\x64
注意是vs2019 中間版本號可能不同 但是一定要Hostx86/x64的cl.exe。把cl.exe路徑添加到系統(tǒng)環(huán)境變量并移至最上層 cuda10.2高于10.1.10.0
cmd set Path=C
cmd cl查看
打開anaconda power shell,切記是 anaconda power shell,要不然編譯會出錯,配置過程中注意不要開啟VPN。
首先下載mmcv-1.2-7代碼,代碼包可在鏈接下載:
git (較慢):git clone https://github.com/open-mmlab/mmcv.git
本地博文庫:https://download.csdn.net/download/weixin_38353277/82292837
安裝mmcv
cd mmcv-1.2.7
pip install -r .\requirements.txt
查看英偉達(dá)顯卡算力
$env:TORCH_CUDA_ARCH_LIST="8.6" 根據(jù)自己顯卡算例設(shè)置。nvidia 官網(wǎng)可查
$env:MMCV_WITH_OPS = 1
$env:MAX_JOBS = 4 一般電腦核數(shù)
python setup.py build_ext
會顯示下面的界面,有一個過程,這個才算在編譯,若是一閃而過的話,那么大概率是出問題了
編譯完成后的界面長下面這樣
python setup.py develop #時間會長點(diǎn)
完成后長下面這樣(1.3.6之前編譯界面)
注意事項(xiàng)
注意:不要在同一個環(huán)境下安裝兩個版本,否則可能會遇到類似ModuleNotFoundError. 您需要先卸載一個,然后再安裝另一個。Installing the full version is highly recommended if CUDA is available.
windows端安裝的時候,不能使用pip直接安裝,需要使用源碼安裝
注意:MMCV 需要 Python3.6++。
編譯的時候不能使用CMD進(jìn)行編譯,必須使用powershell進(jìn)行編譯才行
cuda就用10.2 PyTorch就用1.8,這個是一定可以配置成功的,其他的版本沒試過,不做保證,可能會有各種各樣的坑,如果愿意的話,可以自行嘗試
報錯
ERROR: Failed building wheel for mmcv-full
ERROR: Command errored out with exit status 1
安裝過程中報錯,原因是沒有C++環(huán)境!
windows端安裝的時候,不能使用pip直接安裝,需要使用源碼安裝
ubuntu 18.04
一行搞定
pip install mmcv_full-1.2.7+torch1.7.0+cu110-cp38-cp38-manylinux1_x86_64.whl
版本自己可以換
安裝swin segmentation
這是在swin segmentation目錄下
pip install -r requirements.txt
pip install -e . --user (mmcv 安裝有問題會報錯)
也有 pip install segmentation
下載權(quán)重 demo/image_demo.py 修改–img --config --checkpoint路徑 并運(yùn)行
權(quán)重下載鏈接可以找我本地博文庫,或者私信我,我發(fā)給你
制作VOC 數(shù)據(jù)集
代碼默認(rèn)用的是ADE20K數(shù)據(jù)集進(jìn)行訓(xùn)練,其實(shí)都一樣,我voc習(xí)慣了,所用就教教怎么用voc哈
ADE20K數(shù)據(jù)集 格式如下,按照要求放就完了
├── data
│ ├── ade
│ │ ├── ADEChallengeData2016
│ │ │ ├── annotations
│ │ │ │ ├── training
│ │ │ │ ├── validation
│ │ │ ├── images
│ │ │ │ ├── training
│ │ │ │ ├── validation
VOC 數(shù)據(jù)集格式是
├── VOCdevkit
│ ├── VOC2012
│ │ ├── ImageSets
│ │ │ ├── Segmentation
│ │ │ │ ├── train.txt
│ │ │ │ ├── val.txt
│ │ │ │ ├── trainval.txt
│ │ │ ├── JPEGImages
│ │ │ │ ├── *.jpg #所有圖片
│ │ │ ├── SegmentationClass
│ │ │ │ ├── *.jpg #所有標(biāo)簽圖
其中: train.txt val.txt trainval.txt 只要圖片名,不需要后綴和路徑 如下
train val 比例自己分,這里不做講解
JPEGImages, SegmentationClass放的是所有圖片和label,切記如果2分類SegmentationClass 標(biāo)簽是0,1。多分類以此類推 0,1,2,……
然后將數(shù)據(jù)集放置在路徑tools/data/下,可以任意,我就放這里了
代碼部分修改
- configs/base/datasets/pascal_voc12.py修改
data_root 你放數(shù)據(jù)的位置
2 mmseg/datasets/voc.py修改
CLASSES PALETTE
多分類一樣,自己改
-
mmseg/models/decode_heads/segformer_head.py修改
第59行 SyncBN->BN -
tool/train修改–config --work-dir
5. gpu ID
'--gpu-ids',
type=int,
default=[0],
nargs='+',
6.local_config/base/models文件夾下對應(yīng)的segformer.py
修改norm_cfg SyncBN->BN
修改num_classes
7. local_config/segformer/B5文件夾下對應(yīng)的在train設(shè)置的–config模型
修改norm_cfg SyncBN->BN
修改所有num_classes
修改model[‘pretrained’]
修改data[‘samples_per_gpu’]
預(yù)訓(xùn)練權(quán)重文件優(yōu)先選擇訓(xùn)練圖片尺寸的大小
開始訓(xùn)練
進(jìn)入到tools路徑下 python train.py 即可完成模型訓(xùn)練
完成后測試效果
原圖
測試結(jié)果
測試效果確實(shí)相當(dāng)不錯文章來源:http://www.zghlxwxcb.cn/news/detail-807199.html
測試代碼需要的話私信我就行。文章來源地址http://www.zghlxwxcb.cn/news/detail-807199.html
到了這里,關(guān)于手把手教你使用Segformer訓(xùn)練自己的數(shù)據(jù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!