首先确保在服务器上正常安装了MMSeg,注意安装完还需建立与自己的数据集之间的软连接,官方安装教程如下:
https://github.com/open-mmlab/mmsegmentation/blob/master/docs/get_started.md#installation

pip install mmcv-full -f https://download.openmmlab.com/mmcv/dist/cu101/torch1.6.0/index.html
git clone https://github.com/open-mmlab/mmsegmentation.git
cd mmsegmentation
pip install -e .  # or "python setup.py develop"mkdir data
ln -s $DATA_ROOT data

由于工作需要,需要在MMSeg上训练自己的数据集,而之前只在上面训过Cityscapes的数据集,两种数据集质检的组织形式不同,需要自己重写配置文件,我的数据原始格式为一对img和label,两者文件名相同,后缀img.tif,label.png,如图:

原始图像:

标签:

参考官方文档的教程组织数据集:https://github.com/open-mmlab/mmsegmentation/blob/master/docs/tutorials/customize_datasets.md

首先在/mmsegmentation-master/mmseg/datasets路径下新建一个mydataset.py文件

@DATASETS.register_module()
class mydata(CustomDataset):CLASSES = ('background', 'plant', 'plantsoil', 'grass', 'building', 'railway', 'structure', 'humanland', 'baresoil', 'water')PALETTE = [[0,0,0], [244, 35, 232], [70, 70, 70], [102, 102, 156],[190, 153, 153], [153, 153, 153], [250, 170, 30], [220, 220, 0],[107, 142, 35]]def __init__(self, **kwargs):super(mydata, self).__init__(img_suffix='.tif',seg_map_suffix='.png',reduce_zero_label=False,**kwargs)assert osp.exists(self.img_dir)

写法参考该文件夹下其他数据集的py文件,需要修改的地方为CLASSES和PALETTE,前者为你数据集中每一类的名称,后者为类别对应的颜色,注意不要漏掉背景值'background'。然后根据自己数据集的后缀更改img_suffixseg_map_suffix,改好之后保存

同时还需要在同一文件夹下的__init__.py文件中添加刚刚新建的数据集

from .stare import STAREDataset
from .voc import PascalVOCDataset
from .mydataset import mydata__all__ = ['CustomDataset', 'Test_pathDataset','build_dataloader', 'ConcatDataset', 'RepeatDataset','DATASETS', 'build_dataset', 'PIPELINES', 'CityscapesDataset','PascalVOCDataset', 'ADE20KDataset', 'PascalContextDataset','PascalContextDataset59', 'ChaseDB1Dataset', 'DRIVEDataset', 'HRFDataset','STAREDataset', 'DarkZurichDataset', 'NightDrivingDataset','COCOStuffDataset', 'mydata'
]

/mmsegmentation-master/mmseg/core/evaluation下的class_names.py文件也需要进行更改:

import mmcvdef mydata_classes():"""shengteng class names for external use."""return ['background', 'plant', 'plantsoil', 'grass', 'building', 'railway', 'structure', 'humanland', 'baresoil', 'water']def mydata_palette():return [[0,0,0], [244, 35, 232], [70, 70, 70], [102, 102, 156],[190, 153, 153], [153, 153, 153], [250, 170, 30], [220, 220, 0],[107, 142, 35]]

至此数据集更改完成,还需要更改config文件下的模型文件:

norm_cfg = dict(type='SyncBN', requires_grad=True)
backbone_norm_cfg = dict(type='LN', requires_grad=True)
model = dict(type='EncoderDecoder',pretrained='pretrain/swin_base_upernet_224x224_1K.pth',    #从官网下载与训练模型backbone=dict(type='SwinTransformer',pretrain_img_size=224,embed_dims=128,patch_size=4,window_size=7,mlp_ratio=4,depths=[2, 2, 18, 2],num_heads=[4, 8, 16, 32],strides=(4, 2, 2, 2),out_indices=(0, 1, 2, 3),qkv_bias=True,qk_scale=None,patch_norm=True,drop_rate=0.0,attn_drop_rate=0.0,drop_path_rate=0.3,use_abs_pos_embed=False,act_cfg=dict(type='GELU'),norm_cfg=dict(type='LN', requires_grad=True)),decode_head=dict(type='UPerHead',in_channels=[128, 256, 512, 1024],in_index=[0, 1, 2, 3],pool_scales=(1, 2, 3, 6),channels=512,dropout_ratio=0.1,num_classes=9,     #安装自己数据集的类别数更改norm_cfg=dict(type='SyncBN', requires_grad=True),align_corners=False,loss_decode=dict(type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0)),

修改batch和数据集路径,train val test三部分都要更改:

data = dict(samples_per_gpu=8,                #batch sizeworkers_per_gpu=12,               #每张GPU分配的CPU核心数train=dict( type='mydata',                #自定义的数据集名称data_root='data/xxx',         #数据根目录img_dir='img/',               #原始图像路径ann_dir='label/',             #标签路径pipeline=[dict(type='LoadImageFromFile'),dict(type='LoadAnnotations', reduce_zero_label=True),dict(type='Resize', img_scale=(512, 512), ratio_range=(1.0, 1.0)),dict(type='RandomCrop', crop_size=(512, 512), cat_max_ratio=0.75),dict(type='RandomFlip', prob=0.5),dict(type='PhotoMetricDistortion'),dict(type='Normalize',mean=[123.675, 116.28, 103.53],std=[58.395, 57.12, 57.375],to_rgb=True),dict(type='Pad', size=(512, 512), pad_val=0, seg_pad_val=255),dict(type='DefaultFormatBundle'),dict(type='Collect', keys=['img', 'gt_semantic_seg'])])

修改完成后开始在自己的数据集上训练MMSeg:

python ./tools/train.py ./config/swin/upernet_swin_base_patch4_window7_512x512.py

训练的log和权重文件会保存在workdir文件下:

多GPU训练:

bash ./tools/dist_train.sh config.py 2   #config为你的配置文件,2为使用的GPU的数量

注意!

1、mmseg所使用的数据集标签是从0开始的,即(0,1,2...n),n为类别数;

2、首次运行mmseg工程之前,须先运行,将工作环境切换至当前路径

python setup.py develop

MMSegmentation训练自己的分割数据集相关推荐

  1. 使用nnUNet训练肾脏肿瘤分割数据集KiTS19(仅用于记录)

    按照nnUNet官方下载配置好 准备好KiTS19数据,任务id设为40 1. 运行nnunet/dataset_conversion下的Task040_KiTS.py, 需要对Json的写入文件名进 ...

  2. 超详细!手把手带你轻松用 MMSegmentation 跑语义分割数据集

    在带你轻松掌握 MMSegmentation 整体构建流程一文中,我们带大家认识了 MMSegmentation 的整体框架,分享了 MMSegmentation 中已经复现的主流语义分割模型. Op ...

  3. mmsegmentation 训练自制数据集全过程

    1.简介 mmsegmentation是目前比较全面和好用的用于分割模型的平台,原始的github链接 https://github.com/open-mmlab/mmsegmentation 2.G ...

  4. mmsegmentation 训练自己的数据集

    open-mmlab有许多非常实用的框架,其中目标检测的话mmdetection确实很实用.但语义分割的话当属mmsegmentation,这篇博客就是介绍如何用mmsegmentation训练自己的 ...

  5. pascal行人voc_在一个很小的Pascal VOC数据集上训练一个实例分割模型

    只使用1349张图像训练Mask-RCNN,有代码. 代码:https://github.com/kayoyin/tiny-inst-segmentation 介绍 计算机视觉的进步带来了许多有前途的 ...

  6. 快速制作自己的VOC语义分割数据集

    语义分割数据集制作与转换方法 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 第一章 基于PS的语义分割标注 第二章 构建VOC语义分割数据集 文章目录 语义分割数据集制作与转换方法 ...

  7. 无人驾驶常用数据集---图像语义分割数据集--Cityscapes数据集的解读(for 小白)

    ** 无人驾驶常用数据集–图像语义分割数据集–Cityscapes数据集的解读(for 小白) ** 一.什么是Cityscapes数据集? Cityscapes是关于城市街道场景的语义理解图片数据集 ...

  8. 【知识星球】几个人像分割数据集简介和下载

    欢迎大家来到<知识星球>专栏,今天给大家介绍一下人像分割相关的几个数据集,并提供下载. 作者&编辑 | 言有三 有三AI知识星球的"数据集"板块中已经提供了非常 ...

  9. 4种语义分割数据集Cityscapes上SOTA方法总结

    本文分享自华为云社区<语义分割数据集Cityscapes上SOTA方法总结>,原文作者:fdafad. 1 Cityscapes数据集介绍 Cityscapes评测数据集即城市景观数据集, ...

最新文章

  1. foxmail 怎么修改存储路径_FoxMail 7.2的邮件存储目录修改
  2. 为什么不建议你用a.equals(b)判断对象相等
  3. mysql5.7复制集_mysql--replication复制集典型配置
  4. OpenCV 对图片亮度增强或减弱
  5. php调用dll函数,[转载]matlab调用DLL中的函数
  6. VC++图片框控件静态和动态加载位图
  7. python关键字是什么颜色,python – Matplotlib:如果使用关键字sym,则使用Boxplot异常值颜色更改...
  8. 关于iOS APP 需要支持ipv6-only 开发者需要做的事情
  9. CRM Fiori应用里My Opportunity - My Appointment中My的准确含义
  10. 在当今移动互联网时代_谁在提供当今最好的电子邮件体验?
  11. 动手学PaddlePaddle(1):线性回归
  12. s4800扫描电镜的CSS3_Hitachi S-4800型场发射扫描电子显微镜+能谱
  13. 这 5 条 IntelliJ IDEA 调试技巧太强了!
  14. theano 编程细节
  15. 2008新建域时失败问题
  16. Linux之mmap
  17. 肝了一夜,用90行代码打造最强PDF转换器,word、PPT、excel、markdown、html一键转换...
  18. 一个商品SKU是怎么生成的 1
  19. java导出功能(多级表头,复杂表头)
  20. traceroute命令(unix)/tracert命令(windows)

热门文章

  1. 微信小程序完整脚本源码-20180624版
  2. android 6.0 tv,最强安卓机顶盒Shield TV升级安卓6.0系统,还支持了Vulkan
  3. 登录http://10.qq.com,可以查到自己qq的注册时间等信息
  4. Android自定义View之奖券效果
  5. ubuntu 1604升级到ubuntu 1804无法忽视的细节问题(亲测有效)
  6. mmdvm 接收_Yaesu FT-7800 + MMDVM 中继版解决方案
  7. ThinkPad系列 win10系统没有声音问题完美解决
  8. 大脚怪NFT登场!Mythical Beings第四季Sasquatch珍藏
  9. 【游戏开发高阶】从零到一教你Unity使用ToLua实现热更新(含Demo工程 | LuaFramework | 增量 | HotUpdate)
  10. Ubuntu 使用 Paddle