🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

PyTorch

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

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

Q&A

解決済

5回答

3015閲覧

Pytorch IndexError: The shape of the mask [X,X] at index at index 1does not match the shape [再投稿]

k_egashi

総合スコア14

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

PyTorch

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

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

0グッド

0クリップ

投稿2019/12/10 01:06

#前提・実現したいこと

Pytorchで以下のレポジトリの入力画像サイズを300x300→224x224に変更してSSDを動かしたいです。
https://github.com/qfgaohao/pytorch-ssd

前段のネットワークとしてMobileNetv1を使う予定ですので
~/vision/ssd/config/mobilenet1_ssd_config.py
を以下のように変更しました。

Python3

1# before 2image_size = 300 3specs = [ 4 #SSDSpec('feature_map_size', 'shrinkage', 'box_sizes', 'aspect_ratios') 5 SSDSpec(19, 16, SSDBoxSizes(60, 105), [2, 3]), 6 SSDSpec(10, 32, SSDBoxSizes(105, 150), [2, 3]), 7 SSDSpec(5, 64, SSDBoxSizes(150, 195), [2, 3]), 8 SSDSpec(3, 100, SSDBoxSizes(195, 240), [2, 3]), 9 SSDSpec(2, 150, SSDBoxSizes(240, 285), [2, 3]), 10 SSDSpec(1, 300, SSDBoxSizes(285, 330), [2, 3]) 11]

Python3

1# after 2image_size = 224 3specs = [ 4 #SSDSpec('feature_map_size', 'shrinkage', 'box_sizes', 'aspect_ratios') 5 SSDSpec(16, 7, SSDBoxSizes(30, 60), [2]), 6 SSDSpec(12, 14, SSDBoxSizes(60, 100), [2, 3]), 7 SSDSpec(8, 28, SSDBoxSizes(90, 140), [2, 3]), 8 SSDSpec(4, 56, SSDBoxSizes(120, 180), [2, 3]), 9 SSDSpec(2, 112, SSDBoxSizes(150, 210), [2]), 10 SSDSpec(1, 224, SSDBoxSizes(200, 240), [2]) 11]

その後、以下のコマンドで学習を行おうとしました。

python3 train_ssd.py --datasets /data/ --validation_dataset /data/ --dataset_type open_images --net mb1-ssd --batch_size 10

#発生している問題・エラーメッセージ
次元数[10, 2388]と[10,1602]は違う旨のエラーが発生しています。
次元数を揃えるためにどこを修正すれば良いのかわからず困っています。
お力添えのほどどうぞよろしくお願い致します。

/usr/local/lib/python3.6/dist-packages/torch/optim/lr_scheduler.py:100: UserWarning: Detected call of `lr_scheduler.step()` before `optimizer.step()`. In PyTorch 1.1.0 and later, you should call them in the opposite order: `optimizer.step()` before `lr_scheduler.step()`. Failure to do this will result in PyTorch skipping the first value of the learning rate schedule.See more details at https://pytorch.org/docs/stable/optim.html#how-to-adjust-learning-rate "https://pytorch.org/docs/stable/optim.html#how-to-adjust-learning-rate", UserWarning) Traceback (most recent call last): File "train_ssd.py", line 319, in <module> device=DEVICE, debug_steps=args.debug_steps, epoch=epoch) File "train_ssd.py", line 123, in train regression_loss, classification_loss = criterion(confidence, locations, labels, boxes) # TODO CHANGE BOXES File "/usr/local/lib/python3.6/dist-packages/torch/nn/modules/module.py", line 541, in __call__ result = self.forward(*input, **kwargs) File "/work/pytorch-ssd/vision/nn/multibox_loss.py", line 38, in forward mask = box_utils.hard_negative_mining(loss, labels, self.neg_pos_ratio) File "/work/pytorch-ssd/vision/utils/box_utils.py", line 217, in hard_negative_mining loss[pos_mask] = -math.inf IndexError: The shape of the mask [10, 2388] at index 1does not match the shape of the indexed tensor [10, 1602] at index 1

#試したこと
前半の次元数[10,2388]に関しては
10 = バッチサイズ
2388 = 各SSDSpec毎の「(feature_map^2)x(aspect_ratios)」の合計
であることがわかりました。
しかし、後半の1602が何を足しあわせて発生したものなのかわからずにいます。
[10,1602]は224x224の時の数値で、300x300の時は[10,3000]となっておりました。

#補足情報(FW/ツールのバージョンなど)
Python 3.6
Pytorch 1.3.1

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

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

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

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

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

guest

回答5

0

SSDのネットワーク構造を調査し解決致しました。
備忘録も兼ねてなるべく詳細に書かせて頂きます。
各SSDSpecに紐付いているレイヤーの出力feature_map_sizeを計算して正解を求めました。

正解となるSSDSpecのfeature_map_sizeの組み合わせは以下になります。

Python3

1# mobilenetv1_ssd_config.py 2 3image_size = 224 4 5specs = [ 6 #SSDSpec('feature_map_size', 'shrinkage', 'box_sizes', 'aspect_ratios') 7 SSDSpec(14, 7, SSDBoxSizes(30, 60), [2, 3]), # mb1 layer 12 8 SSDSpec(7, 14, SSDBoxSizes(60, 100), [2, 3]), # mb1 layer 14 9 SSDSpec(4, 28, SSDBoxSizes(90, 140), [2, 3]), # extras layer 1 10 SSDSpec(2, 56, SSDBoxSizes(120, 180), [2, 3]), # extras layer 2 11 SSDSpec(1, 112, SSDBoxSizes(150, 210), [2, 3]), # extras layer 3 12 SSDSpec(1, 224, SSDBoxSizes(200, 240), [2, 3]) # extras layer 4 13]

まず、SSDの前段部分になるmobilenetのlayer12と14がSSDSpecの1つ目、2つ目に紐付いています。
vision/nn/mobilenet.pyを確認するとlayer12までにstride=2が4回、layer14までにstride=2が5回あります。

stride=2のconvを一回行う毎にfeature_map_sizeは1/2(切り上げ)が行われるため,1つ目は224/16 = 14,2つ目は224/32 = 7となります。

SSDSpecの3~6つ目はSSDのネットワークを構成するサブネットワークの一つであるextrasと紐付いています。
vision/ssd/mobilenetv1_ssd.pyを確認するとfeature_map_sizeは以下であるとわかりました。

Python3

1extras = ModuleList([ 2 Sequential( 3 Conv2d(in_channels=1024, out_channels=256, kernel_size=1), 4 ReLU(), 5 Conv2d(in_channels=256, out_channels=512, kernel_size=3, stride=2, padding=1), 6 ReLU() 7 ), # 4 x 4 x 512 → SSDSpec 3 8 Sequential( 9 Conv2d(in_channels=512, out_channels=128, kernel_size=1), 10 ReLU(), 11 Conv2d(in_channels=128, out_channels=256, kernel_size=3, stride=2, padding=1), 12 ReLU() 13 ), # 2 x 2 x 256 → SSDSpec 4 14 Sequential( 15 Conv2d(in_channels=256, out_channels=128, kernel_size=1), 16 ReLU(), 17 Conv2d(in_channels=128, out_channels=256, kernel_size=3, stride=2, padding=1), 18 ReLU() 19 ), # 1 x 1 x 256 → SSDSpec 5 20 Sequential( 21 Conv2d(in_channels=256, out_channels=128, kernel_size=1), 22 ReLU(), 23 Conv2d(in_channels=128, out_channels=256, kernel_size=3, stride=2, padding=1), 24 ReLU() 25 ) # 1 x 1 x 256 → SSDSpec 6

全てのfeature_map_sizeがわかったので最初に記載した形になります。

投稿2020/01/07 10:53

k_egashi

総合スコア14

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

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

0

自己解決

SSDのネットワーク構造を調査し解決致しました。
備忘録も兼ねてなるべく詳細に書かせて頂きます。
各SSDSpecに紐付いているレイヤーの出力feature_map_sizeを計算して正解を求めました。

正解となるSSDSpecのfeature_map_sizeの組み合わせは以下になります。

Python3

1# mobilenetv1_ssd_config.py 2 3image_size = 224 4 5specs = [ 6 #SSDSpec('feature_map_size', 'shrinkage', 'box_sizes', 'aspect_ratios') 7 SSDSpec(14, 7, SSDBoxSizes(30, 60), [2, 3]), # mb1 layer 12 8 SSDSpec(7, 14, SSDBoxSizes(60, 100), [2, 3]), # mb1 layer 14 9 SSDSpec(4, 28, SSDBoxSizes(90, 140), [2, 3]), # extras layer 1 10 SSDSpec(2, 56, SSDBoxSizes(120, 180), [2, 3]), # extras layer 2 11 SSDSpec(1, 112, SSDBoxSizes(150, 210), [2, 3]), # extras layer 3 12 SSDSpec(1, 224, SSDBoxSizes(200, 240), [2, 3]) # extras layer 4 13]

まず、SSDの前段部分になるmobilenetのlayer12と14がSSDSpecの1つ目、2つ目に紐付いています。
vision/nn/mobilenet.pyを確認するとlayer12までにstride=2が4回、layer14までにstride=2が5回あります。

stride=2のconvを一回行う毎にfeature_map_sizeは1/2(切り上げ)が行われるため,1つ目は224/16 = 14,2つ目は224/32 = 7となります。

SSDSpecの3~6つ目はSSDのネットワークを構成するサブネットワークの一つであるextrasと紐付いています。
vision/ssd/mobilenetv1_ssd.pyを確認するとfeature_map_sizeは以下であるとわかりました。

Python3

1extras = ModuleList([ 2 Sequential( 3 Conv2d(in_channels=1024, out_channels=256, kernel_size=1), 4 ReLU(), 5 Conv2d(in_channels=256, out_channels=512, kernel_size=3, stride=2, padding=1), 6 ReLU() 7 ), # 4 x 4 x 512 → SSDSpec 3 8 Sequential( 9 Conv2d(in_channels=512, out_channels=128, kernel_size=1), 10 ReLU(), 11 Conv2d(in_channels=128, out_channels=256, kernel_size=3, stride=2, padding=1), 12 ReLU() 13 ), # 2 x 2 x 256 → SSDSpec 4 14 Sequential( 15 Conv2d(in_channels=256, out_channels=128, kernel_size=1), 16 ReLU(), 17 Conv2d(in_channels=128, out_channels=256, kernel_size=3, stride=2, padding=1), 18 ReLU() 19 ), # 1 x 1 x 256 → SSDSpec 5 20 Sequential( 21 Conv2d(in_channels=256, out_channels=128, kernel_size=1), 22 ReLU(), 23 Conv2d(in_channels=128, out_channels=256, kernel_size=3, stride=2, padding=1), 24 ReLU() 25 ) # 1 x 1 x 256 → SSDSpec 6

全てのfeature_map_sizeがわかったので最初に記載した形になります。

投稿2020/01/07 10:48

k_egashi

総合スコア14

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

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

0

根本的な解決には至っていませんが
各SSDSpec毎の「(feature_map^2)x(aspect_ratios)」の合計 = 1602
になるようなfeature_map_sizeの整数の組み合わせを出力するスクリプトを作成し、
feature_map_sizeの値を決定しました。
以下の組み合わせで動作は確認しました。

Python3

1image_size = 224 2specs = [ 3 #SSDSpec('feature_map_size', 'shrinkage', 'box_sizes', 'aspect_ratios') 4 SSDSpec(11, 7, SSDBoxSizes(30, 60), [2, 3]), 5 SSDSpec(10, 14, SSDBoxSizes(60, 100), [2, 3]), 6 SSDSpec(5, 28, SSDBoxSizes(90, 140), [2, 3]), 7 SSDSpec(4, 56, SSDBoxSizes(120, 180), [2, 3]), 8 SSDSpec(2, 112, SSDBoxSizes(150, 210), [2, 3]), 9 SSDSpec(1, 224, SSDBoxSizes(200, 240), [2, 3]) 10]

引き続き根本的問題解決の方法を探っていきます。

投稿2019/12/17 07:38

k_egashi

総合スコア14

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

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

0

答えじゃなくて申し訳ないのですが、エラー箇所で調べてみたら同一のエラーの質問と対処法がgithubに何件かあったので参考にならないでしょうか?
RuntimeError: The shape of the mask [230202] at index 0 does not match the shape of the indexed tensor [0] at index 0
RuntimeError: The shape of the mask [32, 8732] at index 0 does not match the shape of the indexed tensor [279424, 1] at index 0
Google検索結果

英語ですが、Google翻訳に通すか、Chromeならページを一括で翻訳してくれる機能があるのでそれを利用するといいと思います。

投稿2019/12/10 01:25

tomy-c

総合スコア179

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

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

k_egashi

2019/12/10 06:11

参考資料頂きありがとうございます。 もう少し検証を行います。 また、ご指摘まで頂きありがとうございます。迷惑行為に近い事をしてしまい申し訳ございませんでした。片方を削除申請致しました。
guest

0

内容が全く同じ投稿を複数投稿しているみたいなので何方かを消してください。
内容を修正したい場合は下に編集ボタンが表示されているはずです。
人の善意による回答で成り立っているサイトなのでこういったマナーのよろしくない投稿をしていると回答してくれる人がいなくなりますよ。

投稿2019/12/10 01:12

編集2019/12/10 01:15
tomy-c

総合スコア179

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問