如何将图像转换为数据集以进行语义分割

     2023-03-27     157

关键词:

【中文标题】如何将图像转换为数据集以进行语义分割【英文标题】:How to convert images into a dataset for semantic segmentation 【发布时间】:2021-05-01 04:01:09 【问题描述】:

我正在尝试制作一个新的语义分割模型,该模型将颗粒状显微图像作为输入并对其进行分割。

我拥有 .png 格式的所有输入和地面实况图像,我很难将它们整理成其他人可以使用的数据集。我查看了一些文章,但它们解释了如何制作我已经拥有的标签图像。那么,有没有一种方法/软件可以用来管理数据集?

谢谢

【问题讨论】:

【参考方案1】:

您可以按照VOC challenge中的组织方式来组织图像。

也就是说,你应该有以下目录树:

my_dataset
   |
   +---  InputImages
   |           |
   |           +---   000.png
   |           +---   001.png
   |           +---   002.png
   |           ...
   |
   +---  SegmentationMasks
   |           |
   |           +---   000.png
   |           +---   001.png
   |           +---   002.png
   |           ...
   |  
   +---  ImageSets 
               |
               +---   train.txt
               +---   val.txt
               +---   test.txt

也就是说,您将所有输入图像存储在InputImages 文件夹下,并将您拥有的所有分割掩码存储在SegmentationMasks 文件夹下。确保掩码 SegmentationMasks/000.png 对应于 InputImages/000.png(对于所有图像和掩码,依此类推)。

此外,您可以将数据集固定拆分为“训练”、“验证”和“测试”集。此拆分存储在ImageSets 下的测试文件中: 文件train.txt 列出了属于训练集的图像ID,val.txt 列出了验证集的ID,依此类推。 确保所有 id 都包含在拆分中,并且两次拆分中都没有出现图像。 (即“train.txt”+“val.txt”+“test.txt”的并集=所有id,交集为空)。

【讨论】:

【参考方案2】:

您还可以使用开源工具FiftyOne 来管理数据集,让您可以轻松地使用share it 和visualize、explore 和analyze 以及任何未来模型预测。

FiftyOne 有一个 Python API,可以将您的 instance 或 semantic segmentation labels 加载到 FiftyOne Dataset 中,然后您可以在应用程序中查询和可视化(原始图像和注释)。

如果您以这种文件结构将图像和分段存储在磁盘上:

segmentation_dataset
   |
   |
   +--- data
   |      |
   |      +--- 000.png
   |      +--- 001.png
   |      +--- 000.png
   |      ...
   |
   +--- labels
          |
          +--- 000.png
          +--- 001.png
          +--- 000.png
          ...   

然后您可以将其加载到 Python 中并使用以下代码行将其可视化:

import fiftyone as fo

dataset = fo.Dataset.from_dir(
    "segmentation_dataset",
    dataset_type=fo.types.ImageSegmentationDirectory,
    name="segmentation_dataset",
    force_grayscale=True,
)

# Visualize the dataset in your browser
session = fo.launch_app(dataset)

注意:使用 force_grayscale 参数加载 RGB 蒙版,就像您提供的那样。

共享数据集

您可以使用 FiftyOne API 和 export it to disk 以各种格式(VOC、COCO、YOLO、CVAT 等)在数据集上添加和修改样本和标签。从那里您可以将其压缩并让其他人轻松将其加载回 FiftyOne。

例如,我们可以使用FiftyOneDataset format,因为它适用于任何标签类型:

dataset.export(
    export_dir="/path/to/export_dir",
    dataset_type=fo.types.FiftyOneDataset
)

压缩数据集并将其发送给其他人,他们现在可以运行:

import fiftyone as fo

dataset = fo.Dataset.from_dir(
    dataset_dir="/path/to/unzipped_dataset",
    dataset_type=fo.types.FiftyOneDataset,
)

拆分

如果您将数据拆分存储在如下所示的文件夹结构中:

segmentation_dataset
   |
   |
   +--- Train
   |      |
   |      +--- data
   |      |      |
   |      |      +--- 000.png
   |      |      +--- 001.png
   |      |      +--- 000.png
   |      |      ...
   |      |
   |      +--- labels
   |             |
   |             +--- 000.png
   |             +--- 001.png
   |             +--- 000.png
   |             ...   
   +--- Test
   |      |
   |      ...
   ...

然后,您可以将所有样本加载到数据集中,并为每个样本添加一个tag,表示它属于哪个拆分。

import fiftyone as fo

dataset_type = fo.types.ImageSegmentationDirectory

dataset = fo.Dataset.from_dir(
    dataset_dir="segmentation_dataset/Train",
    dataset_type=dataset_type,
    tags="train",
    name="segmentation_dataset",
)

dataset.add_dir(
    dataset_dir="segmentation_dataset/Test",
    dataset_type=dataset_type,
    tags="test",
)

训练模型

从那里,您可以直接使用此数据集来训练模型(例如使用 PyTorch 或 PyTorch Lightning Flash)

【讨论】:

基于深度学习的图像语义分割方法综述

近年来,深度学习技术已经广泛应用到图像语义分割领域.主要对基于深度学习的图像语义分割的经典方法与研究现状进行分类、梳理和总结.根据分割特点和处理粒度的不同,将基于深度学习的图像语义分割方法分为基于区域分类... 查看详情

《基于深度学习的图像语义分割方法综述》阅读理解

 近年来,深度学习技术已经广泛应用到图像语义分割领域.主要对基于深度学习的图像语义分割的经典方法与研究现状进行分类、梳理和总结.根据分割特点和处理粒度的不同,将基于深度学习的图像语义分割方法分为基于区域... 查看详情

语义分割与数据集

...在目标检测问题中,我们只使用矩形边界框来标记和预测图像中的对象。在这一节中,我们将对不同的语义区域进行语义分割。这些语义区域在像素级标记和预测对象。图1显示了一个语义分割的图像,区域标记为“dog”、... 查看详情

unet语义分割模型(keras)|以细胞图像为例(代码片段)

...使用一种颜色。常用于医学图像,卫星图像任务。那如何做到将像素点上色呢?其实语义分割的输出和图像分类网络类似,图像分类类别数是一个一维的onehot矩阵。例如:三分类的[0,1,0]。语义分割任务最后的输出... 查看详情

到底什么是语义分割?

...觉问题,其涉及将一些原始数据(例如,平面图像)作为输入并将它们转换为具有突出显示的感兴趣区域的掩模。许多人使用术语全像素语义分割(full-pixelsemanticsegme 查看详情

图像预处理和数据增强应该如何用于语义分割?

】图像预处理和数据增强应该如何用于语义分割?【英文标题】:Howshouldimagepreprocessinganddataaugmentationbeforsemanticsegmentation?【发布时间】:2019-11-2917:06:21【问题描述】:我有一个不平衡的小型数据集,其中包含4116个224x224x3(RGB)航拍... 查看详情

使用 CNN 进行语义分割的训练数据维度

...12【问题描述】:在尝试将CNN(U-Net)拟合到Python中的tif训练图像时,我遇到了很多困难。我的数据具有以下结构:X0[图片](tif,3-band,128x128,values∈[0,255])X_val0[图片](tif 查看详情

如何在谷歌 colab 中读取图像数据集以进行深度学习?

】如何在谷歌colab中读取图像数据集以进行深度学习?【英文标题】:Howtoreadimagesdatasetingooglecolabfordeeplearning?【发布时间】:2020-10-2014:17:34【问题描述】:我是深度学习的初学者。我对如何在GoogleColab中读取图像数据集感到困惑... 查看详情

数据增强图像数据生成器 Keras 语义分割

】数据增强图像数据生成器Keras语义分割【英文标题】:DataAugmentationImageDataGeneratorKerasSemanticSegmentation【发布时间】:2016-11-0411:32:51【问题描述】:我正在使用Keras在一些图像数据上拟合全卷积网络以进行语义分割。但是,我遇到... 查看详情

遥感影像语义分割——数据增强(图像和原图同时增强)

fromPILimportImage,ImageFont,ImageDraw,ImageEnhanceimportmatplotlib.pyplotaspltimportnumpyasnpimportrandomimportrandomimportosdefimage_rotate(image,label):"""对图像进行一定角度的旋转:paramimage_path:图像路径:paramsav 查看详情

keras深度学习实战(17)——使用u-net架构进行图像分割(代码片段)

...与测试小结系列链接0.前言我们已经在系列博文中学习了如何检测对象类别以及定位图像中对象的边界框,即图像分类与目标检测。图像分割(ImageSegmentation)是计算机视觉领域中另一重要和基础性的问题,也是十分具有挑... 查看详情

动手实践系列:cv语义分割!(代码片段)

...e干货 作者:游璐颖,福州大学,Datawhale成员图像分割是计算机视觉中除了分类和检测外的另一项基本任务,它意味着要将图片根据内容分割成不同的块。相比图像分类和检测,分割是一项更精细的工作,... 查看详情

动手实践系列:cv语义分割!(代码片段)

...e干货 作者:游璐颖,福州大学,Datawhale成员图像分割是计算机视觉中除了分类和检测外的另一项基本任务,它意味着要将图片根据内容分割成不同的块。相比图像分类和检测,分割是一项更精细的工作,... 查看详情

[深度学习][原创]语义分割中如何将预测索图转换为对应的rgb的3通道图(代码片段)

看下面示例,其实就是很巧妙的运用了numpy切片操作代码:importnumpyasnpCOLORMAP=[[128,64,128],[244,35,232],[70,70,70],[102,102,156],[190,153,153],[153,153,153],[250,170,30],[220,220,0],[107,142,35],[152,251,15 查看详情

不同的输入图像大小/分辨率如何影响语义图像分割网络的输出质量?

】不同的输入图像大小/分辨率如何影响语义图像分割网络的输出质量?【英文标题】:Howdodifferentinputimagesizes/resolutionsaffecttheoutputqualityofsemanticimagesegmentationnetworks?【发布时间】:2018-08-1804:56:25【问题描述】:在尝试使用在另一... 查看详情

单个类中没有标签的语义分割

...描述】:我对语义分割有点陌生。我正在尝试对有缺陷的图像进行分割。我使用注释工具对缺陷图像进行了注释,并为每个图像创建了蒙版。我想预测图像是否有缺陷以及它的确切位置。但我的问题是我的缺陷在所有图像中看起... 查看详情

语义分割综述阅读——understandingdeeplearningtechniquesforimagesegmentation

最近开始研究图像分割的相关技术,打算从综述文章入手,先了解整个领域的研究情况,再具体到各个算法的实现与原理上面去。文章主要以翻译以及个人对文章的理解为主,翻译成中文,便于后续查找相关的知识点。这篇综述... 查看详情

无法读取 Sagemaker 语义分割模型批量转换输出文件

...,我可以使用它来调用和获取推理。现在,我一次对每张图像进行推断。现在我想使用批量转换作业一次尝试批量图像。它工作 查看详情