mmsegmentation 训练自己的数据集

2023-11-11

在这里插入图片描述

一. 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训练自己的数据集,有问题欢迎留言讨论。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mmsegmentation 训练自己的数据集 的相关文章

随机推荐

  • 批量文本文件内容替换之Linux sed命令

    文章目录 sed命令简介 需求 sed实现批量替换 sed命令简介 Linux sed命令可以使用shell脚本进行文件的批量处理 如批量替换 修改等等 尤其是在需要对大量文本文件进行批量操作时 使用sed命令会起到事半功倍的效果 关于详细
  • 其他-08-idea配置查询字节码

    1 字节码查询 查看一下idea是否安装了 一般都安装了 编译一下 生成target 点击View下面的Show ByteCode即可 其实你看到的字节码是java加工多的 可以看下这个类 原生都是数字 以 helloWql方法字节码解释
  • 为何程序员完成最后20%的工作需要的时间跟之前的80%一样多?

    听过行百里者半九十吧 这句话在程序员的工作中同样适用 到底是为何呢 Matija用一个精巧的比喻揭示了个中道理 其实这就好比在高峰期从郊外开车回市中心 前 80 的路程很顺 高速嘛 可能两小时就走完了 但是到了城里 就走不动了 红绿灯 人行
  • MATLAB点云处理函数整理

    pcbin 空间bin点云点 bins pcbin ptCloud numBins bins pcbin ptCloud numBins spatialLimits bins binLocations pcbin pcdenoise 去噪
  • 数据结构与算法之二叉树的建立

    文章目录 一 已知二叉树的先序和中序数列 创建二叉树 1 算法思想 2 代码实现 二 已知二叉树的先序和后序数列 创建二叉树 1 算法思想 2 代码实现 三 二叉树的顺序存放 打印先 中 后序遍历 一 已知二叉树的先序和中序数列 创建二叉树
  • Java图形化界面编程一

    目录 一 介绍 二 AWT编程 2 1AWT介绍 2 2 AWT继承体系 2 3 Container容器 2 3 1 Container继承体系 2 3 2 常见API 2 3 3 容器演示 2 4 LayoutManager布局管理器 2
  • Keras使用VGG16模型预测自己的图片

    Keras使用VGG16模型预测自己的图片 环境 Win10 Miniconda3 Pycharm2018 02 代码如下 from keras applications vgg16 import VGG16 from keras prep
  • 计算机视觉课程设计:基于Mediapipe的体感游戏设计

    演示视频 计算机视觉课程设计 基于Mediapipe的体感游戏设计 哔哩哔哩 bilibili
  • SpringCloud微服务架构标准版本拓扑图

    本图是公司需要 自己整理的SpringCloud微服务架构标准版本拓扑图 有 eddx格式 需要请私信 为了方便截了个jpg 希望对你有所帮助 喜欢的朋友点赞收藏转发
  • Cow Marathon(树的直径)(最长路)

    Cow Marathon Time Limit 2000MS Memory Limit 30000KB 64bit IO Format lld llu Submit Status Description After hearing abou
  • 【树莓派】利用tesseract进行汉字识别

    树莓派 利用tesseract进行汉字识别 安装tesseract库 识别图像中的汉字 安装tesseract库 安装tesseract库和它的python封装 sudo apt install tesseract ocr fix miss
  • Python学习-----文件操作(读写定位篇)

    目录 前言 1 打开文件 open 关闭文件 close 2 文件的读取 文件变量名 f 1 整体读取 read 2 读取一行 readline 3 读取多行 readlines 3 文件的写入 文件变量名f write 4 判断文件的可读
  • 稀疏矩阵的存储格式(Sparse Matrix Formats)

    稀疏矩阵的存储格式 Sparse Matrix Storage Formats 1 Coordinate Format COO 这种存储方式的主要优点是灵活 简单 仅存储非零元素以及每个非零元素的坐标 使用3个数组进行存储 values r
  • 解决使用OpenCV-Python外接摄像头打不开问题 re_MSMF::grabFrame videoio(MSMF): can‘t grab frame. Error: -1072873822

    记录在学习django opencv做人脸识别时遇到了以下错误 re MSMF grabFrame videoio MSMF can t grab frame Error 1072873822 直接在 py文件运行 能使用本机的摄像头 放到
  • java Image转byte

    public static byte getImageToByteArr Image src throws IOException int width int src getWidth null int height int src get
  • Flink学习19:算子介绍keyBy

    1 keyBy简介 主要作用 把相同的数据 汇总到相同的分区中 数据本来是分布在不同的slot中 keyBy会把相同的数据拉到相同的slot中 2 keyBy的使用 在使用keyBy时候 需要向keyBy传递一个参数 告诉其按照哪个字段进行
  • 2022-01-12 网工基础(二十)GRE原理与配置 VRRP原理与配置

    一 GRE原理与配置 IPSec VPN 用于在两个端点之间提供安全的 IP 通信 但只能加密并传播单播数据无法加密和传输语音 视频 动态路由协议信息等组播数据流量 通用路由封装协议 GRE Generic Routing Encapsul
  • ​路由器是如何工作的?

    什么叫路由 路由器的英文是 Router 也就是 找路的工具 找什么路 寻找各个网络节点之间的路 换句话说 路由器就像是快递中转站 包裹会经过一个个的中转站 从遥远的地方寄到你家附近 数据包也是一样 路由器是连接两个网络的硬件设备 承担寻路
  • Linux部署东方通TongWeb

    Linux部署东方通TongWeb TongWeb 一 软件版本 二 东方通TongWeb7部署流程 2 1 安装JDK 2 1 1 下载文件 2 1 2 查看当前JDK版本 2 1 3 卸载JDK 2 3 1 卸载JDK 需root权限
  • mmsegmentation 训练自己的数据集

    一 MMSegmentation是什么 MMSegmentation 是一个基于 PyTorch 的语义分割开源工具箱 它是 OpenMMLab 项目的一部分 他与MMDetection类似 集成了各种语义分割算法 可以快速验证语义分割效果