質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

Q&A

解決済

1回答

1561閲覧

pytorch 画像ペア 独自データセット 作り方

shuring

総合スコア19

PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

0グッド

0クリップ

投稿2021/10/10 04:54

編集2021/10/12 12:01

前提・実現したいこと

画像ペアのデータセットを作成して、バッチサイズずつ画像を取得したいのですが、
以下のエラーがでます。

データセットからカラー画像とグレー画像のペア画像をつくっています。

発生している問題・エラーメッセージ

RuntimeError: stack expects each tensor to be equal size, but got [3, 256, 256] at entry 0 and [1, 256, 256] at entry 46

該当のソースコード

class AlignedDataset(Dataset): def __init__(self, config): self.config = config #生の画像データ self.A_list = self.make_dataset()[0] #グレースケール画像データ self.B_list = self.make_dataset()[1] def __len__(self): return len(self.A_list) def __getitem__(self, index): A_image = self.A_list[index] B_image = self.B_list[index] A = self.transform(image=A_image) B = self.transform(image=B_image) #Aは入力画像なので、 グレースケール #Bはカラー画像 return {'A': B, 'B':A} def make_dataset(self): A=[] B=[] image_list = glob.glob(self.config.dataroot + '*') #データ数が大量すぎるので、減らす。不必要であれば、コメントアウト image_list = image_list[:100] for i in image_list: image = Image.open(i) gray_image = image.convert('L').convert('RGB') A.append(image) B.append(gray_image) return A, B def transform(self, image): transform = transforms.Compose([ transforms.Resize(self.config.load_size), transforms.CenterCrop(self.config.crop_size), transforms.ToTensor(), transforms.Normalize([0.5],[0.5]) ]) return transform(image) class Config(): def __init__(self): self.batch_size = 64 self.load_size=286 self.crop_size =256 self.dataroot='/Users/name/DATASETS/train/' def to_dict(self): parametars ={ 'batch_size':self.batch_size, 'load_size':self.load_size, 'crop_size':self.crop_size, 'dataroot':self.dataroot, } return parametars config = Config() dataset = AlignedDataset(config=config) dataloader = DataLoader( dataset=dataset, batch_size=config.batch_size, shuffle=True ) for i in dataloader: pass >>>エラー

試したこと

torchvision.transforms.Resizeではなく、pillowでresizeしてから、ToTensor(), Normailze()しても同じエラーがでました。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

データセットの画像にグレースケールの画像が含まれていたため。
このプログラムでは、チャネル数を3にすることができていなかった。

解決法は、
グレースケール画像を削除
グレースケール画像をチャネル3にする穴埋めが必要

投稿2021/10/15 09:08

shuring

総合スコア19

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問