pytouch下の大型データセット(大型画像)の導入方式


touch.utils.data.Dataset類で画像データを処理する場合、
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の大規模データ集(大規模画像)の導入方式は小編集が皆さんに提供したすべての内容です。参考にしていただきたいです。どうぞよろしくお願いします。