制作自己的图像语义分割数据集

    本文教你如何正确制作自己的图像语义分割数据集。假设我当前目录下有500张图片,命名从1.jpg开始,一直往上递增,我事先已经调整好了图像的大小。

    首先下载Labelme工具:https://github.com/wkentaro/labelme。使用方式见教程。

    每张图片都会生成对应的json文件。接下里就是解析json文件。 以第一个样本为例,解析json文件时,在命令行输入以下进行转化:

$labelme_json_to_dataset json/1.json -o parsed/json-1

    (上面这一句中:json文件夹是存放json文件的地方,parsed文件夹是存放解析之后文件的地方)。通过刚刚这个命令,你可以在json-1子文件夹里找到5个文件,分别为:img.png/info.yaml/label.png/label_names.txt/label_viz.png。其中label.png和label_names.txt是后面将要用到的。

    但是刚刚这条语句只会转化一个json文件,因此需要写一个shell脚本进行批文件处理。在工作目录中写一个shell脚本文件,命名为test.sh,文件里的内容如下:

for ((i=1;i<501;i++));do
  labelme_json_to_dataset json/$i.json -o parsed/json-$i
done

    接下来需要在命令行里运行:

$sh test.sh

    注意,上面的命令可能会报如下的错误:

Syntax error: Bad for loop variable

    这个问题的解决方法如下,在命令行输入:

$chmod 777 test.sh

    然后在终端运行:

$./test.sh

    最后在parsed文件夹下成功生成了500个子文件夹。接下来为标注出来的label.png进行着色。现在需要写一个程序进行批量处理那500张label.png,新建一个python程序,命名为test.py,内容如下:

#-*- coding:utf-8 -*-

import PIL.Image
import numpy as np
from skimage import io,data,color
import matplotlib.pyplot as plt

for i in range(1,501):
    
    img=PIL.Image.open("parsed/json-%i/label.png"%i)
    img=np.array(img)
    dst=color.label2rgb(img,bg_label=0,bg_color=(0,0,0))#背景的标签为0,颜色为黑色。当你需要分割多个类别时,去skimage查看原函数
    io.imsave("transform/dstlabel-%i.png"%i,dst)

    最后处理的500张图片保存在transform文件夹下,你可以查看到。但是,事情还没有结束!!!

    最后一步,需要把刚刚的24位png图转化为8位png图,必须得转化。这里提供一份Matlab程序:

dirs=dir('C:/Users/xxx/Desktop/testing/transform/*.png');
for n=1:numel(dirs)
     strname=strcat('C:/Users/xxx/Desktop/testing/transform/',dirs(n).name);
     img=imread(strname);
     [x,map]=rgb2ind(img,256);
     newname=strcat('C:/Users/xxx/Desktop/testing/output/',dirs(n).name);
     imwrite(x,map,newname,'png');
end  

    最后在output文件夹下,生成最后的图像标签。接着就可以训练了。展示一组原图以及对应的标签:

                                              

 
 
 






制作自己的语义分割数据集可以按照以下步骤进行: 1. 收集图像数据:首先,需要收集一组包含所需语义类别的图像数据。可以通过在互联网上搜索并下载相关图像,或者使用自己拍摄的图像。 2. 标注图像:使用图像标注工具,对收集到的图像进行标注。语义分割需要为每个像素分配一个类别标签。可以使用矩形框、多边形或像素级标注来完成。 3. 创建标签图像:将标注的图像转换为标签图像。标签图像是与原始图像大小相同的灰度图像,每个像素的值表示所属类别。 4. 数据增强:进行数据增强可以增加数据集的多样性和数量。可以使用平移、旋转、缩放、镜像等技术对原始图像和标签图像进行变换。 5. 数据划分:将数据集划分为训练集、验证集和测试集。通常,训练集用于模型的训练,验证集用于调整模型参数和选择最佳模型,测试集用于评估模型性能。 6. 数据预处理:对图像和标签进行预处理,如调整大小、归一化等。可以根据具体需求选择适当的预处理方法。 7. 数据格式转换:将数据集转换为模型能够接受的格式,如TensorFlow的TFRecord或PyTorch的Dataset。 8. 数据加载:使用相应的深度学习框架加载数据集,并进行训练和评估。 需要注意的是,制作语义分割数据集是一项耗时且繁琐的任务,需要耐心和准确性。同时,确保标注的准确性和一致性对模型训练的结果至关重要。
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值