【bug】使用mmsegmentaion遇到的问题

news2024/12/25 9:10:38

利用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,跑通验证,完美。
加粗样式

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

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

相关文章

Mysql 在Windows Server系统下修改数据文件存储路径遇到的坑

因项目需要搭建一个Mysql数据库,为了方便日常运维操作开始选择了Windows Server 2012R2(已有的虚拟机),考滤到要300G空间,原来的盘空间不够了,就是给虚拟机加了磁盘,Mysql 8.0.26社区版安装路径没得选择,默认就装在C&a…

OpenHarmony开发实例:【 待办事项TodoList】

简介 TodoList应用是基于OpenHarmony SDK开发的安装在润和HiSpark Taurus AI Camera(Hi3516d)开发板标准系统上的应用;应用主要功能是以列表的形式,展示需要完成的日程;通过本demo可以学习到 JS UI 框架List使用; 运行效果 样例…

记一次 Vscode + Latex 正向/反向搜索忽然失效

遥望大半个月前,完成论文撰写后,这些天虽然多次打开项目,但我真的一个字都没动过,今天想着开始着手修改一下,打开项目发现正向/反向搜索忽然失效了,感觉浑身有蚂蚁在爬,思索再三后找到问题&…

端口被占用的解决方案汇总

端口被占用的解决方案汇总 【一】windows系统端口被占用【二】Linux系统端口被占用【三】Linux的ps命令查找(1)ps命令常用的方式有三种(2)ps -ef |grep 8080 【一】windows系统端口被占用 (1)键盘上按住Wi…

javaEE初阶——多线程(八)——常见的锁策略 以及 CAS机制

T04BF 👋专栏: 算法|JAVA|MySQL|C语言 🫵 小比特 大梦想 此篇文章与大家分享分治算法关于多线程进阶的章节——关于常见的锁策略以及CAS机制 如果有不足的或者错误的请您指出! 多线程进阶 1.常见的锁策略 我们需要了解的是,我们使用是锁,在加锁 / 解锁…

【软考】UML中的关系

目录 1. 说明2. 依赖3. 关联4. 泛化5. 实现 1. 说明 1.UML中有4种关系:依赖、关联、泛化和实现2.这 4种关系是 UML,模型中可以包含的基本关系事物。它们也有变体,例如,依赖的变体有精化、跟踪、包含和延伸 2. 依赖 1.依赖(Dependency)。2.…

文心一言 VS 讯飞星火 VS chatgpt (242)-- 算法导论17.4 1题

一、假定我们希望实现一个动态的开地址散列表。为什么我们需要当装载因子达到一个严格小于 1 的值 a 时就认为表满?简要描述如何为动态开地址散列表设计一个插入算法,使得每个插入操作的摊还代价的期望值为 O(1) 。为什么每个插入操作的实际代价的期望值…

Excel如何计算时间差

HOUR(B1-A1)&"小时 "&MINUTE(B1-A1)&"分钟 "&SECOND(B1-A1)&"秒"

下级平台级联EasyCVR视频汇聚安防监控平台后,设备显示层级并存在重复的原因排查和解决

视频汇聚平台/视频监控系统/国标GB28181协议EasyCVR安防平台可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、云存储等丰富的视频能力,平台支持7*24小时实时高清视频监控,能同时…

机器学习-10-基于paddle实现神经网络

文章目录 总结参考本门课程的目标机器学习定义第一步:数据准备第二步:定义网络第三步:训练网络第四步:测试训练好的网络 总结 本系列是机器学习课程的系列课程,主要介绍基于paddle实现神经网络。 参考 MNIST 训练_副…

深入剖析机器学习领域的璀璨明珠——支持向量机算法

在机器学习的广袤星空中,支持向量机(Support Vector Machine,简称SVM)无疑是一颗璀璨的明珠。它以其独特的分类能力和强大的泛化性能,在数据分类、模式识别、回归分析等领域大放异彩。本文将详细剖析SVM算法的原理、特…

MLLM | InternLM-XComposer2-4KHD: 支持336 像素到 4K 高清的分辨率的大视觉语言模型

上海AI Lab,香港中文大学等 论文标题:InternLM-XComposer2-4KHD: A Pioneering Large Vision-Language Model Handling Resolutions from 336 Pixels to 4K HD 论文地址:https://arxiv.org/abs/2404.06512 Code and models are publicly available at https://gi…

互联网扭蛋机小程序:打破传统扭蛋机的局限,提高销量

扭蛋机作为一种适合全年龄层的娱乐消费方式,深受人们的喜欢,通过一个具有神秘性的商品给大家带来欢乐。近几年,扭蛋机在我国的发展非常迅速,市场规模在不断上升。 经过市场的发展,淘宝线上扭蛋机小程序开始流行起来。…

一文讲透彻Redis 持久化

文章目录 ⛄1.RDB持久化🪂🪂1.1.执行时机🪂🪂1.2.RDB原理🪂🪂1.3.小结 ⛄2.AOF持久化🪂🪂2.1.AOF原理🪂🪂2.2.AOF配置🪂🪂2.3.AOF文件…

40+ Node.js 常见面试问题 [2024]

今天就开始你的Node.js生涯。在这里,我们探讨了最佳Node.js面试问题和答案,以帮助应届生和经验丰富的候选人获得理想的工作。 Node.js 是许多大公司技术堆栈的重要组成部分,例如 PayPal、Trello、沃尔玛和 NASA。 根据 ZipRecruiter 的数据&…

了解边缘计算,在制造行业使用边缘计算。

边缘计算是一种工业元宇宙技术,可以帮助组织实现其数据的全部潜力。 处理公司的所有数据可能具有挑战性,而边缘计算可以帮助公司更快地处理数据。在制造业中,边缘计算可以帮助进行预测性维护和自动驾驶汽车操作等工作。 什么是边缘计算? …

ruoyi-cloud-plus添加一个不要认证的公开新页面

文章目录 一、前端1. 组件创建2. src/router/index.ts3. src/permission.ts 二、后端1. 设计思想2. ruoyi-gateway.yml3. 开发Controller 版本RuoYiCloudPlusv2.1.2plus-uiVue3 ts 以新增一个公开的课程搜索页面为例。 一、前端 1. 组件创建 在view目录下创建一个页面的vue…

python--使用pika库操作rabbitmq实现需求

Author: wencoo Blog:https://wencoo.blog.csdn.net/ Date: 22/04/2024 Email: jianwen056aliyun.com Wechat:wencoo824 QQ:1419440391 Details:文章目录 目录正文 或 背景pika链接mqpika指定消费数量pika自动消费实现pika获取队列任务数量pi…

去哪儿网开源的一个对应用透明,无侵入的Java应用诊断工具

今天 V 哥给大家带来一款开源工具Bistoury,Bistoury 是去哪儿网开源的一个对应用透明,无侵入的java应用诊断工具,用于提升开发人员的诊断效率和能力。 Bistoury 的目标是一站式java应用诊断解决方案,让开发人员无需登录机器或修改…

使用大卫的k8s监控面板(k8s+prometheus+grafana)

问题 书接上回,对EKS(AWS云k8s)启用AMP(AWS云Prometheus)监控AMG(AWS云 grafana),上次我们只是配通了EKSAMPAMG的监控路径。这次使用一位大卫老师的grafana的面板,具体地址如下: ht…