首页 > 编程知识 正文

语义分割数据集制作,如何制作自己的数据集

时间:2023-05-05 19:24:07 阅读:240040 作者:4489

语义分割fast scnn用的是cityscapes数据集,如果想要制作属于自己的cityscapes数据集,可参考https://blog.csdn.net/weixin_45609455/article/details/106334688

本文提供的是另一种方法
1.下载labelme提供的example中的代码.地址
(1)打开examples文件–>semantic_segmentation
(2)按照data_annotated里面文件存放的格式,将标注好的json和原图复制到data_annotated ,并删掉data_dataset_voc文件夹,运行labelme2voc.py,labels.txt要修改好.在终端可输入如下命令

python labelme2voc.py data_annotated data_dataset_voc --labels labels.txt

(3)得到新创建的data_dataset_voc文件,

训练的是原图和标签图,其中,原图放在./data_dataset_voc/JPEGImages,而标签图放在./data_dataset_voc/SegmentationClassPNG.
(4)查看生成的标签图是否为灰度图.如下代码

import numpy as npfrom PIL import Imageimg = Image.open('/***/1_min6 278.png') #图像所在位置a=img.modeprint(a)

如果输出的是L,则可以跳过下面的灰度图转换.否则需要将训练的图片转换成灰度图(有时候尽管是灰度图,但是img.mode为p,这也需要转换),运行下面的代码

import cv2import osinput_dir = './label/' #上一步保存.png图像文件夹out_dir = './label_gray/'a = os.listdir(input_dir)import numpy as npfor i in a: img = cv2.imread(input_dir+'/'+i) gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) print(np.unique(gray)) cv2.imencode('.png', gray)[1].tofile(out_dir+'/'+i)

注释:生成的标签图是8bit图,但并不能直接用于训练,还得继续作转换,要将其转为8bit的灰度图

2.训练前的图片放置
在fastscnn代码文件中,按照下面格式新建放置数据集
datasets/
citys/
clips/
leftmg8bit/
gtFine/
注释:leftmg8bit文件夹内放的是训练的原图,gtFine放的是训练的标签图(灰度图)

3.训练前代码的修改
(1)查看标签类别对应的数值,运行代码如下.

import numpy as npfrom PIL import Imageimg = Image.open('/***/1_min6 278.png') #图像所在位置img = np.array(img)print(np.unique(img))

例如我标签对应的数值有0(背景),14,38,52,75,89,113,需要在cityscapes.py进行代码修改

NUM_CLASS = 7 # 这一共加上背景类别数为7,所以在第41行进行如下修改#在59行self._key = np.array([-1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, #11--20 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, #21---30 -1, -1, -1, -1, -1, -1, -1, 2, -1, -1, #31---40 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, #41 -1, 3, -1, -1, -1, -1, -1, -1, -1, -1, #51 0,14,38,52,75,89,113 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, #61 -1, -1, -1, -1, 4, -1, -1, -1, -1, -1, #71 -1, -1, -1, -1, -1, -1, -1, -1, 5, -1, #81 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, #91 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, #101 -1, -1, 6 #111---113 ])

由于标签数值最大为113,113+2(从-1开始)=115,对这115位置初始化-1.
针对0(背景),14,38,52,75,89,113,需要对第2位,第16位,第40位,第54位,第77位,第89位,第115位分别赋值0,1,2,3,4,5,6

4.运行时,遇到找不到图片的错误
这一般都是读取图片的地址有错误,在def _get_city_pairs(folder, split=‘train’)函数中进行单步调试,看一下代码需要修改

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。