使用Segformer训练自己的数据
使用Transformer进行语义分割的简单高效设计。
将 Transformer 与轻量级多层感知 (MLP) 解码器相结合,表现SOTA!性能优于SETR、Auto-Deeplab和OCRNet等网络
相比于ViT,Swin Transfomer计算复杂度大幅度降低,具有输入图像大小线性计算复杂度。Swin Transformer随着深度加深,逐渐合并图像块来构建层次化Transformer,可以作为通用的视觉骨干网络,应用于图像分类、目标检测和语义分割等任务。
Swin Transformer
行了,不扯了,直接上干货!!!!!!!!!!!!!!
系统配置
- 操作系统:Ubuntu 18.04
- 内存:8G × 2
- CPU:Intel® Core™ i5-8300H CPU @ 2.30GHz × 8
- 显卡:NVIDIA GeForce GTX 3090 单卡
代码链接
github地址:https://github.com/NVlabs/SegFormer
针对MMCV 选择系统
ubuntu 配置环境很方便,所以不做详细介绍,只讲解win10安装方式:ubuntu安装方式会单独说
MMCV 选择系统时,由于mmcv-full 对windows目前没做高版本配置,相对不友好。需要自己下载源码编译。
Windows环境要求:
- VS2019
- pytorch 1.8.1
- torchvision 0.9.1
安装虚拟环境
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,不需要安装全部包,只需要安装编译库即可,完成后查看如下路径是否存在,加粗部分会根据版本不同不同。
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路径添加到系统环境变量并移至最上层 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
查看英伟达显卡算力
$env:TORCH_CUDA_ARCH_LIST="8.6" 根据自己显卡算例设置。nvidia 官网可查
$env:MMCV_WITH_OPS = 1
$env:MAX_JOBS = 4 一般电脑核数
python setup.py build_ext
会显示下面的界面,有一个过程,这个才算在编译,若是一闪而过的话,那么大概率是出问题了
编译完成后的界面长下面这样
python setup.py develop #时间会长点
完成后长下面这样(1.3.6之前编译界面)
注意事项
注意:不要在同一个环境下安装两个版本,否则可能会遇到类似ModuleNotFoundError. 您需要先卸载一个,然后再安装另一个。Installing the full version is highly recommended if CUDA is available.
windows端安装的时候,不能使用pip直接安装,需要使用源码安装
注意:MMCV 需要 Python3.6++。
编译的时候不能使用CMD进行编译,必须使用powershell进行编译才行
cuda就用10.2 PyTorch就用1.8,这个是一定可以配置成功的,其他的版本没试过,不做保证,可能会有各种各样的坑,如果愿意的话,可以自行尝试
报错
ERROR: Failed building wheel for mmcv-full
ERROR: Command errored out with exit status 1
安装过程中报错,原因是没有C++环境!
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
下载权重 demo/image_demo.py 修改–img –config –checkpoint路径 并运行
权重下载链接可以找我本地博文库,或者私信我,我发给你
制作VOC 数据集
代码默认用的是ADE20K数据集进行训练,其实都一样,我voc习惯了,所用就教教怎么用voc哈
ADE20K数据集 格式如下,按照要求放就完了
├── data
│ ├── ade
│ │ ├── ADEChallengeData2016
│ │ │ ├── annotations
│ │ │ │ ├── training
│ │ │ │ ├── validation
│ │ │ ├── images
│ │ │ │ ├── training
│ │ │ │ ├── validation
VOC 数据集格式是
├── VOCdevkit
│ ├── VOC2012
│ │ ├── ImageSets
│ │ │ ├── Segmentation
│ │ │ │ ├── train.txt
│ │ │ │ ├── val.txt
│ │ │ │ ├── trainval.txt
│ │ │ ├── JPEGImages
│ │ │ │ ├── *.jpg #所有图片
│ │ │ ├── SegmentationClass
│ │ │ │ ├── *.jpg #所有标签图
其中: train.txt val.txt trainval.txt 只要图片名,不需要后缀和路径 如下
train val 比例自己分,这里不做讲解
JPEGImages, SegmentationClass放的是所有图片和label,切记如果2分类SegmentationClass 标签是0,1。多分类以此类推 0,1,2,……
然后将数据集放置在路径tools/data/下,可以任意,我就放这里了
代码部分修改
- configs/base/datasets/pascal_voc12.py修改
data_root 你放数据的位置
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文件夹下对应的segformer.py
修改norm_cfg SyncBN->BN
修改num_classes
7. local_config/segformer/B5文件夹下对应的在train设置的–config模型
修改norm_cfg SyncBN->BN
修改所有num_classes
修改model[‘pretrained’]
修改data[‘samples_per_gpu’]
预训练权重文件优先选择训练图片尺寸的大小
开始训练
进入到tools路径下 python train.py 即可完成模型训练
完成后测试效果
原图
测试结果
测试效果确实相当不错
测试代码需要的话私信我就行。
文章出处登录后可见!