【bug】使用mmsegmentaion遇到的问题

这篇具有很好参考价值的文章主要介绍了【bug】使用mmsegmentaion遇到的问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


使用的环境是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

【bug】使用mmsegmentaion遇到的问题,mmsegmentation,语义分割

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

【bug】使用mmsegmentaion遇到的问题,mmsegmentation,语义分割
训练是正常的,但是评估会报错;

2.1报错原因

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

后来,我在github提了issue问题描述,有个回复是这样的
【bug】使用mmsegmentaion遇到的问题,mmsegmentation,语义分割
大概意思是出现这个情况有两种原因:

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

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

# -*- 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}")

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

2.2 解决方案

将val_dataloader里面的pipeline修改为test_pipeline
【bug】使用mmsegmentaion遇到的问题,mmsegmentation,语义分割

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

【bug】使用mmsegmentaion遇到的问题,mmsegmentation,语义分割
和问题二一样,在训练时没有问题,到了评估出指标时就开始报错。

3.1报错原因

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

3.2 解决方案

验证了我的torch环境是合适的
【bug】使用mmsegmentaion遇到的问题,mmsegmentation,语义分割将问题定位到dist.py中line942,原本没有‘GPU’
【bug】使用mmsegmentaion遇到的问题,mmsegmentation,语义分割
好,那么我就给它加上GPU试试
【bug】使用mmsegmentaion遇到的问题,mmsegmentation,语义分割

ok,跑通验证,完美。
【bug】使用mmsegmentaion遇到的问题,mmsegmentation,语义分割文章来源地址https://www.toymoban.com/news/detail-858129.html

到了这里,关于【bug】使用mmsegmentaion遇到的问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【mmSegmentation】解耦语义分割模型,逐部分理解模型的构成与作用;规范开发和测试标准,增加模型的可复现性;让语义分割模型落地更稳

    语义分割作为计算机视觉中一项基础任务,同时在自动驾驶/视频编辑等领域中有重要的应用,因此一直受到学术界和工业界的广泛关注。在近几年的会议中,语义分割的论文层出不穷,但是市面上一直缺乏一款能够相对公平比较各种方法的框架。为了方便研究员和工程师们,

    2024年02月08日
    浏览(54)
  • 使用SAM进行遥感图像语义分割

    Segment Anything Model(SAM)论文 Segment Anything Model(SAM)模型解读及代码复现 Scaling-up Remote Sensing Segmentation Dataset with Segment Anything Model论文 The success of the Segment Anything Model (SAM) demonstrates the significance of data-centric machine learning. However, due to the difficulties and high costs associated with annotating Rem

    2024年02月07日
    浏览(27)
  • UNet语义分割模型的使用-Pytorch

    最近有时间,跑了一下UNet模型,因为自己的深度学习基础不扎实,导致用了一些时间。目前只停留在使用和理解别人模型的基础上,对于优化模型的相关方法还有待学习。 众所周知,UNent是进行语义分割的知名模型,它的U形结构很多人也都见过,但是如果自己没有亲自试过

    2024年02月03日
    浏览(35)
  • 使用LabVIEW实现 DeepLabv3+ 语义分割含源码

    图像分割可以分为两类:语义分割(Semantic Segmentation)和实例分割(Instance Segmentation),前面已经给大家介绍过两者的区别,并就如何在labview上实现相关模型的部署也给大家做了讲解,今天和大家分享如何使用labview 实现deeplabv3+的语义分割,并就 Pascal VOC2012 (DeepLabv3Plus-Mobi

    2024年02月13日
    浏览(33)
  • Vue 3 开发中遇到的问题及解决方案(fix bug)

    开发环境:mac系统,node版本: 16.15.0 解决方案1 升级或降级(版本) 思路 Vue和pinia 版本不兼容;Vue 的版本为 “vue”: “^3.2.47”, pinia的版本为 “pinia”: “^2.0.36” 解决过程 升高pinia的版本 “pinia”: “^2.0.36”, ==》 “pinia”: “^2.0.36”, 先删除pinia npm uni pinia 再重新安装 y

    2024年02月04日
    浏览(39)
  • 使用爬虫代码获得深度学习目标检测或者语义分割中的图片。

    问题描述:目标检测或者图像分割需要大量的数据,如果手动从网上找的话会比较慢,这时候,我们可以从网上爬虫下来,然后自己筛选即可。 代码如下(不要忘记安装代码依赖的库): 这里以搜索明星的图片为例,运行代码,然后根据提示输入搜索图片的名字→搜索图片

    2024年02月10日
    浏览(37)
  • 深度学习:使用UNet做图像语义分割,训练自己制作的数据集,详细教程

    语义分割(Semantic Segmentation)是图像处理和机器视觉一个重要分支。与分类任务不同,语义分割需要判断图像每个像素点的类别,进行精确分割。语义分割目前在自动驾驶、自动抠图、医疗影像等领域有着比较广泛的应用。我总结了使用UNet网络做图像语义分割的方法,教程很详

    2024年02月03日
    浏览(36)
  • 【Python&语义分割】Segment Anything(SAM)模型详细使用教程+代码解释(一)

    1.1 概况         Meta AI 公司的 Segment Anything 模型是一项革命性的技术,该模型能够根据文本指令或图像识别,实现对任意物体的识别和分割。这一模型的推出,将极大地推动计算机视觉领域的发展,并使得图像分割技术进一步普及化。         论文地址:https://arxiv.org/

    2024年02月05日
    浏览(40)
  • 深度学习:使用UNet做图像语义分割,训练自己制作的数据集并推理测试(详细图文教程)

    语义分割(Semantic Segmentation)是图像处理和机器视觉一个重要分支。与分类任务不同,语义分割需要判断图像每个像素点的类别,进行精确分割。语义分割目前在自动驾驶、自动抠图、医疗影像等领域有着比较广泛的应用。我总结了使用UNet网络做图像语义分割的方法,教程很详

    2024年01月18日
    浏览(34)
  • 图神经网络:(语义分割)三维网格语义分割

    文章说明: 1)参考资料:PYG的文档。文档超链。斯坦福大学的机器学习课程。课程超链。(要挂梯子)。博客原文。原文超链。(要挂梯子)。原文理论参考文献。提取码8848。 2)我在百度网盘上传这篇文章的jupyter notebook以及预训练模型。提取码8848. 3)博主水平不高,如有错误,还

    2024年02月03日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包