pytouch下の大型データセット(大型画像)の導入方式
touch.utils.data.Dataset類で画像データを処理する場合、
1.基本的な3つの関数を定義する必要があります。以下は基本的な流れです。
2.Dataset類が返したデータの種類は、あなたが読み込んだ時のタイプと一致しています。しかし、pytouchで使うと、ヒントが出ます。
しかし、大きなデータを扱う場合は、それが遅くなります。
この時、直接tochvisionを使ってデータ変換をすることを提案します。
以上のpytouchの大規模データ集(大規模画像)の導入方式は小編集が皆さんに提供したすべての内容です。参考にしていただきたいです。どうぞよろしくお願いします。
1.基本的な3つの関数を定義する必要があります。以下は基本的な流れです。
class our_datasets(Data.Dataset):
def __init__(self,root,is_resize=False,is_transfrom=False):
# 。 。
self.root=root
self.is_resize=is_resize
self.is_transfrom=is_transfrom
self.imgs_list=...#
self.labs_list=...
def __getitem__(self, index):
img_path,lab=self.imgs_list[index],self.labs_list[index]
# PIL .
img_data = Image.open(img_path).convert('RGB')
# ,
if self.is_resize:
img_data = img_data.resize((self.is_resize[0], self.is_resize[1]), Image.ANTIALIAS)
# ,
if self.is_transfrom:
img_data=self.is_transfrom(img_data)
return img_data,lab
def __len__(self):
return len(self.imgs_list)
ここで、画像を読み込む手順を__u u uに置きます。getitem_u,このように置くと、メモリに対する要求が多くなります。データのルートをメモリに導入しただけです。この画像データを読み込む必要がある時に、また読み込むようにします。この部分を___u uに置いたらinit_中には一回に画像データをメモリにロードします。データ量が多すぎると、直接カードが死にます。2.Dataset類が返したデータの種類は、あなたが読み込んだ時のタイプと一致しています。しかし、pytouchで使うと、ヒントが出ます。
TypeError: batch must contain tensors, numbers, dicts or lists; found <class 'PIL.Image.Image'>
通常、データが大きくない時は、データを読んでから一言を加えてnumpy.arrayタイプに変換します。しかし、大きなデータを扱う場合は、それが遅くなります。
この時、直接tochvisionを使ってデータ変換をすることを提案します。
is_transfrom=torchvision.transforms.ToTensor()
上記のコードをDatasetクラスに加えると、より速くなります。以上のpytouchの大規模データ集(大規模画像)の導入方式は小編集が皆さんに提供したすべての内容です。参考にしていただきたいです。どうぞよろしくお願いします。