手把手教你使用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/下,可以任意,我就放这里了

代码部分修改

  1. configs/base/datasets/pascal_voc12.py修改
    data_root 你放数据的位置

在这里插入图片描述
2 mmseg/datasets/voc.py修改
CLASSES PALETTE
在这里插入图片描述
多分类一样,自己改

  1. mmseg/models/decode_heads/segformer_head.py修改
    第59行 SyncBN->BN
    在这里插入图片描述

  2. 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 即可完成模型训练

在这里插入图片描述

完成后测试效果
原图
在这里插入图片描述

测试结果
在这里插入图片描述
测试效果确实相当不错

测试代码需要的话私信我就行。

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
扎眼的阳光的头像扎眼的阳光普通用户
上一篇 2023年2月25日 下午5:45
下一篇 2023年2月25日 下午5:46

相关推荐