我正在為分割數據集編寫一個簡單的自定義 DataLoader(稍后我將添加更多功能),但我使用__getitem()__方法返回的(圖像,掩碼)對是不同的;返回的掩碼屬于與返回的圖像不同的圖像。我的目錄結構是/home/bohare/data/images和/home/bohare/data/masks。以下是我的代碼:import torchfrom torch.utils.data.dataset import Datasetfrom PIL import Imageimport globimport osimport matplotlib.pyplot as pltclass CustomDataset(Dataset): def __init__(self, folder_path): self.img_files = glob.glob(os.path.join(folder_path,'images','*.png')) self.mask_files = glob.glob(os.path.join(folder_path,'masks','*.png')) def __getitem__(self, index): image = Image.open(self.img_files[index]) mask = Image.open(self.mask_files[index]) return image, mask def __len__(self): return len(self.img_files)data = CustomDataset(folder_path = '/home/bohare/data')len(data)此代碼正確給出了數據集的總大小。但是當我使用: img, msk = data.__getitem__(n)其中 n 是任何(圖像,掩模)對的索引并且我繪制圖像和掩模時,它們彼此不對應。如何修改/添加什么到代碼中以確保正確返回(圖像,掩碼)對?謝謝您的幫助。
1 回答

蝴蝶刀刀
TA貢獻1801條經驗 獲得超8個贊
glob.glob
在沒有訂單的情況下返回它,glob.glob
內部調用os.listdir
:
os.listdir(path) 返回一個列表,其中包含路徑給定目錄中的條目名稱。該列表的順序是任意的。它不包括特殊條目“.”?和“..”,即使它們存在于目錄中。
要解決這個問題,您可以對兩者進行排序,使順序相同:
self.img_files?=?sorted(glob.glob(os.path.join(folder_path,'images','*.png'))) self.mask_files?=?sorted(glob.glob(os.path.join(folder_path,'masks','*.png')))
添加回答
舉報
0/150
提交
取消