mmsegmentation 训练自己的数据集

news2024/10/6 6:53:08

在这里插入图片描述

一. MMSegmentation是什么?

MMSegmentation 是一个基于 PyTorch 的语义分割开源工具箱,它是 OpenMMLab 项目的一部分。他与MMDetection类似,集成了各种语义分割算法,可以快速验证语义分割效果。
在这里插入图片描述

二. 环境准备

参考:https://mmsegmentation.readthedocs.io/en/latest/get_started.html#verification

1. 安装环境

# 创建虚拟环境并进入
conda create --name openmmlab python=3.8 -y
conda activate openmmlab

# 安装pytorch时,要根据自己的cuda版本进行安装,比如我的cuda版本是10.2
conda install pytorch==1.12.0 torchvision==0.13.0 torchaudio==0.12.0 cudatoolkit=10.2 -c pytorch

# 用MIM安装MMCV
pip install -U openmim
mim install mmengine
mim install "mmcv>=2.0.0"

# 安装MMSegmentation
git clone -b main https://github.com/open-mmlab/mmsegmentation.git
cd mmsegmentation
pip install -v -e .

2. 验证环境

# 下载config和checkpoint文件
mim download mmsegmentation --config pspnet_r50-d8_4xb2-40k_cityscapes-512x1024 --dest .

# 验证推理效果
python demo/image_demo.py demo/demo.png configs/pspnet/pspnet_r50-d8_4xb2-40k_cityscapes-512x1024.py pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338-2966598c.pth --device cuda:0 --out-file result.jpg

三. 数据准备

建议直接将自己的数据制作成VOC的数据格式,跟主流数据格式一致。
VOC数据下载地址:https://github.com/StoneWST/Dataset-Tool-Segmentation/
在这里插入图片描述
简单说下,JPEGImages是原始图片,SegmentationClass存储的是.png格式的标注数据,读取label数据的时候,对于单通道数据,像素值要和类别的id 相等。比如我的数’background’,‘building’在单通道的label数据中要像素值分别要为background’= 0,‘building’= 1。

四. 修改配置文件

我习惯用 python /tools/train 某个标准config.py 指令先生成一个标准的config文件,然后复制出来再改,有点麻烦,但是后边省事。而且我个人建议初学者重新生成一个config文件,而不是自己直接改标注的。

python tools/train.py configs/deeplabv3/deeplabv3-r50-d8512x51220k_voc12aug.py

运行这个指令肯定会出错,但是在work_dirs下会生成一个对应的文件夹,然后在这个文件夹下会有一个自动生成的config文件。
config文件大概长这样:
在这里插入图片描述

很多很繁杂,但是不要害怕,我们需要改动的地方并不多。记住:一数据,二类别,三训练配置
注意,我记得原始VOC还进行了数据增强,你把带有Aug对应的地方以此删掉即可。
这些地方都要改成你的数据集对应的地址。后面的val,test道理亦然。
在这里插入图片描述
修改mmseg/datasets/voc.py文件,找到voc.py(因为我们的格式是VOC),做如下修改。其中PALETTE你可以简单理解为颜色,background对应[0, 0, 0]就是黑色,依次类推。
在这里插入图片描述
./mmseg/utils/class_names.py 做类似修改:
在这里插入图片描述
注意:每次修改mmseg内部的代码后要重新编译。编译命令如下:

pip install -v -e .

开始训练模型:

CUDA_VISIBLE_DEVICES=1,2,3,4 python tools/train.py deeplabv3plus_r18-d8_4xb4-20k_myproject-512x512.py

按照教程来,你的工程就顺利训练起来了, 如下图:
在这里插入图片描述

五. 测试

由于我的任务是二分类,测试代码由demo/image_demo.py修改过来。

from argparse import ArgumentParser

from mmengine.model import revert_sync_batchnorm


if __name__ == '__main__':
    import os
    import glob
    import cv2
    import numpy as np
    config = "your_config_path.py"
    checkpoint = "your_checkpoint_path.pth"
    device = 'cuda:0'
    model = init_model(config, checkpoint, device)
    img_list = glob.glob("./images/*.jpg")
    for img in img_list:
        result = inference_model(model, img)
        result = result.pred_sem_seg.data                    # 取出分割结果
        result = np.array(result.cpu()[0,:,:])*255
        # single to 3 channels
        result = np.expand_dims(result, axis=2)
        result = np.concatenate((result, result, result), axis=-1)
        print("inference success...")
        image = cv2.imread(img)
        output_img = np.hstack([image, result])
        out_file = os.path.join("outputs", os.path.basename(img))
        cv2.imwrite(out_file, output_img)

到此,就介绍完基于MMSegmentatoin训练自己的数据集,有问题欢迎留言讨论。

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

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

相关文章

【C++】模版(一)

泛型编程、模版(一): 1.泛型编程: void Swap(int& left, int& right) {int temp left;left right;right temp; } void Swap(double& left, double& right) {double temp left;left right;right temp; }【…

电脑软件:office文档密码了怎么办,看完你就能自己找回了

Word、Excel、PPT作为大家日常办公的使用最频繁的办公软件。对于一些涉及个人隐私或者涉及企业机密性的文档文件,我们经常会给自己的文档加上密码。 但有时候文档时间比较久了、或者密码太多了,有时候我们会把文档的密码给忘记了,如果密码忘…

Shell练习

一、题目 1、编写函数,实现打印绿色OK和红色FAILED 判断是否有参数,存在为Ok,不存在为FAILED 2、编写函数,实现判断是否无位置参数,如无参数,提示错误 3、编写函数实现两个数字做为参数,返回最…

【大数据之Hadoop】十一、MapReduce之Shuffle、MapTask、ReduceTask工作机制

1 Shuffle机制 对于排序而言分为两个阶段,MapTask后和ReduceTask前。 2 MapTask工作机制 MapTask并行度由切片个数决定;切片个数由切片大小(切片大小取决于块大小、maxsize(Long的最大值)和minsize(默认为…

【华为机试真题详解JAVA实现】—字符串通配符

目录 一、题目描述 二、解题代码 一、题目描述 问题描述:在计算机中,通配符一种特殊语法,广泛应用于文件搜索、数据库、正则表达式等领域。现要求各位实现字符串通配符的算法。 要求: 实现如下2个通配符: *:匹配0个或以上的字符(注:能被*和?匹配的字符仅由英文字母和…

为一副通用纸牌设计数据结构

为一副通用纸牌设计数据结构 大家好,我是易安,今天我们来聊一道笔试题,这也是我曾经面试华为时做过的题,今天分享给大家。 题目: 如何设计一个通用的扑克牌数据结构?请解释如何继承它来实现特定的扑克游戏…

wps 不显示公式_当Excel中使用函数不显示结果只显示公式时,该怎么解决呢?

在使用Excel过程中,有时候Excel中使用函数后,不显示结果只显示公式。 如下面使用vlookup函数时,只显示公式不显示结果。 遇到这种情况我们该怎么处理呢? 接下来,介绍几种造成该情况的原因以及相对应的解决方法。 1.如果…

BarTender.Application COM 多次调用引发后台进程数不断增加的问题

引用文章方法测试,目前未发现问题. Closing Instance Of Bartender – BarTender Support Portal (seagullscientific.com) Closing Instance Of Bartender FollowFollowed by one person Legacy Poster 9 years ago Hello again, Ive got BarTender automating…

LLM:Vicuna 7B模型简单部署体验

0、引入1、保存权重文件到阿里云盘2、部署环境3、上传权重文件到30904、下载安装源码4.1 下载编译安装源码4.2 安装5、开始使用6、直接使用我的镜像立即开启人机对话Debug:可能的报错0、引入 随着ChatGPT的火热,科技公司们各显神通,针对大语…

设计模式之中介者模式(C++)

作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 一、中介者模式是什么? 中介者模式是一种行为型的软件设计模式,也称为仲裁者模式,顾名思义&am…

nginx--基本配置

目录 1.安装目录 2.文件详解 2.编译参数 3.Nginx基本配置语法 1./etc/nginx/nginx.conf 2./etc/nginx/conf.d/default.conf 3.启动重启命令 4.设置404跳转页面 1./etc/nginx/conf.d/default.conf修改 ​2. 重启 5.最前面内容模块 6.事件模块 1.安装目录 # etc cd …

排序-时间复杂度

技巧:先处理 内层 一次排序,在处理外面 直接插入排序 升序 最坏(遇到降序):O(N^2) 等差数列 123…(n-1) (n^2-n)/2 最好(有序) O(N) 希尔排序 gap 任何数字/2都是1 gap/3 1 保证gap最后是1 gap是多少 就分了多少组,每组数据可能少一点&…

根文件系统移植:bulidroot根文件系统搭建详细步骤

bulidroot根文件系统 文章目录bulidroot根文件系统1.buildroot 下载2 配置 buildroot1、配置 Target options2、配置 Toolchain3、 配置 System configuration4、配置 Filesystem images5、 禁止编译 Linux 内核和 uboot6、配置 Target packages3 编译 buildroot4 buildroot 根…

第一章 计算机网络概述

计算机网络基本概念 计算机网络是计算机技术与通信技术相互融合的产物计算机网络是互连的、自治的计算机的集合 自治——互连的计算机系统彼此独立,不存在主从或者控制与被控制关系互连——利用通信链路连接相互独立的计算机系统 目前最大的、应用最广泛的计算机网…

函数栈帧的创建和销毁(带你进一步深入理解函数的执行流程)

本文主题 什么是函数栈帧? 理解函数栈帧能解决什么问题? 函数栈帧的创建和销毁解析 1. 什么是函数栈帧 ? 我们在写C语言代码的时候,经常会把一个独立的功能抽象为函数,所以C程序是以函数为基本单位的。 那函数是如何…

人人都是数据分析师-数据分析之数据图表可视化(上)

BI报表、运营同学的汇报报告中数据图表大多为 表格、折线图、柱状图和饼图,但是实际上还有很多具有代表性的可视化图表,因此将对常见的可视化图表进行介绍,希望这些图表可视化方法能够更好的提供数据的可用性。 导语 数据是我们在数据分析工…

通过1个IP地址同时采集2台西门子S7200 Smart的数据

一、应用场景 制药厂的颗粒包装机,控制系统由2台西门子S7200 Smart的PLC和1台昆仑通泰MCGS的触摸屏组成。现在MES管理系统,需要采集设备的数据,只提供一个IP地址,且IP地址和原系统不在同一个网络段内。 二、原系统架构 2台西门子S…

浅析DNS Rebinding

0x01 攻击简介 DNS Rebinding也叫做DNS重绑定攻击或者DNS重定向攻击。在这种攻击中,恶意网页会导致访问者运行客户端脚本,攻击网络上其他地方的计算机。 在介绍DNS Rebinding攻击机制之前我们先了解一下Web同源策略, Web同源策略 同源策略…

智慧校园人员定位系统解决方案

人员定位是安全管理中最重要的一个环节,尤其是石化、矿业、电力、建筑等高危行业,人员安全管理更是重中之重,除了工业领域,其它领域也需要人员安全管理,比如:学校、医院、养老院、物业、环卫等。下面我们以…

SpringSecurity之基本原理——过滤器加载过程

前言 前一篇讲解了SpringSecurity的过滤器链的基本只是,今天我们就要进入过滤器,看看其加载过程是如何的? 相信认真度过第一篇文章的小伙伴还记得,我说在SpringBoot出现后,帮助我们省去了那些繁琐的配置,…