使用mmsegmentation训练自己的模型

MMSegmentation系列之训练与推理自己的数据集(三) 无 阅读详情

1. 学习前言

mmsegmentation是一个基于ptorch的语义分割代码库,其中复现了众多先进的分割模型。由于代码风格统一,功能齐全,我打算用mmseg来跑对比实验。

本文使用mmseg中的segmenter模型来运行自己的数据集。自定义的数据集包含背景有8类(7类目标+1类背景),RGB图,图像大小不定,按照ade20k的数据样式排列。

全文只涉及跑segmenter的最小单元,仅适合入门。我理解错误的地方,还请大家能多多指正。

PS:我跑出来的效果并不好,这大概就是生搬硬套的代价吧

2. 数据准备

首先要模仿ade20k存放数据的风格来规划自己的数据集。
ade20k中图像是jpg格式,ground truth是png格式。存放结构如下图所示, ade20k和ADEChallengeData2016这些名字可以改成自己数据集的名,比如我的就叫tiger和tiger_roi

ade20k/
	|ADEChallengeData2016/
	|				|annotations/				
	|				|		|training/							
	|				|		|validation/						
	|				|images/										
	|				|		|training/					
	|   		 	| 	    |validation/      

自定义数据:

tiger/
	|tiger_roi/
	|		|annotations/				
	|		|		|training/							
	|		|		|validation/						
	|		|images/										
	|		|		|training/					
	|    	| 	    |validation/      

3. 环境准备

需要安装mmcv和mmsegmentation
github上官方文档有安装方法,我个人实际操作待更新

4. 数据丢进mmsegmentation的文件夹里

来到mmsegmentation文件中,新建一个空的文件夹,命名为data。然后把刚刚自定义的数据集拖进来。

5. 修改config文件

想让程序跑起来,只需要一行命令

cd mmsegmentation
python tools/train.py 配置文件

所以我们现在来看看这个配置文件是什么
在这里插入图片描述

对于segmenter模型来说,他的配置文件在mmsegmentation/configs/segmenter/,就是这几个红框圈中py文件,根据需求使用其一就可以。我认为配置文件其实就是设定参数(这几个区别没有仔细研究)

那我们打开第一个看看(segmenter_vit-b_mask_8x1_512x512_160k_ade20k.py)

_base_ = [
    '../_base_/models/segmenter_vit-b16_mask.py',
    '../_base_/datasets/ade20k.py', '../_base_/default_runtime.py',
    '../_base_/schedules/schedule_160k.py'
]
optimizer = dict(lr=0.001, weight_decay=0.0)

img_norm_cfg = dict(
    mean=[127.5, 127.5, 127.5], std=[127.5, 127.5, 127.5], to_rgb=True)
crop_size = (512, 512)
train_pipeline = [
    dict(type='LoadImageFromFile'),
    dict(type='LoadAnnotations', reduce_zero_label=True),
    dict(type='Resize', img_scale=(2048, 512), ratio_range=(0.5, 2.0)),
    dict(type='RandomCrop', crop_size=crop_size, cat_max_ratio=0.75),
    dict(type='RandomFlip', prob=0.5),
    dict(type='PhotoMetricDistortion'),
    dict(type='Normalize', **img_norm_cfg),
    dict(type='Pad', size=crop_size, pad_val=0, seg_pad_val=255),
    dict(type='DefaultFormatBundle'),
    dict(type='Collect', keys=['img', 'gt_semantic_seg'])
]
test_pipeline = [
    dict(type='LoadImageFromFile'),
    dict(
        type='MultiScaleFlipAug',
        img_scale=(2048, 512),
        # img_ratios=[0.5, 0.75, 1.0, 1.25, 1.5, 1.75],
        flip=False,
        transforms=[
            dict(type='Resize', keep_ratio=True),
            dict(type='RandomFlip'),
            dict(type='Normalize', **img_norm_cfg),
            dict(type='ImageToTensor', keys=['img']),
            dict(type='Collect', keys=['img'])
        ])
]
data = dict(
    # num_gpus: 8 -> batch_size: 8
    samples_per_gpu=1,
    train=dict(pipeline=train_pipeline),
    val=dict(pipeline=test_pipeline),
    test=dict(pipeline=test_pipeline))

看不懂,没关系!这个里面用的是ade20k数据集,我自己的数据集只是和ade20k的类别和路径不同罢了。所以只要找到哪里是数据路径,哪里是类别数,这个实验就完成了。(bushi

这个文件中的

_base_ = [
    '../_base_/models/segmenter_vit-b16_mask.py',
    '../_base_/datasets/ade20k.py', '../_base_/default_runtime.py',
    '../_base_/schedules/schedule_160k.py'
]

代表这个配置文件也是继承自以上四个py文件里,以我多年copy代码的经验,我要改的地方就在…/base/datasets/ade20k.py。

那我们去…/base/datasets/ade20k.py看看

# dataset settings
dataset_type = 'ADE20KDataset'
data_root = 'data/ade/ADEChallengeData2016'
img_norm_cfg = dict(
    mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True)
crop_size = (512, 512)
train_pipeline = [
    dict(type='LoadImageFromFile'),
    dict(type='LoadAnnotations', reduce_zero_label=True),
    dict(type='Resize', img_scale=(2048, 512), ratio_range=(0.5, 2.0)),
    dict(type='RandomCrop', crop_size=crop_size, cat_max_ratio=0.75),
    dict(type='RandomFlip', prob=0.5),
    dict(type='PhotoMetricDistortion'),
    dict(type='Normalize', **img_norm_cfg),
    dict(type='Pad', size=crop_size, pad_val=0, seg_pad_val=255),
    dict(type='DefaultFormatBundle'),
    dict(type='Collect', keys=['img', 'gt_semantic_seg']),
]
test_pipeline = [
    dict(type='LoadImageFromFile'),
    dict(
        type='MultiScaleFlipAug',
        img_scale=(2048, 512),
        # img_ratios=[0.5, 0.75, 1.0, 1.25, 1.5, 1.75],
        flip=False,
        transforms=[
            dict(type='Resize', keep_ratio=True),
            dict(type='RandomFlip'),
            dict(type='Normalize', **img_norm_cfg),
            dict(type='ImageToTensor', keys=['img']),
            dict(type='Collect', keys=['img']),
        ])
]
data = dict(
    samples_per_gpu=4,
    workers_per_gpu=4,
    train=dict(
        type=dataset_type,
        data_root=data_root,
        img_dir='images/training',
        ann_dir='annotations/training',
        pipeline=train_pipeline),
    val=dict(
        type=dataset_type,
        data_root=data_root,
        img_dir='images/validation',
        ann_dir='annotations/validation',
        pipeline=test_pipeline),
    test=dict(
        type=dataset_type,
        data_root=data_root,
        img_dir='images/validation',
        ann_dir='annotations/validation',
        pipeline=test_pipeline))

其中data_root = 'data/ade/ADEChallengeData2016’数据路径,但是没找到类别数的定义,没关系,我们先把这个改成data_root = ‘data/tiger/tiger_roi’。(或者可以新建一个配置文件,但为了教程简洁,就不这么干了)

类别数的定义在…/base/models/segmenter_vit-b16_mask.py
和刚刚的方法类似,找到num_classes=150,改成自定义数据集的类别(ade20k数据集中有150类目标+背景,Ground truth中0代表背景,1-150代表不同是物体。所以我也应该在这里设定目标类别,也就是num_classes=7。但是这样训练下来效果特别差,而且推理过程得到的结果0也并非代表实际的背景,希望大佬教教我这里)

到现在,配置文件就算是改完啦

6. 训练

cd mmsegmentation
python tools/train.py segmenter_vit-b_mask_8x1_512x512_160k_ade20k.py --work-dir [放日志文件和训练结果的文件夹]  --seed 0

7. 推理

官方demo

8. 学习后言

这改配置,多是一件美事。

【mmSegmentation指南合集】训练和测试:1)了解配置文件 例如在DeepLabv3的基础上进行了一些修改,我们可以先通过指定_base_ = …/deeplabv3/deeplabv3_r50-d8_4xb2-40k_cityscapes-512x1024.py 继承基本的 DeepLabV3 结构,然后在配置文件中修改必要的字段。建议以以下结构命名配置文件:算法名-组件名-训练设置-训练数据集名以PSPNet为例:我们在基本配置文件的基础上构建新的配置文件,我们先通过指定_base_的方式,继承原有的配置。然后新设置的配置信息在下面。 阅读详情

相关推荐

mmsegmentation 训练自制数据集全过程

mmsegmentation训练自己的数据集,环境配置,数据集制作,训练,预测全过程

weixin_43624833的博客 1万+

mmsegmentation 训练自己的数据集

open-mmlab有许多非常实用的框架,其中目标检测的话mmdetection确实很实用。但语义分割的话当属mmsegmentation,这篇博客就是介绍如何用mmsegmentation训练自己的数据集。 mmdetection的环境mmsegmentation也可以用,有mmdetection环境的话就可以不用重新搭建了 给个代码链接mmsegmentation mmsegmentation目录下新建一个data用于存放自己的数据集 6.自己的任务可能类别与VOC类别不一样,需要对class进行修

hasque2019的博客 1万+

二、MMsegmentation 配置教程+训练教程+模型测试( 服务器)

时间: 2022年4月8日 内容:训练 MM Segmentation 中的deeplabv3 深度神经网络 如果想要系统的学习,可以参考官方文档: https://mmsegmentation.readthedocs.io/en/latest/get_started.html#installation 但是我理解力有限感觉不太详细。 基础的配置和介绍可以看我的上一篇博客,这篇讲一下训练。 1 试错 首先我也是在网上参考的教程: https://zhuanlan.zhihu.com/p/3930705

qq_43507388的博客 2万+

Pytorch实战7-mmsegmentation训练

自定义数据集在mmsegmentation训练

Evan_qin_yi_quan的博客 1912

【mmSegmentation指南合集】训练和测试:2)使用预训练模型推理

MMSegmentation为用户提供了数个接口,以便轻松使用预训练的模型进行推理,官方提供了最方便的方式MMSegInferencer来使用模型,仅需3行代码就可以获得图像的分割掩膜。,比如 maskformer 的一个模型名称是 maskformer_r50-d32_8xb2-160k_ade20k-512x512,np.ndarray:通道为 RGB 的绘制图像。使用以下语句可以轻易的得到所有模型的名称。nn.Module:构建好的分割器。在图像上可视化分割结果。使用分割器推理图像。

weixin_43571113的博客 1361

pytorch 24 把MMSegmentation的作为pytorch的语义分割模型库使用(已实现模型的训练与部署)

MMSegmentation是商汤科技推出的语义分割库套件,属于 OpenMMLab 项目的一部分,里面有很多的语义分割模型。为什么博主会有这样的骚操作想法呢?原因有二,第一点:MMSegmentation的封装太完善了,作为一个依赖于pytorch的模型库在训练上却不一样,用户的自由发挥空间很小(比如自定义loss、自定义学习率调度器、自定义数据加载器,啥都要重新学),这让博主很难接受;第二点:github上给出了的其他pytorch模型库太拉胯了,支持的模型数量有限,大多只支持2020年以前的模型,这对

a486259的博客 5191

MMSegmentation 模型训练与测试全指南

MMSegmentation 模型训练与测试全指南 【免费下载链接】mmsegmentation OpenMMLab Semantic Segmentation Toolbox and Benchmark. 项目地址: https...

gitblog_00036的博客 480

开源遥感语义分割工具箱mmsegmentation基于Lovedata数据集训练模型

开源遥感语义分割工具箱mmsegmentation基于Lovedata数据集训练模型

yilvyangguang520的博客 498

使用 MMSegmentation 构建训练手写字迹分割模型

MMSegmentation 是一个用于语义分割的开源工具箱,它基于 PyTorch 实现。它是 OpenMMLab 项目的一部分。语义分割是将图像分割成属于同一对象类别的部分的任务,它是一个像素级别的预测形式,旨在为图像中的每个像素分配一个类别标签。MMSegmentation 提供了一个统一的接口以及大量的预训练模型和配置文件,为研究者和开发者在各种标准数据集上进行语义分割实验提供便利。用户可以基于这些模型和配置文件来进行自己的训练和测试,或者对它们进行定制化的修改以适应特定需求。

qq_51279133的博客 1458

高等数学第五章---定积分(§5.3定积分的计算方法)

这篇博客详细讲解定积分的计算方法,包括直接法、凑微分法、变量代换法和分部积分法。通过典型例题演示如何运用这些技巧计算定积分,特别强调换元必换限的原则和奇偶函数的简化处理。内容涵盖代数变形、三角代换、分段函数积分等常见题型,并附有详细的解题步骤和常见错误分析。适合微积分学习者系统掌握定积分计算技巧,提升解题效率。文中还包含积分等式证明和变限积分函数求导等进阶内容,帮助读者深入理解定积分的应用。

2302_77045867的博客 4333

华为BEM战略解码体系完整版(85页PPT)(文末有下载方式)

在部门层面,战略解码的核心是将公司战略逐层分解到部门,确保部门目标能够有效支撑公司战略。战略解码的关键原则包括:对公司战略和业务目标的支撑、指标选取考虑部门责任特色、对公司业务流程的支撑、战略解码,华为公司实现了从战略制定到执行的闭环管理,确保了战略目标能够通过可衡量的。战略解码,华为公司实现了从战略制定到执行的闭环管理,确保了战略目标能够通过可衡量的。战略解码体系的核心目标是将公司战略逐层分解,确保战略目标能够通过可衡量的。在公司层面,战略解码的第一步是战略澄清,明确公司的使命、愿景、战略目标及。

AI_data_cloud的博客 2400

【mmsegmentation模型训练deeplabv3】自定义数据集加载和训练|rle编码转mmsegmentation|coco转mmsegmentation

【mmsegmentation模型训练deeplabv3】自定义数据集加载和训练|rle编码转mmsegmentation|coco转mmsegmentation

m0_61139217的博客 3356

Windows MCP 安装教程:让 AI 代理与 Windows 系统无缝交互

通过以上步骤,你已经成功安装和配置了 Windows MCP 服务。现在你的 Cursor 编辑器可以通过 MCP 协议与 Windows 系统进行深度交互,AI 代理能够:启动和控制应用程序执行系统命令自动化 UI 操作获取系统状态信息这为 AI 辅助开发和工作流程自动化提供了强大的基础。如果你在使用过程中遇到任何问题,欢迎在评论区讨论或查看项目的官方文档。

chenchihwen的专栏 3350

MMSegmentation系列之模型训练与推理(二)

1、 模型训练 MMSegmentation实现了分布式训练和非分布式训练,分别使用MMDistributedDataParallel和MMDataParallel。所有输出(日志文件和检查点)将被保存到配置文件中的work_dir指定的工作目录中。 默认情况下,我们在一些迭代之后对验证集上的模型进行评估,您可以通过在训练配置中添加interval参数来更改评估间隔。 evaluation = dict(interval=4000) # This evaluate the model per 4000 i

qq_41627642的博客 4066

数学建模传染病模型_【数学建模】之传染病模型

点击【拇指笔记】,关注我的公众号。SE模型缺点:没有考虑接触到的人中还有一部分病人,所以所有人并不会全部被感染。建立模型:已感染人数(病人)每个病人每天有效接触(足以使人致病)人数为根据(1)(2)可以建立模型:等式两边同时除以\Delta t由导数定义有同时,取\Delta t = 1天由(1)(5)两式可得最终的模型:Logistic模型缺点:区分已感染者(病人)和未感染者(健康人)...

weixin_39590453的博客 2227

如何理解S参数的三大特性

提到S参数的时候经常会涉及一些概念,如无源性、因果性、互易性等,本文逐一介绍这些特性的概念、成因以及判断方式。

一只豌豆象的博客 4497

MMSegmentation 预训练模型推理指南:从入门到实践

MMSegmentation 预训练模型推理指南:从入门到实践 【免费下载链接】mmsegmentation OpenMMLab Semantic Segmentation Toolbox and Benchmark. 项目地址:...

gitblog_01137的博客 614

基于IEEE39节点系统的风力发电机组并网改造与稳定性研究

本文研究了基于IEEE39节点系统的风力发电机组并网改造与稳定性问题。首先将系统工作频率从60Hz转换为50Hz,并对同步发电机、变压器、线路和负荷参数进行相应调整。随后将30、32、34、37号节点的同步发电机替换为不同容量的永磁同步发电机(PMSG)和双馈感应发电机(DFIG),详细建立了两种风电机组的数学模型和控制策略。通过Simulink仿真验证,改造后的系统能够稳定运行并满足并网要求。研究成果为大规模风电并网系统仿真提供了参考,对提高电力系统可再生能源消纳能力具有重要意义。

huanghm88的专栏 109

【MMSegmentation】使用现有模型进行训练和测试总结(目前是VOC数据集)

配置自有voc数据集在mmsegmentation训练以deeplabv3plus为例,其中文件名包括了所需要的数据集格式等信息目前仅是使用现成模型进行训练并查看效果同时也是,刚接触使用mmsegmentation工具,或多或少可能存在一些问题,欢迎交流讨论。同时,此篇文章更多是作为个人学习的记录存在,总所周知,后续会忘。

WithuBreath_的博客 1412

【ARM Trace32(劳特巴赫) 高级篇 20 -- SNOOPer 使用介绍】

在 Lauterbach TRACE32 调试系统中,Snooper是一种特殊的监视工具,它能够在不中断处理器执行的情况下监视和记录特定内存地址的数据变化。这对于系统级调试、性能分析、数据流监视以及实时系统的问题追踪特别有用,尤其是在无法使用中断的情况下。当你设置了一个或多个Snooper时,TRACE32 硬件将不断地监视指定的内存地址,一旦发生了读写操作,就会将相关信息记录下来。这样你就可以看到某个地址的数据是什么时候以及如何被修改的,而不会影响目标系统的运行。

CodingCos的博客 2764

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

使用cityscapes数据集在mmsegmentation框架下训练语义分割模型

mmseg训练语义分割模型全过程记录

m0_46201134的博客 4223

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Windows11+PyCharm利用MMSegmentation(Unet模型)训练自己的数据集保姆级教程

系统版本:Windows 11运行软件:PyCharm。

AIcurator的博客 1954

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

MMSegmentation学习记录(二)---使用预训练模型对图像进行分割预测

接上文,配置好环境后,就开始体验一下分割demo吧!官方网址也有给出demo教程。注:这里的demo指的是使用预训练好的模型对指定图像进行分割,并可视化分割结果。我会一步一步根据提供的image_demo.py演示如何在服务器上运行jupyter(也可以直接在python命令行输入)指令运行。

weixin_47251159的博客 1094

mmdetection和mmsegmentation无法加载预训练模型的问题

Openmmlab无法加载预训练模型的问题 这两天在调试mmsegmentation和mmdetection,可能是因为自己的原因,预训练模型死活加载不了预训练的模型,无法正常的索引到预训练模型的地址,最后通过降低版本的方式成功地加载了预训练模型并跑了起来,具体的流程如下: 解决过程 安装pytorch和torchvision 我是30系列的显卡,所以需要的cuda版本需要是11以上。 conda install pytorch==1.9.0 torchvision==0.10.0 cudatoolki

dejahu的博客 4895
上一篇: Functional Transforms 函数形式的变换
下一篇: torch数组计算出现NAN
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值