训练图像原图与groundtruth不是一个格式的坑

前言

在训练transUnet网络时,我想使用我自己的1.8w张copymove数据集。但是图像的原图是tif格式,groundtruth是png格式。所以在加载数据集时产出了许多坑!!!

开始跳坑

1、读取图片时的坑

    def readImage(self):
        #print("读取图片")
        self.pic_root = self.data_root + "/Image/"
        self.gt_root = self.data_root + "/Mask_bi/"
        #这里由于原图与groundtruth的后缀不一样 所以得分开
        filename_i = os.listdir(self.pic_root)
        filename_g = os.listdir(self.gt_root)

        for i in range(len(filename_i)):
            self.image_name.append(self.pic_root + filename_i[i])
            #print(filename[i])
            self.gt_name.append(self.gt_root + filename_g[i])
            #print(filename[i])

之前我读取图像时候没有保存filename_g ,下面都使用的是filename_i 。这就会导致读入image_name与gt_name中的名字是一样的。比如说对于一张图片,image是000.tiff。img_gt中也是000.tiff,但实际我的img_gt中是000_mask.png。这样后面打开图像时就找不到啦。所以得有两个列表分别保存。

2、使用pillow打开TIFF文件报tempfile.tif: Cannot read TIFF header错误的解决方案如题,使用pillow的 Image.open(tiff file path)报错tempfile.tif: Cannot read TIFF header.的错误。

原因是 libtiff的版本问题。 将版本降到4.0.10即可解决。(conda install libtiff=4.0.10 or pip install libtiff=4.0.10)

3、报一个错

ValueError: image has wrong mode

经过查找。在我的transform中,使用了数据增广

self.im_tfs_val = tfs.Compose([
            torchvision.transforms.RandomHorizontalFlip(),
            #tfs.ColorJitter(brightness=0.5, contrast=0.5, hue=0.5),
            tfs.ToTensor(),
            tfs.Normalize(self.mean, self.std),

        ])

就是注释掉的代码,这个可以在PNG,JPG和8位TIF上用,但是我的TIF图像是24位的,所以就爆了这个错。我不使用这个进行数据增广就好了。
如果想用,那俺就不知道怎么改了,我直接弃之!!(理直气壮)

猜你喜欢

转载自blog.csdn.net/weixin_44020747/article/details/115770348