<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
最近在跑一篇影象修復論文的程式碼,設定好環境之後開始執行,發現資料一直載入不進去。
害,還是得看人家程式碼咋寫的,一句一句看邏輯,準能找出問題。通讀dataset後,發現了問題所在,終於成功載入了資料集。
專案結構
主要的目的就是從資料集中讀取到彩色影象和掩碼影象。
程式碼
程式碼中涉及到torch.transforms、合併路徑等知識點,我在程式碼中都進行了詳細的註釋,路徑要對照著專案結構,如果自己用的話要根據專案結構去將相對路徑改過來。dataset.py
:當前的工作路徑:…OT-GAN-for-Inpainting-mastersrcdata
import os import math import numpy as np from glob import glob from random import shuffle from PIL import Image, ImageFilter import torch import torchvision.transforms.functional as F import torchvision.transforms as transforms from torch.utils.data import Dataset, DataLoader class InpaintingData(Dataset): def __init__(self, args): super(Dataset, self).__init__() # 繼承Dataset的父類別的初始化函數 self.w = self.h = args.image_size # 通過args傳入新的屬性---影象的w和h self.mask_type = args.mask_type # 通過args傳入新的屬性---mask_type # image and mask self.image_path = [] #建立image_path的陣列 for ext in ['*.jpg', '*.png']: # 獲取每一個字尾為.jpg或者.png的圖片,為ext # 將dir_image、data_train和ext拼接作為圖片的路徑,並將其存入到陣列image_path之中,glob()獲取一個lsit集合 self.image_path.extend(glob(os.path.join(args.dir_image, args.data_train, ext))) self.mask_path = glob(os.path.join(args.dir_mask, args.mask_type, '*.png')) #拼接dir_mask、mask_type和路徑下所有的.png作為mask_path # augmentation self.img_trans = transforms.Compose([ #接收一個 transforms方法的list為引數,將這些操作組合到一起,返回一個新的tranforms transforms.RandomResizedCrop(args.image_size), #隨機隨機長寬比裁剪,大小為image_size transforms.RandomHorizontalFlip(), #隨機水平翻轉 transforms.ColorJitter(0.05, 0.05, 0.05, 0.05), #改變影象的亮度、對比度、飽和度和色調。 transforms.ToTensor()]) # 轉為tensor,並歸一化至[0-1] self.mask_trans = transforms.Compose([ transforms.Resize(args.image_size, interpolation=transforms.InterpolationMode.NEAREST), #將輸入影象調整為給定的大小,interpolation是插值方式,此處是預設值NEAREST transforms.RandomHorizontalFlip(), #隨機水平翻轉 transforms.RandomRotation( #隨機旋轉 (0, 45), interpolation=transforms.InterpolationMode.NEAREST), #(0, 45)是角度 ]) def __len__(self): # __len__和__getitem__DataSet類必須實現的靜態方法 return len(self.image_path) def __getitem__(self, index): # load image image = Image.open(self.image_path[index]).convert('RGB') #獲取影象,並將其轉化為RGB(3x8位元畫素)模式 filename = os.path.basename(self.image_path[index]) #獲取圖片的路徑 if self.mask_type == 'pconv': #如果mask_type為pconv index = np.random.randint(0, len(self.mask_path)) #隨機從mask_path中獲取一個下標 mask = Image.open(self.mask_path[index]) #根據下標獲取mask圖片 mask = mask.convert('L') #將mask圖片轉化為L(8位元畫素的黑白圖片,0表示黑,255表示白)模式 else: # 構造mask,有mask資料集的話就執行不到這裡 mask = np.zeros((self.h, self.w)).astype(np.uint8) #構造與h和w一樣大的圖片,都用0填充,並將其轉換為uint8 mask[self.h // 4:self.h // 4 * 3, self.w // 4:self.w // 4 * 3] = 1 mask = Image.fromarray(m).convert('L') # augment image = self.img_trans(image) * 2. - 1. # 資料標準化,將輸出限定在一定的範圍 mask = F.to_tensor(self.mask_trans(mask)) # 將轉化後的mask影象轉化為tensor return image, mask, filename #返回 if __name__ == '__main__': from attrdict import AttrDict args = { 'dir_image': '../../examples/logos', 'data_train': 'image', 'dir_mask': '../../examples/logos/mask', 'mask_type': 'pconv', 'image_size': 512 } args = AttrDict(args) # 將上面定義的引數傳入AttrDict()作為新引數 data = InpaintingData(args) #建立InpaintingData物件 print(len(data), len(data.mask_path)) #輸出data的長度,mask的長度 img, mask, filename = data[0] # 獲取第一張圖片 print(img.size(), mask.size(), filename) #列印上述資訊
輸出:
再Debug一下看:
如下圖所示,執行玩載入資料的程式碼之後,已經成功獲取到資料
這段程式碼可以作為讀取資料集的一個DataSet類的基礎類,可以擴充進行修改,以後有類似需要可以拿過來修改。
[1] https://github.com/researchmm/AOT-GAN-for-Inpainting
到此這篇關於pytorch dataset實戰----讀取資料集的文章就介紹到這了,更多相關pytorch 讀取資料集內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45