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

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

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

谢谢

【问题讨论】:

    标签: neural-network conv-neural-network image-segmentation semantic-segmentation


    【解决方案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 itvisualizeexploreanalyze 以及任何未来模型预测。

      FiftyOne 有一个 Python API,可以将您的 instancesemantic 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",
      )
      

      训练模型

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

      【讨论】:

        猜你喜欢
        • 2021-08-13
        • 2016-11-11
        • 2019-07-22
        • 2022-10-24
        • 1970-01-01
        • 2022-10-20
        • 2016-05-31
        • 2020-08-14
        • 1970-01-01
        相关资源
        最近更新 更多