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

article/2025/8/4 11:11:02

一、环境配置

1.1下载源码

mask2former:

https://github.com/facebookresearch/Mask2Former/tree/main

detectron2:

https://github.com/facebookresearch/detectron2

下载完后,新建一个文件夹,起个名字(我起的Mask2Former-main);mask2former与detectron2项目也分别命名为Mask2Former、detectron2;目录变成这个样子:
Mask2Former-main
|——detectron2
|——Mask2Former
使用pycharm打开项目的时候,直接打开Mask2Former-main

1.2配置环境

1.anaconda下新建并激活虚拟环境

新建:
conda create -n mask2former python==3.8
激活:
source activate mask2former

2.安装torch、torchvision
我是2060ti,CUDA12.4

conda install pytorch==2.5.1 torchvision==0.20.1 torchaudio==2.5.1 pytorch-cuda=12.4 -c pytorch -c nvidia

3.安装detectron2
cd到detectron2所在的根目录下,不要 cd 进detectron2文件夹:

python -m pip install -e detectron2

4.安装mask2former所需环境和MSDA模块
cd进mask2former文件夹,运行:

pip install -r requirements.txt

然后,cd 进 mask2former/modeling/pixel_decoder/ops/目录下,不要不要不要运行:

sh make.sh #不要运行这一行

windows下运行不了这个命令,用文本编辑工具notepad++打开make.sh,发现只有一行有用的,直接运行这一行即可

python setup.py build install

1.3我遇到的错误

python setup.py build install

失败。
这个问题我遇到过很多次,不做解释,在此记录针对我的电脑的解决方案:

#:: Step 1: 清空 INCLUDE 如果不进行我会遇到此时不应有 /windows
set INCLUDE=#:: Step 2: 加载 MSVC 编译器环境
call "C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Auxiliary\Build\vcvarsall.bat" x64#:: Step 3: 设置 DISTUTILS_USE_SDK=1
set DISTUTILS_USE_SDK=1#:: Step 4: 安装
pip install -e . 

二、配置数据集

Mask2Former/
├── datasets/
│   └── voc2former/(数据集名字)
│       ├── images/(存放原图)
│       │   ├── train/
│       │   │   ├── 1.jpg
│       │   │   ├── ...
│       │   └── val/
│       │       ├── 2.jpg
│       │       └── ...
│       └── semantic_annotations/存放mask
│           ├── train/
│           │   ├── 1.png
│           │   └── ...
│           └── val/
│               ├── 2.png
│               └── ...

搞了半天才搞成这种格式,转换的代码自己搜搜吧,我没时间整理了

三、修改代码

1.修改ymal

经过我的查询,这两个ymal文件是用来语义分割的,别的可能是实例分割或者全景分割,就先用这两个跑通。
修改
Mask2Former/configs/ade20k/semantic-segmentation/maskformer2_R50_bs16_160k.yaml
改为自己的类别我的是 背景+类别=1+1=2

NUM_CLASSES: 2

修改
Mask2Former/configs/ade20k/semantic-segmentation/Base-ADE20K-SemanticSegmentation.yaml
注册数据集的名称,照着改就行

DATASETS:TRAIN: ("ade20k_sem_seg_2train",)TEST: ("ade20k_sem_seg_2val",)

我的显卡2060太捞了
批次改为2,不然显存不够

IMS_PER_BATCH: 2 #16

训练论述改小点,不然训练时间太长,改小点先试试跑通

MAX_ITER: 800 #160000

训练的图像大小改小点,不然显存不够

MAX_SIZE_TRAIN: 1024 #2048

后面报了个什么多线程(应该是我的cpu和内存太捞了),改了这个才好

NUM_WORKERS: 0 #4

2.修改config.py

detectron2/detectron2/config/config.py
我报了编码错误
所以改第34行

return open(filename, "r", encoding="utf-8") # return PathManager.open(filename, "r")

3.修改train_net.py注册数据集

Mask2Former/train_net.py
在if name == “main”:上方直接加上,注册数据集

from detectron2.data.datasets import register_coco_panoptic_separated, load_sem_seg
from detectron2.data import MetadataCatalog, DatasetCatalogdef register_ade20k_sem_seg(root="E:/GitHub/Mask2Former-main/Mask2Former/datasets/voc2former"):# 注册训练集和验证集for split in ["train", "val"]:# 语义分割标注路径sem_seg_root = os.path.join(root, "semantic_annotations", split)# 原始图片路径image_dir = os.path.join(root, "images", split)# 注册数据集到 DatasetCatalogDatasetCatalog.register(f"ade20k_sem_seg_2{split}",lambda: load_sem_seg(sem_seg_root, image_dir, gt_ext="png", image_ext="jpg"),)# 添加元数据 (类别名称和颜色)MetadataCatalog.get(f"ade20k_sem_seg_2{split}").set(stuff_classes=["background", "fracture"],  # 替换为你的类别列表stuff_colors=[[0, 0, 0], [255, 0, 0]],  # 每个类别的显示颜色ignore_label=255,  # 忽略的标签值evaluator_type="sem_seg",  # 指定评估类型为语义分割)# 调用注册函数
register_ade20k_sem_seg()

四、训练、预测

1.训练


python train_net.py --num-gpus 1 --config-file configs/ade20k/semantic-segmentation/maskformer2_R50_bs16_160k.yaml

2.预测

先改点代码
Mask2Former/demo/demo.py
把def setup_cfg(args):之上替换为

# Copyright (c) Facebook, Inc. and its affiliates.
# Modified by Bowen Cheng from: https://github.com/facebookresearch/detectron2/blob/master/demo/demo.py
import os
os.environ['KMP_DUPLICATE_LIB_OK'] = 'TRUE'  # 解决OpenMP冲突
os.environ['CUDA_LAUNCH_BLOCKING'] = '1'    # 可选:用于更清晰的CUDA错误提示import argparse
import glob
import multiprocessing as mp
import os# fmt: off
import sysfrom detectron2.data import MetadataCatalogsys.path.insert(1, os.path.join(sys.path[0], '..'))
# fmt: onimport tempfile
import time
import warningsimport cv2
import numpy as np
import tqdmfrom detectron2.config import get_cfg
from detectron2.data.detection_utils import read_image
from detectron2.projects.deeplab import add_deeplab_config
from detectron2.utils.logger import setup_loggerfrom mask2former import add_maskformer2_config
from predictor import VisualizationDemo# demo.py 顶部添加
from detectron2.data import MetadataCatalog
MetadataCatalog.get("ade20k_sem_seg_2val").set(stuff_classes=["background", "fracture"],stuff_colors=[[0,0,0], [255,0,0]],evaluator_type="sem_seg",ignore_label=255,
)
# 在预测代码前添加
metadata = MetadataCatalog.get("ade20k_sem_seg_2val")
assert hasattr(metadata, "stuff_classes"), "元数据未正确注册!"print("类别:", metadata.stuff_classes)
# constants
WINDOW_NAME = "mask2former demo"

然后预测:

python demo/demo.py  --config-file "E:/GitHub/Mask2Former-main/Mask2Former/configs/ade20k/semantic-segmentation/maskformer2_R50_bs16_160k.yaml" --input "E:/traindate/StoneCrack_SE_jpg/2025_04_14_09_48_IMG_27561.jpg" --output "E:/GitHub/Mask2Former-main/Mask2Former/output/predictions" --opts MODEL.WEIGHTS "E:/GitHub/Mask2Former-main/Mask2Former/output/model_final.pth"

这就结束了。
贴一下训练结束:

[06/01 02:00:07 d2.evaluation.testing]: copypaste: mIoU,fwIoU,mACC,pACC
[06/01 02:00:07 d2.evaluation.testing]: copypaste: 95.8943,97.4269,97.6957,98.6891

预测一张图
在这里插入图片描述在这里插入图片描述
在这里插入图片描述


http://www.hkcw.cn/article/RUfHlChdGS.shtml

相关文章

如何使用1panel部署linux网站

找到官网,尝试一下在线安装 如果在线不成功,试一下离线安装 按照指令一步步执行即可,注意换成新版本的名称即可 如果成功,你会看到这个页面 1Panel Log]: [1Panel Log]: 感谢您的耐心等待,安装已完成 [1Panel Log]:…

个人用户进行LLMs本地部署前如何自查和筛选

一、个人用户硬件自查清单(从核心到次要) 1. 显卡(GPU)——决定性因素 显存容量(关键指标): 入门级(8~12GB):可运行7B模型(4bit量化)…

java Map双列集合

单列集合:一次只能添加一个元素 双列集合:一次添加两个元素,左边的叫键(唯一的不能重复),右边叫值(可以重复),键和值一一对应。这样一对叫:键值对/键值对对象…

在IIS上无法使用PUT等请求

错误来源: chat:1 Access to XMLHttpRequest at http://101.126.139.3:11000/api/receiver/message from origin http://101.126.139.3 has been blocked by CORS policy: No Access-Control-Allow-Origin header is present on the requested resource. 其实我的后…

FastVLM: Efficient Vision Encoding for Vision Language Models——为视觉语言模型提供高效的视觉编码

这篇文章的核心内容是介绍了一种名为 FastVLM 的新型视觉语言模型(VLM),它通过一种高效的视觉编码器 FastViTHD,在高分辨率图像输入下实现了显著的性能提升和延迟降低。以下是文章的主要研究内容总结: 1. 研究背景与动…

关于开发板连接电脑找不到CH340解决方法大全(附ch340驱动下载链接)

一、一般开发板只需要一根支持传输数据的usb线就可以,找不到就是驱动没安装,一般win11系统会自动后台安装,如果没安装需要手动 ch340驱动官网:南京沁恒微电子股份有限公司 安装还失败就用这个(安装之后重启电脑就可以了…

Flask文件处理全攻略:安全上传下载与异常处理实战

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storms…

机器学习有监督学习sklearn实战二:六种算法对鸢尾花(Iris)数据集进行分类和特征可视化

本项目代码在个人github链接:https://github.com/KLWU07/Machine-learning-Project-practice 六种分类算法分别为逻辑回归LR、线性判别分析LDA、K近邻KNN、决策树CART、朴素贝叶斯NB、支持向量机SVM。 一、项目代码描述 1.数据准备和分析可视化 加载鸢尾花数据集&…

Vim 支持多种编程语言编辑器

软件简介 Vim是Vi编辑器的增强版,它提供了更多的功能和快捷键。Vim是一款自由软件,它是由Bram Moolenaar在1991年创建的。Vim支持多种编程语言,包括C、C、Java、Python、Perl等等。它是一款轻量级的编辑器,可以快速打开和编辑大型…

CppCon 2014 学习:Unicode in C++

在 Unicode 出现之前,计算机使用各种 单字节编码(Single-Byte Encodings) 来表示文本。理解这些编码对于学习字符集的演变过程很有帮助,以下是关键点的解释: 什么是单字节编码(Single-Byte Encoding&#…

【计算机网络】第3章:传输层—面向连接的传输:TCP

目录 一、PPT 二、总结 TCP(传输控制协议)详解 1. 概述 核心特性: 2. TCP报文段结构 关键字段说明: 3. TCP连接管理 3.1 三次握手(建立连接) 3.2 四次挥手(终止连接) 4. 可…

python打卡 DAY 18 推断聚类后簇的类型

目录 聚类结果分析与簇类型推断学习笔记 一、聚类后分析基础流程 1.1 基本分析步骤 1.2 常用可视化工具 二、簇特征分析方法 2.1 数值型特征分析 簇中心对比 雷达图展示 2.2 类别型特征分析 频数统计 卡方检验 三、簇类型推断技术 3.1 基于统计特征的推断 关键指标…

【RocketMQ 生产者和消费者】- 生产者发送同步、异步、单向消息源码分析(2)

文章目录 1. 前言2. InvokeCallback#operationComplete3. onExceptionImpl 异常处理4. 定时任务扫描 responseTable5. 小结 本文章基于 RocketMQ 4.9.3 1. 前言 【RocketMQ】- 源码系列目录【RocketMQ 生产者消费者】- 同步、异步、单向发送消费消息【RocketMQ 生产者和消费者…

【大模型DA】Unified Language-driven Zero-shot Domain Adaptation

Motivation 本文动机在于解决现有方法对 domain-ID 和多模型的依赖问题,提出一个更实用、更通用的新设定 ULDA,使模型仅通过语言描述就能在不访问目标图像的前提下一次性适应多个未知目标域 这篇文章的方法部分提出了一个统一框架来解决Unified Language…

Tomcat 线程模型详解性能调优

1. Tomcat I/O模型详解**(了解)** 1.1 Linux I/O模型详解 I/O要解决什么问题 I/O:在计算机内存与外部设备之间拷贝数据的过程。 程序通过CPU向外部设备发出读指令,数据从外部设备拷贝至内存需要一段时间,这段时间CPU就…

Mem0: Building Production-Ready AI Agents with Scalable Long-Term Memory

文章目录 摘要Abstract1. 引言2. Mem03. graph-based Mem0参考总结 摘要 Mem0是一种针对AI智能体的长时记忆架构,旨在解决大型语言模型固定上下文窗口导致的跨会话连贯性问题。其基础版本采用两阶段处理范式:提取阶段通过结合对话摘要、近期消息序列和新…

C++构造函数详解:从基础到高级

文章目录 1. 摘要2. 默认构造函数3. 无参构造函数4. 带参构造函数5. 拷贝构造函数6. 移动构造函数 (C11)7. 委托构造函数 (C11)8. 转换构造函数9. 默认拷贝构造函数10. 总结 1. 摘要 构造函数是C类的重要组成部分,负责对象的初始化工作。本文将详细讲解8种构造函数…

day16 leetcode-hot100-32(链表11)

138. 随机链表的复制 - 力扣(LeetCode) 1.哈希表 思路 第一次遍历创建新节点并将原节点与新节点同时放入哈希表中 第二次遍历为新节点加入next与random 具体代码 /* // Definition for a Node. class Node {int val;Node next;Node random;public N…

52. N-Queens II

题目描述 52. N-Queens II 回溯法 这道题与第51题是一样的。51. N-Queens-CSDN博客 class Solution {int columns; //从低位到高位起算,第i位为0表示棋盘第i列可以放置皇后,第i位为1表示棋盘第i列不能放置皇后//边长为n的棋盘分别有2n-1条正斜线和反…

关于adb devices无法找到设备:error: device not found 的解决办法

一、此类问题出现的原因,一般是设备所使用的端口被占用,需要找到被占用的端口。 二、操作步骤 1、打开命令窗口。 2、输入adb shell 会发现提示error:device not found! 3、输入adb kill-server ,然后启动adb start-server 4、输入 net…