#前提・実現したいこと
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
回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。