MMSegmentation训练自己的语义分割数据集

news2024/11/29 5:43:59

全流程,训练语义分割数据集

  • 数据标注
    • json转mask
  • 运行源码MMSegmentation
    • 模型选择运行部分

数据标注

# 安装
pip install labelme
# 启动labelme
labelme

在这里插入图片描述
然后 ctrl +N 开启多边形标注即可,命名类为person
在这里插入图片描述
之后会保存到同目录下json文件:
在这里插入图片描述

json转mask

下载labelme代码里的转换代码:
在这里插入图片描述
labels里存储的如下形式
在这里插入图片描述
运行指令

python labelme2voc.py ./img output labels.txt

生成如下
在这里插入图片描述

运行源码MMSegmentation

mmseg/datasets里生成一个my_data.py文件,这个文件存储的是类别信息和seg颜色
需要多加一个backbone

# Copyright (c) OpenMMLab. All rights reserved.
from mmseg.registry import DATASETS
from .basesegdataset import BaseSegDataset


@DATASETS.register_module()
class mydata(BaseSegDataset):
    """Cityscapes dataset.

    The ``img_suffix`` is fixed to '_leftImg8bit.png' and ``seg_map_suffix`` is
    fixed to '_gtFine_labelTrainIds.png' for Cityscapes dataset.
    """
    METAINFO = dict(
        classes=('backbone','person'),
        palette=[[128, 64, 128], [244, 35, 232]])

    def __init__(self,
                 img_suffix='.jpg',
                 seg_map_suffix='.png',
                 reduce_zero_label=True,
                 **kwargs) -> None:
        super().__init__(
            img_suffix=img_suffix,
            seg_map_suffix=seg_map_suffix,
            reduce_zero_label=reduce_zero_label,
            **kwargs)

mmseg/utils/class_names.py文件里添加:不加backbone也不报错,这里没加,最好加上另外,seg颜色要与上面文件一致

def mydata_classes():
    """shengteng class names for external use."""
    return [
        'person'
    ]

def mydata_palette():
    return [[244, 35, 232]]

mmseg/datasets/init.py中加引入,

from .my_data import mydata

在这里插入图片描述

configs/base/datasets文件下新建一个my_data.py文件:
这个就是一个读取数据的文件了,包含数据地址、type和加载增加等方式

# dataset settings
dataset_type = 'mydata' #改
data_root = 'data/my_dataset'  #改
crop_size = (512, 512)
train_pipeline = [
    dict(type='LoadImageFromFile'),
    dict(type='LoadAnnotations', reduce_zero_label=True),
    dict(
        type='RandomResize',
        scale=(2048, 512),
        ratio_range=(0.5, 2.0),
        keep_ratio=True),
    dict(type='RandomCrop', crop_size=crop_size, cat_max_ratio=0.75),
    dict(type='RandomFlip', prob=0.5),
    dict(type='PhotoMetricDistortion'),
    dict(type='PackSegInputs')
]
test_pipeline = [
    dict(type='LoadImageFromFile'),
    dict(type='Resize', scale=(2048, 512), keep_ratio=True),
    # add loading annotation after ``Resize`` because ground truth
    # does not need to do resize data transform
    dict(type='LoadAnnotations', reduce_zero_label=True),
    dict(type='PackSegInputs')
]
img_ratios = [0.5, 0.75, 1.0, 1.25, 1.5, 1.75]
tta_pipeline = [
    dict(type='LoadImageFromFile', backend_args=None),
    dict(
        type='TestTimeAug',
        transforms=[
            [
                dict(type='Resize', scale_factor=r, keep_ratio=True)
                for r in img_ratios
            ],
            [
                dict(type='RandomFlip', prob=0., direction='horizontal'),
                dict(type='RandomFlip', prob=1., direction='horizontal')
            ], [dict(type='LoadAnnotations')], [dict(type='PackSegInputs')]
        ])
]
train_dataloader = dict(
    batch_size=4,
    num_workers=4,
    persistent_workers=True,
    sampler=dict(type='InfiniteSampler', shuffle=True),
    dataset=dict(
        type=dataset_type,
        data_root=data_root,
        data_prefix=dict(
            img_path='images/training', seg_map_path='annotations/training'),  #改
        pipeline=train_pipeline))
val_dataloader = dict(
    batch_size=1,
    num_workers=4,
    persistent_workers=True,
    sampler=dict(type='DefaultSampler', shuffle=False),
    dataset=dict(
        type=dataset_type,
        data_root=data_root,
        data_prefix=dict(
            img_path='images/validation', #改
            seg_map_path='annotations/validation'), #改
        pipeline=test_pipeline))
test_dataloader = val_dataloader

val_evaluator = dict(type='IoUMetric', iou_metrics=['mIoU'])
test_evaluator = val_evaluator

模型选择运行部分

我选择的是configs/deeplabv3/deeplabv3_r50-d8_4xb2-40k_cityscapes-512x1024.py,主要是修改继承的数据部分
在这里插入图片描述

运行
每次修改配置文件,最好是运行一遍python setup.py install

python setup.py install
python ./tools/train.py ./configs/deeplabv3/deeplabv3_r50-d8_4xb2-40k_cityscapes-512x1024.py

![在这里插入图片描述](https://img-blog.csdnimg.cn/2ec531af24a94c6b982f55bffe7024bf.png)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/951843.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ioctl、printk及多个此设备支持

一、ioctl操作实现 ioctl(Input/Output Control)是一个在 Unix-like 操作系统中的系统调用,用于控制设备或文件的各种操作。它允许用户空间程序与内核空间进行交互,执行一些特定的设备控制、状态查询或其他操作,而不必…

Java“魂牵”京东商品详情描述数据,京东商品详情API接口,京东API接口申请指南

要通过京东的API获取商品详情描述数据,您可以使用京东开放平台提供的接口来实现。以下是一种使用Java编程语言实现的示例,展示如何通过京东开放平台API获取商品详情: 首先,确保您已注册成为京东开放平台的开发者,并创…

Springboot整合MyBatisPlus框架操作MySQL

1、MyBatis-Plus概述 MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 【技术储备】 拥有 Java 开发环境以及相应 IDE…

elasticsearch8.9.1集群搭建

目录 1.官网文档 2.安装步骤 2.1 环境准备 2.2 添加用户 2.3 修改文件profile文件 2.4 修改elasticsearch.yml 2.5 修改 sysctl.conf 3.启动 3.1 切换到kibana 3.2 启动elasticsearch 3.3 启动kibana 3.4 验证节点情况 1.官网文档 elasticsearch文档:ht…

漏洞发现-web应用发现探针类型利用

关于在真实环境下面,这个漏洞该如何发现 这里老师把它分成了三块第一类是 #已知cms 如常见的dedecms,discuz,wordpress等源码结构,这些都是网上比较知名的php源码的cms的名称,这是我们在国内常见的几个程序&#xf…

常见的数据结构之队列

一、介绍 队列(Queue)是一种常见的数据结构,用于存储和管理一系列数据元素,其中元素按照 先进先出(First-In-First-Out,简称FIFO)的原则进行插入和删除。 队列可以类比为现实生活中排队等候的场景,例如在超市收银台排队购物的顾客队列。 二、队列的基本操作 2.1 出…

接口优化通用方案

目录 批量异步、回调缓存预取池化并行锁粒度索引大事务海量数据 批量 批量思想:批量操作数据库 优化前: //for循环单笔入库 for(TransDetail detail:transDetailList){ insert(detail); } 优化后: batchInsert(transDetailList); 异步、回…

CSAPP的Lab学习——DataLab

文章目录 前言一、bitXor(异或)二、tmin(最小的二进制补码)三、isTmax(判断是否为最大值)四、allOddBits(判断奇数位是否都是1)五、negate(计算相反数)六、is…

Pycharm保存自定义布局

1.启用特定窗口 在View->Tool Windows下可以启用特定窗口,窗口标签会出现在左边(图中红框处),下边或右边,可以拖动摆放位置 2.保存 在windows->layout下可以选择保存布局 1.图中第一个选项:选择或…

如何用bat文件调用与它在同一文件夹下的某个exe程序

第一个方案: 如果bat文件与某个exe程序在同一文件夹下的。那直接写那个 程序文件名字就行了。 两种写法。比如是 test.exe程序 一种 test.exe 二种 start test.exe 第一种批处理会等待test.exe程序执行完后才会运行下面的语句 第二种不会等待 这个写绝对路径好用 另…

Java实现根据商品ID获取京东商品详情数据,1688商品详情接口,1688API接口封装方法

要通过京东的API获取商品详情数据,您可以使用京东开放平台提供的接口来实现。以下是一种使用Java编程语言实现的示例,展示如何通过京东开放平台API获取商品详情: 首先,确保您已注册成为京东开放平台的开发者,并创建一…

JDK的组成、作用

JDK:java development kit java的标准开发工具包 jre:java runtime environment 运行基于java语言编写的程序必不可少的运行环境用于解释和执行java的字节码文件(.class文件)普通用户(无开发需求)下载jre…

python的asyncio事件循环

一、介绍 asyncio是Python标准库中的一个异步编程框架,它提供了一个事件循环(event loop),用于协调异步任务的执行和结果的返回。在asyncio中,事件循环是一个非常重要的概念,它是异步编程的核心。 事件循…

3.4 可视化图表

电子表格中的图表可以使数据的表现更加直观、形象,帮助用户准确掌握数据间的逻辑关系。本节主要介绍了图表的构成元素,图表的类型,如何对图表区域进行管理等内容,针对不同的数据类型,创建成简单的图表,或创…

指针的进阶一

目录 1.字符指针 2.数组指针 3.指针数组 4.数组传参 5.函数指针 1.字符指针 int main() { const char* pstr "hello world."; printf("%s\n", pstr); return 0; } pstr中存放的就是字符串的首元素地址,并不是把字符串hello world 放到字符…

3D步进式漫游能够在哪些行业应用?

VR技术一直以来都是宣传展示领域中的热门话题,在VR全景技术的不断发展下,3D步进式漫游技术也逐渐覆盖各行各业,特别是在建筑、房产、博物馆、企业等领域应用更加广泛,用户通过这种技术能够获得更加直观、生动、详细的展示体验&…

FreeRTOS源码分析-13 内存管理

1 STM32编译过程及程序组成 1.1STM32编译过程 从源文件到.o文件,使用了armcc工具和armasm工具,这些keil帮我们实现了。.o不是可执行文件,只是目标文件。因为地址没有定义,没有在rom中定义地址从.o文件到镜像文件使用了armlink&am…

C语言每日一练------------Day(7)

本专栏为c语言练习专栏,适合刚刚学完c语言的初学者。本专栏每天会不定时更新,通过每天练习,进一步对c语言的重难点知识进行更深入的学习。 今日练习题关键字:两个数组的交集     双指针 💓博主csdn个人主页&#xf…

ELK原理和介绍

为什么用到ELK: 一般我们需要进行日志分析场景:直接在日志文件中 grep、awk 就可以获得自己想要的信息。但在规模较大的场景中,此方法效率低下,面临问题包括日志量太大如何归档、文本搜索太慢怎么办、如何多维度查询。需要集中化…

AUTOSAR配置与实践(深入篇)8.2 BSW的WatchDog功能-窗口狗

AUTOSAR配置与实践(深入篇)8.2 BSW的WatchDog功能-窗口狗 一、为什么使用窗口狗(Window Watchdog)二、窗口狗初始化和喂狗流程概要三、Wdg配置项详解四、窗口狗详细流程 一、为什么使用窗口狗(Window Watchdog&#xf…