bubbliiiing / unet-pytorch

这是一个unet-pytorch的源码,可以训练自己的模型

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

关于训练自己的数据集的问题

yuanyongqi2019 opened this issue · comments

我仔细看了作者的代码和VOC数据集的格式,发现VOC数据集训练集和验证集mask图像的像素值就是它的分类值,比如这个物体属于第五类那它的像素值就是(5,5,5),我用的数据集mask图像的像素值是它对应的颜色,直接跑程序的话,miou和mPA除了背景其他都是0,我把训练集和验证集mask图像的像素值改成了对应的分类值,图片就变成全黑的了,训练之后miou和mPA也是除了背景其他都是0,应该怎么解决呢?

emm?
理论上物体属于第五类那它的像素值就是5,因为标签是灰度图

emm? 理论上物体属于第五类那它的像素值就是5,因为标签是灰度图

这个我看出来了,但是测试集的灰度图像为什么还会有颜色呢?我知道灰度图可以有颜色,但是它的灰度值只有0-21为什么能呈现出各种彩色呢?作者有把其他数据集转化为VOC数据集的方法吗?我用的数据集只有原图和mask图像,我写了个程序进行修改,但是图片会变成黑色,不像作者用到的数据集那样显示各种颜色

1、八位彩图。保存方式有要求,用labelme保存的

嗯嗯,前两天调出来了,谢谢作者了

好的加油

嗯嗯,前两天调出来了,谢谢作者了
你好,我现在也遇到这个问题,请问下您是怎么解决的呢?我把label都改成8位彩图了,但是训练出来预测全黑

嗯嗯,已经调出来了,谢谢作者
你好,我现在也遇到了这个问题,但是请问下是怎么解决的呢?

首先把你自己用的数据集的训练集改成和作者训练集一样的格式,就是像素值就是实际的标签值,测试集的图也要处理成八位的彩图才行,八位彩图可以用labelme的程序来实现

嗯嗯,已经调出来了,谢谢作者
你好,我现在也遇到了这个问题,但是请问下是怎么解决的呢?

首先把你自己用的数据集的训练集改成和作者训练集一样的格式,就是像素值就是实际的标签值,测试集的图也要处理成八位的彩图才行,八位彩图可以用labelme的程序来实现

你好!我下载的是Potsdam遥感数据集,是用tif后缀的图片切片后分别得到JPG格式的24位彩图和PNG格式的8位彩图,这个应该算是符合泡泡哥工程里VOC数据集格式的吧?但是我用这个就是不行,还是说我需要怎么改变标签中像素点的值呢?感激不尽!那个用labelme的程序来实现是什么意思呢

嗯嗯,已经调出来了,谢谢作者
你好,我现在也遇到了这个问题,但是请问下是怎么解决的呢?

首先把你自己用的数据集的训练集改成和作者训练集一样的格式,就是像素值就是实际的标签值,测试集的图也要处理成八位的彩图才行,八位彩图可以用labelme的程序来实现

你好!我下载的是Potsdam遥感数据集,是用tif后缀的图片切片后分别得到JPG格式的24位彩图和PNG格式的8位彩图,这个应该算是符合泡泡哥工程里VOC数据集格式的吧?但是我用这个就是不行,还是说我需要怎么改变标签中像素点的值呢?感激不尽!那个用labelme的程序来实现是什么意思呢

关于你说的数据集我不太了解,我的研究方向和遥感图像没什么关系,关于labelme的程序就是用labelme的程序来给像素值就是标签值的图片着色成彩色图像,可以查看from labelme.utils.draw import label_colormap这个函数,如果还是不太清楚的话可以使用我改好的程序,如下所示
`import os.path as osp
import os

import numpy as np
from PIL import Image

from labelme.utils.draw import label_colormap
from tqdm import tqdm

def lblsave(filename, lbl):
if osp.splitext(filename)[1] != '.bmp':
filename += '.bmp'
# Assume label ranses [-1, 254] for int32,
# and [0, 255] for uint8 as VOC.
if lbl.min() >= -1 and lbl.max() < 255:
lbl_pil = Image.fromarray(lbl.astype(np.uint8), mode='P')
colormap = label_colormap(255)
lbl_pil.putpalette((colormap * 255).astype(np.uint8).flatten())
lbl_pil.save(filename)
else:
raise ValueError(
'[%s] Cannot save the pixel-wise class label as PNG. '
'Please consider using the .npy format.' % filename
)

path = "Labels"
save_path = "Labels_1"

files = os.listdir(path)

print(files)

for pic in tqdm(files):
pic_path=os.path.join(path, pic)
img=Image.open(pic_path)
img_array=np.asanyarray(img)
new_path=os.path.join(save_path,pic)
lblsave(new_path,img_array)

`

可以不是八位的彩图,只要标签的像素值就是实际的标签值就可以,灰度图也行

感谢大佬们的回复,已经解决所有问题!
总结一下:VOC数据集格式需要两个有两个文件夹,一个是放图片的image,另一个是放标签的label。然后图片就是正常的JPG格式即可,标签是需要8位的图片,是彩色还是灰色并没关系,最重要的是标签中的像素点的值需要是实际的标签值,也就是假如我的数据集有16个类,那么标签中的像素值就只能在0-15的范围内,因此8位的图片是灰色的完全符合要求,但是最重要的是像素值要对应。具体查看方法可以用PIL库读取图片然后转换成numpy的array格式,然后查看整个标签图片或者一部分的像素值,如果都在0-15这个范围内标签格式便是符合要求的。

啊对