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

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

新規登録して質問してみよう
ただいま回答率
85.35%
深層学習

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

PyTorch

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

機械学習

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

Python

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

Q&A

解決済

1回答

19034閲覧

Resnet 画像サイズが224×224以外の場合の処理

asaliquid1011

総合スコア16

深層学習

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

PyTorch

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

機械学習

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

Python

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

0グッド

1クリップ

投稿2021/05/08 14:00

resnetベースで転移学習を行おうとしています。(torchvisionのmodelを使用)
resnet含むImagenet系のモデルを扱う場合、入力サイズを224×224にする必要がある、との記載をよく見るのですが、
サイズを合わせなくても学習/推定が実行でき、かつ、それなりに良い学習ができています。
resizeする時間がもったいないので可能であれば入力サイズを整えずに学習したいのですが、
処理が不明なため判断がついていません。

画像サイズが224×224でない場合、どのような処理を実行しているのでしょうか?
また、どのような問題が発生する可能性があるのでしょうか?
・内部でリサイズしている
・入力画像が小さい場合は、ゼロパディングしている。
・入力画像が大きい場合は、ランダムクロップしている。
など

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

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

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

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

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

guest

回答1

0

ベストアンサー

「サイズを合わせなくても学習/推定が実行でき、かつ、それなりに良い学習ができる」という質問者様の感覚は正しいと思います。しかし、特に転移学習で精度を上げるには、指定サイズに前処理した方が良いでしょう。

PyTorchのResNetは以下のような層構成になっています。

Python

1ResNet( 2 (conv1): Conv2d(3, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False) 3 (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) 4 (relu): ReLU(inplace=True) 5 (maxpool): MaxPool2d(kernel_size=3, stride=2, padding=1, dilation=1, ceil_mode=False) 6中略 7 (avgpool): AdaptiveAvgPool2d(output_size=(1, 1)) 8 (fc): Linear(in_features=512, out_features=1000, bias=True) 9)

最後の全結合層の手前にあるavgpoolが犯人?で、AdaptiveAvgPool2dが任意のサイズの画像をoutput_sizeにpoolingします。内部的には画像サイズとoutput_sizeとの関係でkernel_sizeを自動調整しています。これにより、任意のサイズの入力に対して動作ができます。

参考: Why AvgPool2d instead of AdaptiveAvgPool2d for ResNet?
PyTorch本家とは直接関係無い派生ソフトの質疑ですが、「なぜわざわざResNetのAdaptiveAvgPool2dを(自動サイズ調整の無い)AvgPool2dに入れ替えたのか?」「224×224の画像しか前提としていないからだ」といったやりとりがあります。

しかし、転移学習をする元となるpretrainedされた重みパラメータは、ImageNetをもとに224×224サイズに切り出した画像を学習してできたものです。よって、多少のサイズのズレは吸収されると思いますが、大きくズレてしまうと精度が悪くなると思われます。

参考: ImageNetの訓練時の前処理についてまとめた
ResNetほか代表的モデルの前処理方法を解説しています。単に224×224なら良いというわけではなく、元の前処理の方法をなるべく踏襲しましょう。

なおResNetの記載はデータ拡張を考慮したものですので、推論だけさせる場合はAlexNetの記載にある、「画像の短辺の長さが256になるように画像を再スケーリングし,得られた画像から中央の256×256のパッチを切り取る」で十分です。具体的な前処理コードは以下の記事が参考になります。

参考: Pytorch – 学習済みモデルで画像分類を行う方法

投稿2021/05/08 23:19

編集2021/05/08 23:47
toast-uz

総合スコア3266

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問