首页 > 其他分享 >nnunetv2系列:2D实例分割数据集转换

nnunetv2系列:2D实例分割数据集转换

时间:2024-09-11 19:24:02浏览次数:11  
标签:seg nnunetv2 join img dataset 2D source 实例 png

nnunetv2系列:2D实例分割数据集转换

2D实例分割数据集转换

这里主要参考官方源文件nnUNet/nnunetv2/dataset_conversion/Dataset120_RoadSegmentation.py,注释了一些不必要的操作。数据集下载链接: massachusetts-roads-dataset

重要提示:
nnU-Net只能用于使用无损(或无)压缩的文件格式!因为文件格式是为整个数据集定义的(而不是单独为图像和分割定义的,这可能是将来的任务),我们必须确保没有破坏分割映射的压缩工件。所以没有。jpg之类的!
支持的2D数据集文件类型包括.png、.bmp、.tif

原数据集目录结构

这里展示massachusetts-roads-dataset数据集的目录结构。
这里的testing目录在训练过程中并不会使用,默认是在training目录中划分训练集和验证集。

./datasets/road_segmentation_ideal/
├── testing/
│   ├── input/
│   │   ├── img-10.png
│   │   ├── img-11.png
│   │   ├── ...
│   └── output/
│       ├── img-10.png
│       ├── img-11.png
│   │   ├── ...
└── training/
    ├── input/
    │   ├── img-1000.png
    │   ├── img-1001.png
│   │   ├── ...
    └── output
        ├── img-1000.png
        ├── img-1002.png
│   │   ├── ...

转换后数据集目录结构

nnUNet_raw/Dataset120_RoadSegmentation
├── dataset.json
├── imagesTr
│   ├── img-2_0000.png
│   ├── img-7_0000.png
│   ├── ...
├── imagesTs # optional
│   ├── img-1_0000.png
│   ├── img-2_0000.png
│   ├── ...
└── labelsTr
|   ├── img-2.png
|   ├── img-7.png
|   ├── ...
└── labelsTs
|   ├── img-1.png
|   ├── img-2.png
|   ├── ...

转换代码示例

这里展示的是包括背景在内的三类实例分割数据集转换代码。

import multiprocessing
import shutil

from batchgenerators.utilities.file_and_folder_operations import (
    join,
    maybe_mkdir_p,
    subfiles,
)

from nnunetv2.dataset_conversion.generate_dataset_json import (
    generate_dataset_json,
)
from nnunetv2.paths import nnUNet_raw
from skimage import io
# from acvl_utils.morphology.morphology_helper import generic_filter_components
# from scipy.ndimage import binary_fill_holes


def load_and_covnert_case(
    input_image: str,
    input_seg: str,
    output_image: str,
    output_seg: str,
    min_component_size: int = 50,
):
    seg = io.imread(input_seg)
    seg[seg == 128] = 1
    seg[seg == 255] = 2
    # image = io.imread(input_image)
    # image = image.sum(2)
    # mask = image == (3 * 255)
    # # the dataset has large white areas in which road segmentations can exist but no image information is available.
    # # Remove the road label in these areas
    # mask = generic_filter_components(
    #     mask,
    #     filter_fn=lambda ids, sizes: [
    #         i for j, i in enumerate(ids) if sizes[j] > min_component_size
    #     ],
    # )
    # mask = binary_fill_holes(mask)
    # seg[mask] = 0
    io.imsave(output_seg, seg, check_contrast=False)
    shutil.copy(input_image, output_image)


if __name__ == "__main__":
    # extracted archive from https://www.kaggle.com/datasets/insaff/massachusetts-roads-dataset?resource=download
    source = "/home/bio/family/segmenation/nnUNet/datasets/eye_sclera_iris_segmentation"

    dataset_name = "Dataset500_ScleraIrisSegmentation"

    imagestr = join(nnUNet_raw, dataset_name, "imagesTr")
    imagests = join(nnUNet_raw, dataset_name, "imagesTs")
    labelstr = join(nnUNet_raw, dataset_name, "labelsTr")
    labelsts = join(nnUNet_raw, dataset_name, "labelsTs")
    maybe_mkdir_p(imagestr)
    maybe_mkdir_p(imagests)
    maybe_mkdir_p(labelstr)
    maybe_mkdir_p(labelsts)

    train_source = join(source, "training")
    test_source = join(source, "testing")

    with multiprocessing.get_context("spawn").Pool(8) as p:
        # not all training images have a segmentation
        valid_ids = subfiles(
            join(train_source, "output"), join=False, suffix="png"
        )
        num_train = len(valid_ids)
        r = []
        for v in valid_ids:
            r.append(
                p.starmap_async(
                    load_and_covnert_case,
                    (
                        (
                            join(train_source, "input", v),
                            join(train_source, "output", v),
                            join(imagestr, v[:-4] + "_0000.png"),
                            join(labelstr, v),
                            50,
                        ),
                    ),
                )
            )

        # test set
        valid_ids = subfiles(
            join(test_source, "output"), join=False, suffix="png"
        )
        for v in valid_ids:
            r.append(
                p.starmap_async(
                    load_and_covnert_case,
                    (
                        (
                            join(test_source, "input", v),
                            join(test_source, "output", v),
                            join(imagests, v[:-4] + "_0000.png"),
                            join(labelsts, v),
                            50,
                        ),
                    ),
                )
            )
        _ = [i.get() for i in r]

    generate_dataset_json(
        join(nnUNet_raw, dataset_name),
        {0: "R", 1: "G", 2: "B"},
        {"background": 0, "iris": 1, "sclera": 2},
        num_train,
        ".png",
        dataset_name=dataset_name,
    )

标签:seg,nnunetv2,join,img,dataset,2D,source,实例,png
From: https://blog.csdn.net/familytaijun/article/details/142148102

相关文章

  • PLC结构化文本(ST)——实例路径属性(attribute 'instance-path')
    PLCStructuredTextObjectOrientedProgrammingPLC结构化文本(ST)——实例路径属性(attribute'instance-path')作用该属性可以使用字符串变量获取POU的实例路径,用于日志记录和故障排查非常方便。语法{attribute'instance-path'}代码示例{attribute'reflection'}FU......
  • ton 增加event的实例
    //UserpurchasemsgmessageBuyMsg{number:Intasuint32;}messageBuyEvent{//Purchaseaddressbuy:Address;//Ordernumber,unique,usedtopreventduplicatepurchasesorderNumber:Intasuint32;}//Userplacesabet//addemiteve......
  • 【深度学习 transformer】基于Transformer的图像分类方法及应用实例
    近年来,深度学习在图像分类领域取得了显著成果。其中,Transformer模型作为一种新型的神经网络结构,逐渐在图像分类任务中崭露头角。本文将介绍Transformer模型在图像分类中的应用,并通过一个实例展示其优越性能。一、引言图像分类是计算机视觉领域的一个重要任务,广泛应用于安......
  • 828华为云征文 | 华为云 Flexus X 实例 :与腾讯云性能算力大比拼
    828华为云征文|华为云FlexusX实例:与腾讯云性能算力大比拼在当今云计算市场中,华为云和腾讯云都是备受瞩目的云服务提供商。本文将重点对比华为云FlexusX实例与腾讯云在性能算力方面的表现,帮助用户更好地了解两者的优势与差异。一、引言随着数字化时代的加速发展,......
  • oracle配置SGA参数不当导致不能正确启动数据库实例处理
    原因:生成环境数据库想要增加数据库内存配置参数SGA_TARGET增加到42G,但是没有配置SGA_MAX_SIZE参数值,导致SHUTDOWNIMMEDIATE停止数据库,再STARTUP启动数据库是提示错误:ORA-00823:Specifiedvalueofsga_targetgreaterthansga_max_size。处理思路:根据现有的spfile生成非二进制......
  • C++的数据类型----标准库类型(std::vector容器/std::list容器/std::map容器)的实例讲解
    目录1.字符串(std::string):用于处理文本字符串。2.容器:如std::vector、std::list、std::map等,用于存储和管理数据集合2.1std::vector容器2.2std::list容器2.3std::map容器1.字符串(std::string):用于处理文本字符串。下面是一个C++中字符串的示例程序......
  • 828华为云征文|华为云Flexus X实例全面杜绝DDoS、XSS、CSRF与SQL注入攻击,为企业部署无
    华为云近期盛大开启的828B2B企业节,为追求极致算力性能的企业用户带来了前所未有的优惠盛宴。特别是FlexusX实例,其强大的计算能力在此活动期间以超值价格呈现,无疑是自建高性能MySQL数据库、Redis缓存系统以及Nginx服务器等关键服务的理想选择。对于渴望提升业务处理效率与......
  • Taro 小程序父组件基于Class如何拿到子组件基于Hooks的实例对象
    如果父组件不是基于Hooks写法(类组件),而子组件是基于Hooks写法(函数组件),你依然可以通过ref访问子组件中的方法或状态。为此,你需要使用forwardRef和useImperativeHandle在子组件中自定义要暴露的内容。具体步骤在子组件中使用forwardRef将ref传递给它。在子组件中使......
  • 13.4告警抑制实例
    本节重点介绍:告警抑制应用场景配置方法:一定要有equal标签配置演示:critical告警触发了就抑制warning的告警抑制应用场景如果某些其他警报已经触发,则抑制某些警报的通知。多用于某些高等级的告警已触发,然后低等级的被抑制如机器宕机告警触发,则机器上的进程存活监控都被抑制......
  • 实例讲解Simulink CAN通讯丢失故障判定模型搭建及仿真测试验证方法
    在电动汽车VCU软件开发中,要开发故障诊断模块,故障诊断类型中CAN报文通讯丢失的判定是非常重要的一个,当检测到某个控制器CAN报文通讯丢失,即接收不到该控制器的有效CAN信号,需要根据通讯丢失的判断作出相应的故障处理,以保证整车行车安全。本文通过ABS通讯丢失Simulink模块的搭建,介......