mmsegmentation训练自定义数据集(语义分割,Upernet,Swin-T)

mmsegmentation训练自定义数据集(语义分割,Upernet,Swin-T)

  • 1. 论文复现
      • 1.1. 原文结果
      • 1.2. 复现结果
      • 1.3. Test阶段速度:
  • 2. Mmsegmentation Trick
      • 2.1. Pipeline(加载数据、数据增强)
      • 2.2. 损失函数选择
      • 2.3. 学习率策略
      • 2.4. 其他trick
  • 3. 训练FRFL相机数据集
      • 3.1. 修改配置文件:
      • 3.2. 实验参数修改
      • 3.3. 消融实验
          • 3.3.1 参数作用
          • 3.3.2. 消融实验
          • 3.3.3. 实验精度
      • 3.4.分割效果(白色或紫色为标注区域)
          • 3.4.1. 限车位和开锁
  • 4. 常见BUG

1. 论文复现

1.1. 原文结果

在这里插入图片描述

1.2. 复现结果

  • github链接:https://github.com/open-mmlab/mmsegmentation/tree/master/configs/swin

在这里插入图片描述

  • 实验结果:在ADE20k数据集上,复现结果的mIOU略微超过原文结果

1.3. Test阶段速度:

在这里插入图片描述

2. Mmsegmentation Trick

以backbone为swin-t的Upernet为例:
configs/swin/upernet_swin_tiny_patch4_window7_512x512_160k_ade20k_pretrain_224x224_1K.py

2.1. Pipeline(加载数据、数据增强)

  • 路径:/home/wenjie.yuan/park/mmsegmentation/configs/base/datasets/ade20k.py

  • pipeline中包括:

    • LoadImageFromFile:加载图像的API,当需要修改数据读取方式,加载bucket中数据,或者需要修改图片数据,可以对此API进行修改
    • LoadAnnotations:加载mask的API
    • Resize:保持原图像的比例不变,效果会更佳
    • RandomCropcat_max_ratio=0.75,代表最多类别的像素值占整个图片的比例大于- cat_max_ratio,就进行裁剪,防止背景占比太大
    • RandomFlip:随机反转
    • PhotoMetricDistortion:光度失真:调整图像的亮度,色度,对比度,饱和度,以及加入噪点实现
    • DefaultFormatBundle:各个 Dataset 类的 get_item 函数最后返回的是一个 dict。调用DataContainer 类,对原本数据的一层简单包装 /wrapper,得到一个list(dict)。在此之前,经过的数据增强部分都是单张图片(一个dict)
    • Collect:当cpu_only = False, stack = True时,将DefaultFormatBundle的list的图像部分N个[C,H,W]打包成为[N,C,H,W]

2.2. 损失函数选择

  • 路径:configs/_base_/models/upernet_swin.py
  • 主要包括FocalLossLovaszLossCrossEntropyLossDiceLoss

2.3. 学习率策略

  • configs/swin/upernet_swin_tiny_patch4_window7_512x512_160k_ade20k_pretrain_224x224_1K.py

  • 使用了AdamW,需要修改学习率,只需要修改lr即可

  • 采用多项式衰减策略:

    • min_lr:最后几个epoch的学习率
    • by_epoch:是否选择在下降到最低的时候会上升,防止后期学习率很低陷于局部最优解

2.4. 其他trick

  • 在线难样本挖掘 (Online Hard Example Mining, OHEM)
    • configs/_base_/models/upernet_swin.py中添加
 model=dict(
      decode_head=dict(
          sampler=dict(type='OHEMPixelSampler', thresh=0.7, min_kept=100000)) )

3. 训练FRFL相机数据集

  • 数据集:
    • 包含五类:bump (减速带)、stopper (限位器)、open_lock:打开地锁、close_lock:关闭地锁、crosswalk(人行道)
  • 环境:参考github

3.1. 修改配置文件:

  • tools/data文件夹下按照格式准备数据集:

  • tools/mydata/park

    • annotations
      • training
      • validation
    • images
      • training
      • validation
  • 或者在mmseg/datasets/pipelines文件夹下的loading.py中修改LoadImageFromFile类去读json文件

  • 修改configs/_base_/datasets/ade20k.pydata_root(如果第1步准备好的就不需要)

  • 修改tools/train--config(选择配置文件)和--work-dir(权重保存在哪)和--load-from(预训练权重)

  • 修改mmseg/datasets/ade.pyCLASSESPALETTE(调色板)

  • 修改configs/_base_/models文件夹下的upernet_swin.py中的num_classes为自己的类别数

  • 修改configs/swin文件夹下的upernet_swin_tiny_patch4_window7_512x512_160k_ade20k_pretrain_224x224_1K.pynum_classes samples_per_gpu

3.2. 实验参数修改

修改了的参数:

  • Resize:img_scale=(1600, 640),ratio_range=(0.75, 1.25)
  • RandomCrop:crop_size=(512, 512),cat_max_ratio=1
  • batch=32
  • lr=0.00012
  • Loss
decode_head=dict(
  loss_decode=[dict(type='LovaszLoss', per_image=False,reduction='none',loss_weight=1.0),
            dict(type='FocalLoss', loss_weight=1.0)]))
auxiliary_head=dict(
loss_decode=[dict(type='LovaszLoss', per_image=False,reduction='none',loss_weight=0.4),
            dict(type='FocalLoss', loss_weight=0.4)]))
  • samples_per_gpu:每个GPU每次处理的图片,batch = samples_per_gpu * GPUS, samples_per_gpu=4时候,显存没满,但是GPU利用率已经接近满了,再提高samples_per_gpu,降低iteration速度提高并不多
  • 将输入mask中背景当成一个类别训练:
    gt_semantic_seg[gt_semantic_seg == 0] = 6
    gt_semantic_seg[gt_semantic_seg == 255] = 6
  • demo/image_demo.py中将图片打印出:
 show_result_pyplot(out_file=output_dir) # output_dir是输出图片路径,不然不会在终端显示和保存

3.3. 消融实验

3.3.1 参数作用
参数(数据增强)参数说明实验(mIOU)
img_scale/ratio_range输入图像=img_scale*ratio_range(0.75 , 1.25)> (0.5 , 2.0)原配置 > (0.25,2.5) > (1.0, 2.0)
crop_size裁剪的尺寸(512,512)预训练模型输入大小>(416,416)
cat_max_ratio一张图像最多的类别小于cat_max_ratio,就需要裁剪1 (不经过)> 0.75
batch、lr2lr< lr , (batch=64&2lr) <(batch=32&lr)
samples_per_gpu每个GPU每次处理的图片32
loss(FocalLoss和LovaszLoss 10:1 ) > (FocalLoss和LovaszLoss 1:1 ) > (FocalLoss) > (CrossEntropyLoss(class_weight=(1,1,1,1,1,0.9))) > (CrossEntropyLoss) =(CrossEntropyLoss预训练,然后CrossEntropyLoss和LovaszLoss 1:1 finetune的方案)
3.3.2. 消融实验

在这里插入图片描述

3.3.3. 实验精度
    • Basline + Focal&Lovasz + cat_max_ratio = 1
      在这里插入图片描述

3.4.分割效果(白色或紫色为标注区域)

3.4.1. 限车位和开锁
  • 真实标签:
    在这里插入图片描述

  • 实际分割效果:
    在这里插入图片描述

3.4.2. 闭锁、限车位

  • 真实标签:
    在这里插入图片描述

  • 实际分割效果:
    在这里插入图片描述

3.4.3. 开锁、限车位、减速带

  • 真实标签:

在这里插入图片描述

  • 实际分割效果:
    在这里插入图片描述

3.4.4. 人行道

  • 真实标签:
    在这里插入图片描述

  • 实际分割效果:
    在这里插入图片描述

4. 常见BUG

  • TypeError: __init__() got an unexpected keyword argument 'embed_dim'
    • 解决办法:把代码路径加入python环境
    • export PYTHONPATH=/home/mmsegmentation

http://www.niftyadmin.cn/n/819310.html

相关文章

Java变量声明和赋值-蛙课网

你对Java变量声明和赋值熟悉吗&#xff1f;学过Java的人都知道在使用变量前要声明变量&#xff0c;然后赋值。因为变量声明是独立的代码孤岛&#xff0c;所以实际上只是一个语句&#xff0c;确切地说是一个简单的语句。下面的这些都是变量声明语句&#xff1a; int age 25; …

终于过审了!腾讯给了我20万红包封面,我得发出去。。。

前两天&#xff0c;看到腾讯给我发了一个红包封面定制的特权&#xff0c;看到消息后发现竟然有20万个&#xff0c;特别感谢腾讯对我们的认可。本来红包封面需要0.1元一个&#xff0c;自己购买的话要2万元&#xff0c;但今年&#xff0c;腾讯给少数优质公众号特权&#xff0c;刚…

探究网页技术中的Session和Cookies-蛙课网

我们在浏览网页时&#xff0c;会发现很多页面都是需要登录的&#xff0c;不登录的话有很多功能实现不了。但是我们知道HTTP协议是无状态协议&#xff0c;那么我们在网站的各个网页间跳转时&#xff0c;为什么不需要重新登录账号呢&#xff1f;这就是Session和Cookies的功劳了&a…

PifPaf: Composite Fields for Human Pose Estimation

发表于arxiv, 一个bottom-up的方法, 用来预测单张图片中多个人体的关节点位置, 已开源 arxiv地址: https://arxiv.org/abs/1903.06593 github地址: https://github.com/vita-epfl/openpifpaf 2021年新出的3D姿态估计paper&#xff1a;https://arxiv.org/pdf/2103.02440.pdf git…

2022春节红包封面大全!手慢无

虎年春节一大批红包封面来袭&#xff0c;精美图片等你来领。数码宝贝&#xff0c;王嘉儿&#xff0c;张艺兴&#xff0c;娜扎&#xff0c;赵丽颖&#xff0c;陈小春&#xff0c;应采儿 给您拜年啦&#xff01;&#xff01;&#xff01;【数学建模】公众号回复【封面】即可免费领…

年终奖,20 万!

大家好&#xff0c;我是微笑哥。最近&#xff0c;微信给我发了年终奖&#xff0c;数量是 200000 个微信红包封面。大家可能不知道&#xff0c;红包封面是需要付费的&#xff0c;市场价是1元一个&#xff0c;腾讯给给我们送了20万个&#xff0c;相当于发了20万年终奖。没有犹豫&…

浅谈事件驱动机制-蛙课网

事件驱动机制是指在持续事务管理过程中&#xff0c;进行决策的一种策略&#xff0c;即跟随当前时间点上出现的事件&#xff0c;调动可用资源&#xff0c;执行相关任务&#xff0c;使不断出现的问题得以解决&#xff0c;防止事务堆积。在计算机编程、公共关系、经济活动等领域均…

灾难性遗忘/增量学习的研究现状

灾难性遗忘/增量学习的研究现状一. 灾难性遗忘(catastrophic forgetting)为什么会发生&#xff1f;二. 增量学习的概念2.1. 研究领域2.1. 增量学习的上下限三. 增量学习的方法3.1. 基于正则化的增量学习&#xff08;基于Loss&#xff09; --《Learning without Forgetting》 (E…