【bug】使用mmsegmentaion遇到的问题

利用mmsegmentaion跑自定义数据集时的bug处理(使用bisenetV2)

  • 1. ValueError: val_dataloader, val_cfg, and val_evaluator should be either all None or not None, but got val_dataloader={'batch_size': 1, 'num_workers': 4}, val_cfg={'type': 'ValLoop'}, val_evaluator=None
    • 1.1报错原因
    • 1.2 解决方案
  • 2. IndexError: The shape of the mask [497, 512] at index 0 does not match the shape of the indexed tensor [1080, 1920] at index 0
    • 2.1报错原因
    • 2.2 解决方案
  • 3. NotImplementedError: device must be 'cpu' , 'gpu' or 'npu', but got GPU
    • 3.1报错原因
    • 3.2 解决方案

使用的环境是cuda11.3+pytorch1.11.0+torchaudio0.11+torchvison0.12.0

1. ValueError: val_dataloader, val_cfg, and val_evaluator should be either all None or not None, but got val_dataloader={‘batch_size’: 1, ‘num_workers’: 4}, val_cfg={‘type’: ‘ValLoop’}, val_evaluator=None

在这里插入图片描述

1.1报错原因

由于之前用自己数据集跑过internImage,想投机取巧把internImage自定义的配置文件拿过来直接用,果不其然报错了。

1.2 解决方案

还是借鉴mmsegmentaion中/configs/base/datasets/ade20k.py,将文件修改成适合自己数据集的配置

# -*- coding: utf-8 -*-
# @Author: Zhao RuiRui
# @Time : 2024/4/16 上午11:24
# @Describe:

# dataset settings
dataset_type = 'CoalDataset' # 修改自定义数据集名称
data_root = '/media/amax/Newsmy1/A_data/mmseg_coalFlow' # 修改数据集路径
img_scale = (1920, 1080)
crop_size = (512, 512)

train_pipeline = [
    dict(type='LoadImageFromFile'),
    dict(type='LoadAnnotations'),
    dict(
        type='RandomResize',
        scale=img_scale,
        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=img_scale, keep_ratio=True),
    # add loading annotation after ``Resize`` because ground truth
    # does not need to do resize data transform
    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', seg_map_path='masks'),
       ann_file='/media/amax/Newsmy1/A_data/mmseg_coalFlow/train.txt', #我使用的是txt组织形式,里面只存有图像前缀,修改成训练集的txt路径
        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', seg_map_path='masks'),
        ann_file='/media/amax/Newsmy1/A_data/mmseg_coalFlow/val_test.txt',# 这里修改成验证集的txt路径
        pipeline=test_pipeline) # 注意这块是test_pipeline
)
test_dataloader = val_dataloader
val_evaluator = dict(type='IoUMetric', iou_metrics=['mIoU'])
test_evaluator = val_evaluator

2. IndexError: The shape of the mask [497, 512] at index 0 does not match the shape of the indexed tensor [1080, 1920] at index 0

在这里插入图片描述
训练是正常的,但是评估会报错;

2.1报错原因

  • 不管将scale修改成什么数字,都会报这个错误;
  • 尝试使用internImage训练过的数据集进行训练测试,如果可以训练,就说明不是数据集问题,再进行debug调试(好,漂亮,不是数据集问题)
  • 将训练batch_size设置为2,num_workers=2;测试batch_size=1,num_workers=2(不OK)

后来,我在github提了issue问题描述,有个回复是这样的
在这里插入图片描述
大概意思是出现这个情况有两种原因:

  • 图像和标签尺寸大小不匹配
  • 数据增强过程中可能只是调整了图像大小,而没有改变标签大小

针对第一个问题,检查了图像相应的标签尺寸大小

# -*- coding: utf-8 -*-
# @Author: Zhao Rui
# @Time : 2024/4/22 上午9:38
# @Describe: 检查图像和标签大小是否匹配
import os
from PIL import Image

img_dir = "/media/amax/Newsmy1/A_data/mmseg_coalFlow/images"
ann_dir = "/media/amax/Newsmy1/A_data/mmseg_coalFlow/masks"

img_files = os.listdir(img_dir)
ann_files = os.listdir(ann_dir)

for img_file in img_files:
    if img_file.endswith(".jpg"):  # 检查图像文件是否以.jpg结尾
        ann_file = img_file.replace(".jpg", ".png")  # 构建对应的标注文件名
        ann_path = os.path.join(ann_dir, ann_file)

        if os.path.exists(ann_path):
            img_path = os.path.join(img_dir, img_file)
            img = Image.open(img_path)
            ann = Image.open(ann_path)

            img_size = img.size
            ann_size = ann.size

            if img_size == ann_size:
                print(f"Image {img_file} and annotation {ann_file} have the same size: {img_size}")
            else:
                print(f"Image {img_file} and annotation {ann_file} have different sizes: {img_size} and {ann_size}")
        else:
            print(f"Annotation file {ann_file} does not exist for image {img_file}")

在这里插入图片描述
所有的输出都是合适的,图像和标签大小没有问题,将问题转到配置文件中数据增强部分也就是自定义的configs/base/datasets/coalDataset.py配置文件,与其他配置对比之后发现自己将val_dataloader里面的pipeline写成了train_pipeline,以后还是得长点心哇,这个bug卡太久了。

2.2 解决方案

将val_dataloader里面的pipeline修改为test_pipeline
在这里插入图片描述

3. NotImplementedError: device must be ‘cpu’ , ‘gpu’ or ‘npu’, but got GPU

在这里插入图片描述
和问题二一样,在训练时没有问题,到了评估出指标时就开始报错。

3.1报错原因

验证时好像没有用到GPU(这个原因是我猜的)

3.2 解决方案

验证了我的torch环境是合适的
在这里插入图片描述将问题定位到dist.py中line942,原本没有‘GPU’
在这里插入图片描述
好,那么我就给它加上GPU试试
在这里插入图片描述

ok,跑通验证,完美。
加粗样式

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Elasticsearch单机部署(Linux)

1. 准备环境 本文中Elasticsearch版本为7.12.0,JDK版本为1.8.0,Linux环境部署。 扩展: (1)查看Elasticsearch对应的常用的jdk版本如下:(详情可看官网的支持一览表) Elasticsearch a…

CTF网络安全大赛详情

网络安全已成为现代社会的一个关键挑战,随着互联网技术的飞速发展,从个人隐私保护到国家安全,网络安全的重要性日益突显。为了应对这一挑战,CTF(Capture The Flag,中文:夺旗赛)应运而…

03-JAVA设计模式-命令模式

命令模式 什么是命令模式 命令模式(Command Pattern)是一种行为设计模式,它将请求封装为对象,从而使你可用不同的请求把客户端与请求的处理者解耦,也称动作模式或事物模式。 在命令模式中,命令对象封装了接收者对象…

Hive架构原理

Hive Hive 的架构是设计用于在大数据环境下进行数据仓库操作和分析的系统。它建立在 Hadoop 生态系统之上,利用 Hadoop 的存储(HDFS)和计算(MapReduce、Tez、Spark 等)能力。 1. 元数据存储(Metastore&am…

计算机网络-IS-IS链路状态数据库同步

在建立IS-IS邻接关系之后,路由器开始发送LSP报文进行链路状态数据库进行同步。 一、链路状态数据库同步 LSP( Link State PDU,链路状态报文) 用于交换链路状态信息。LSP分为两种:Level–1 LSP和Level–2 LSP。Level–1…

前端入门:HTML(列表和边框案例)

1.列表知识&#xff1a; list-style-position有两个值&#xff0c;分别是inside&#xff0c;outside&#xff0c;分别表示在标签里面和在标签外面。 2.案例&#xff1a; 源代码&#xff1a; html: <body> <div class"bigBox"> <div>在线解答问题…

基于Springboot+Mybatis-Plus+mysql+html旅游网站

博主介绍&#xff1a; 大家好&#xff0c;本人精通Java、Python、C#、C、C编程语言&#xff0c;同时也熟练掌握微信小程序、Php和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验&#xff0c;能够为学生提供各类…

【Spring进阶系列丨最终篇】一文详解Spring中的事务控制

0、说明 本篇文章是【Spring进阶系列】专栏的最后一篇文章&#xff0c;至此&#xff0c;我们对Spring的学习就告一段落&#xff0c;接下来我会持续更新【SpringSpringMVCMyBatis整合】专栏&#xff0c;欢迎免费订阅&#xff01; 文章目录 0、说明 一、Spring事务控制1、事务的环…

PDPS16.0单机版及许可证服务器授权安装教程分享

此前小编做过PDPS15(Tecnomatix_15.0)安装包及安装教程分享&#xff0c;此次分享是PDPS16(Tecnomatix_16.0)单机版安装结合SPLMLicenseServer许可证服务器授权安装的教程。服务器型是完整的pdps&#xff0c;单机版只装了个ps&#xff0c;ps的功能一样&#xff0c;仿真需求没要求…

iPerf 3 测试UDP和TCP方法详解

文章目录 前言一、What is iPerf / iPerf3 ?二、功能1. TCP and SCTP2. UDP3. 其他 三、 Iperf的使用1.Iperf的工作模式2. 通用指令3. 服务端特有选项4. 客户端特有选项5. -t -n参数联系 四、Iperf使用实例1. 调整 TCP 连接1. 1TCP 窗口大小调节1. 2 最大传输单元 (MTU)调整 2…

华为P系列“砍了”,三角美学系列全新登场

2021 年 10 月&#xff0c;Intel 正式带来了颠覆以往的第 12 代酷睿「混合架构」 CPU。 不知道是良心发现还是为了弥补 11 代酷睿过于拉胯表现&#xff0c;Intel 终于把狠活儿都用在了这代。 全新 Intel 7 工艺、全新架构、单核与多核性能大幅提升&#xff0c;让大家十分默契…

数字化革新:可视化墨水屏引领基板工艺MSAP贴膜阶段迈向无纸化高端制造应用背景

随着科技的飞速发展和环境保护意识的日益增强&#xff0c;制造印刷电路板&#xff08;PCB&#xff09;行业正面临着提升生产效率、降低资源消耗和推动绿色制造的迫切需求。 问题&#xff1a; PCB生产过程对洁净度要求高&#xff0c;传统打印的纸张会有粉尘&#xff0c;纸屑&am…

怎么通过Javascript脚本实现远程控制一路开关

怎么通过Javascript脚本实现远程控制一路开关呢&#xff1f; 本文描述了使用Javascript脚本调用HTTP接口&#xff0c;实现控制一路开关。一路开关可控制一路照明、排风扇等电器。 可选用产品&#xff1a;可根据实际场景需求&#xff0c;选择对应的规格 序号设备名称1智能WiFi…

腾讯云轻量应用服务器和CVM S5服务器有什么区别?

腾讯云轻量应用服务器和CVM云服务器S5有什么不同&#xff1f;性能哪个更好一些&#xff1f;CVM S5云服务器CPU采用2.5GHz主频的Intel Xeon Cascade Lake或者Intel Xeon Cooper Lake处理器&#xff0c;轻量不支持指定CPU&#xff0c;从功能、内网连通性、集群及公网带宽等方面对…

React 19 带来了 JSX 运行时的重要更新

在 React 的发展历程中&#xff0c;JSX 运行时一直扮演着重要的角色。在以前的的版本&#xff0c;JSX 运行时会克隆传入的 props 对象&#xff0c;这背后有着两大原因。 历史原因 React 保留了一些特殊的 prop 名称&#xff0c;如 key 和在 React 19 之前的 ref。这些 prop 并…

公钥密码学Public-Key Cryptography

公钥或非对称密码学的发展是整个密码学历史上最伟大的&#xff0c;也许是唯一真正的革命。The development of public-key, or asymmetric, cryptography is the greatest and perhaps the only true revolution in the entire history of cryptography. 公钥算法基于数学函数…

14.接口自动化测试-造数据

1.测试造数据 工作场景&#xff1a; 需要造一批测试数据 解决方案&#xff1a; &#xff08;1&#xff09;使用字符串拼接 135XXXXX &#xff08;2&#xff09;使用第三方库去做 faker 安装&#xff1a; pip install Faker 若安装不成功&#xff0c;可能是需要清下缓存&a…

使用Azure AI Search和LlamaIndex构建高级RAG应用

RAG 是一种将公司信息合并到基于大型语言模型 &#xff08;LLM&#xff09; 的应用程序中的常用方法。借助 RAG&#xff0c;AI 应用程序可以近乎实时地访问最新信息&#xff0c;团队可以保持对其数据的控制。 在 RAG 中&#xff0c;您可以评估和修改各个阶段以改进结果&#x…

ExcelVBA把当前工作表导出为PDF文档

我们先问问Kimi Excel导出为PDF的方法有多种&#xff0c;以下是一些常见的方法&#xff1a; 1 使用Excel软件的内置功能&#xff1a; 打开Excel文件&#xff0c;点击“文件”菜单。选择“另存为”&#xff0c;在“保存类型”中选择“PDF”。设置保存路径和文件名&#xff0c;点…

Node.js -- path模块

path.resolve(常用) // 导入fs const fs require(fs); // 写入文件 fs.writeFileSync(_dirname /index.html,love); console.log(_dirname /index.html);// D:\nodeJS\13-path\代码/index.html 我们之前使用的__dirname 路径 输出的结果前面是正斜杠/ &#xff0c;后面部分是…