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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

PyTorch

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2530閲覧

【Pytorch・セマンティックセグメンテーション】学習時に発生するテンソルサイズのエラー

Gonbe_k

総合スコア1

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

PyTorch

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/10/20 09:09

前提・実現したいこと

現在Pytorchを使ったセグメンテーションを行っています。
https://hituji-ws.com/code/python/dl-seg2/
こちらのサイトを参考に作業を進め、学習の段階までたどり着いたのですが、そこで以下のようなエラーが発生しました。

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

Epoch: 0 train: 100%|███| 10/10 [00:04<00:00, 2.38it/s, dice_loss - 0.2074, iou_score - 0.8564] valid: 0%| | 0/11 [00:00<?, ?it/s] Sizes of tensors must match except in dimension 2. Got 25 and 26 (The offending index is 0) Traceback (most recent call last): File "segment_training.py", line 218, in <module> if max_score < val_logs['iou_score']: NameError: name 'val_logs' is not defined

該当のソースコード

python

1valid_epoch = smp.utils.train.ValidEpoch( 2 model, 3 loss=loss, 4 metrics=metrics, 5 device=DEVICE, 6 verbose=True, 7) 8 9# 学習 40EPoch 25Epochで学習率を下げる 10max_score = 0 11for i in range(0, 40): 12 13 print('\nEpoch: {}'.format(i)) 14 try: 15 train_logs = train_epoch.run(train_loader) 16 val_logs = valid_epoch.run(valid_loader) 17 except Exception as e: 18 print(e) 19 20 # do something (save model, change lr, etc.) 21 if max_score < val_logs['iou_score']: 22 max_score = val_logs['iou_score'] 23 torch.save(model, f'{DECODER}_{ENCODER}.pth') 24 print('Model saved!')

試したこと

ネットで検索したところ、Pytorchでのモデル作成ではmodel.train()とmodel.eval()を使い分けて効率よく学習を行うらしいことは分かったのですが、train()で成功したものがなぜeval()では失敗するのかわかりませんでした。画像サイズは訓練用と検証用で同じサイズのものを使用しています。ご助力頂ければ助かります。

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

Windows 10
Python 3.7.6
torch 1.7.1
画像サイズは400×400です。

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

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

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

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

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

jbpb0

2021/10/20 10:47

参考Webページの「データセットを作成」以降のコードは、そのままですか? 変えてるところはありませんか? 「val_dir =...」で指定したディレクトリには、「images」と「masks」というディレクトリがあり、それぞれの中に必要なファイルが置かれてますでしょうか?
Gonbe_k

2021/10/20 11:28

ご指摘ありがとうございます‼︎ 参照コードはlabelを"dog"から自分の検出対象に変えた程度で、ほとんど一緒です。明日もう一度確認してみます。 ディレクトリに関して、生の画像が入った「images」とそのマスク画像(白黒)が入った「masks」というディレクトリを訓練用と検証用で用意しています。
jbpb0

2021/10/20 14:41

> labelを"dog"から自分の検出対象に変えた 「label」の種類はいくつでしょうか? 参考Webページの以下の「dog」の部分を全て、矛盾無く修正してますでしょうか? # データセット class Dataset(BaseDataset): CLASSES = ['background', 'dog'] # モデルを宣言 ENCODER = 'resnet34' ENCODER_WEIGHTS = 'imagenet' CLASSES = ['dog'] # データセットを作成 train_dataset = Dataset( os.path.join(train_dir, 'images'), os.path.join(train_dir, 'masks'), augmentation=get_training_augmentation(), preprocessing=get_preprocessing(preprocessing_fn), classes=['dog'], ) valid_dataset = Dataset( os.path.join(val_dir, 'images'), os.path.join(val_dir, 'masks'), preprocessing=get_preprocessing(preprocessing_fn), classes=['dog'], )
Gonbe_k

2021/10/21 07:51

ラベルの種類は1種類です。私の場合は写真から道路を抽出したいので"road"というラベルに変更しています。ラベルは矛盾なく修正していました。念のためもう一度プログラムをコピーしなおして、まったく修正せずに実行してみましたが結果は変わりませんでした。
jbpb0

2021/10/23 05:50

当方のMacのPythonで実行してみましたが、エラー出ずに学習進みました 確認手順は下記の通りです Pythonに必要なものをインストール 当方では「segmentation_models_pytorch」「albumentations」「imgaug」 https://github.com/hituji1012/seg_test/ から一式落として展開 Jupyter起動し、展開した中の「train.ipynb」を開き、二ヶ所の「cuda」を「cpu」に変更(MacはCUDA使えないので)し、他はそのままで実行 GPU無しだと時間がかかるので、5Epochまで終了したところで中断しましたが、そこまでは普通に学習進んでました 質問者さんの環境で、上記のように https://github.com/hituji1012/seg_test/ にもともと入ってた画像データセットを使ってそのまま実行した場合も、質問のエラーが出るのでしょうか?
jbpb0

2021/10/23 05:58

あるいは、「train」は正常に完了してるみたいなので、「val」の内容を「train」と全く同じにして実行してみるとか (質問者さん作成画像データセットの「train」を、「train」と「val」の両方に使ってみる)
Gonbe_k

2021/10/26 06:53

返信が遅くなってしまい申し訳ありません。恥ずかしながらjupyter notebookというものの存在を知らなかったので悪戦苦闘していました。 新しく仮想環境を作り、jupyter notebookで画像から作り直して実行したところうまくいきました!! これまでjupyter notebookを知らず、Web上のコマンドをテキストエディタにコピーしてAnaconda promptで実行するという方法をとっていたのでその際にミスをしていたのだと思います。 学習もうまくいって道路のセグメンテーションをすることができました。お世話になりました!!
guest

回答1

0

ベストアンサー

当方のMacのPythonで実行してみましたが、エラー出ずに学習進みました
確認手順は下記の通りです

Pythonに必要なものをインストール
当方では「segmentation_models_pytorch」「albumentations」「imgaug」

seg_test
から一式落として展開
Jupyter起動し、展開した中の「train.ipynb」を開き、二ヶ所の「cuda」を「cpu」に変更(MacはCUDA使えないので)し、他はそのままで実行

GPU無しだと時間がかかるので、5Epochまで終了したところで中断しましたが、そこまでは普通に学習進んでました

質問者さんが独自に作成したコードまたは学習用データセットに不備がある可能性があるので、ご確認ください

投稿2021/10/26 07:46

jbpb0

総合スコア7653

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問