【DL】如何生成用于训练的数据集

操作步骤:

1. 使用标注工具生成标注文件;

博主使用labelme开源工具标注文件;

labelme的安装和使用清参考here;

2. 基于标注数据文件和样本图片生成对应的json目录;

每个样本文件生成的json目录包含的内容有原图/

img.png: 对应的局部的jpg原图文件,训练时要用

label.png: 标注语义图像,训练时要用

label_names.txt: 在这张图像上目标分类名称

label_viz.png:  标签可视化,用于让我们确认是否标记正确

3. 将局部类别标签转换为全局类别标签文件,得到用于训练的样本对;

4. 分离训练集和验证集用于训练;

注意,

1. 数据集的标注;

2. 数据集的路径和生成过程;

3. 原博客中有错误(也有可能与使用的软件版本等有关);最后生成的png是灰度图像,像素值是全局类别数值;

遇到的错误

File "/home/xxx/miniconda3/envs/open_mmlab/lib/python3.8/site-packages/torch/nn/functional.py", line 3163, in interpolate
return torch._C._nn.upsample_bilinear2d(input, output_size, align_corners, sfl[0], sfl[1])
RuntimeError: It is expected output_size equals to 2, but got size 3

原因:生成的全局类别标签图像文件的数据尺寸有问题;

解决方法:

# new = new + np.expand_dims(index_all*(np.array(img) == index_json),-1)
new = new + index_all*(np.array(img) == index_json)

特别注意,

保存图像的时候要注意保存成png格式的图像,因为jpg格式会在存储时对图像进行压缩,导致mask图像不准确。

 在PIL中,图像有很多种模式,如'L'模式,’P'模式,还有常见的'RGB'模式,模式'L'为灰色图像,它的每个像素用8个bit表示,0表示黑,255表示白,其他数字表示不同的灰度。模式“P”为8位彩色图像,它的每个像素用8个bit表示,其对应的彩色值是按照调色板索引值查询出来的。标签图像的模式正是'P'模式,因此测试时要生成对应标签图像的图片的话,构建一个调色板即可。

参考

1. 语义分割中单类别和多类别图片数据标注,以及灰度类别转换

2. UNet/UNet++多类别分割

做自己该做的事情,做自己喜欢做的事情,安静做一枚有思想的技术媛。
版权声明,转载请注明出处:https://www.cnblogs.com/happyamyhope/
原文地址:https://www.cnblogs.com/happyamyhope/p/14805186.html