質問: ResNet50(weights='imagenet') ``` しかし、この論文ではGSの医療画像をRGB変換するのではなく、**RGBのImageNetをGSに変換**し、学習パラメータを使用して転移学習させる方が精度向上する趣旨の内容であります。確かにGSの医療画像をRGB変換してしまうとRGBのImageNetで学んだRGBという色情報を医療画像の学習で生かし切れない学習になると個人的にも思っております。この論文ではわざわざImageNetをダウンロードしてRGBをGSに変換しております。しかしImageNetは1400万枚もの画像ですので、画像ダウンロードではなく、できればGSのImageNetで学習した際のパラメータとしての情報を取得したいと考えております。このGSのImageNetで学習したパラメータというのはどこかに落ちているのでしょうか?。それとも既に引数として指定できるのでしょうか?。私なりに様々なサイトを探して見ましたが見つけることができませんでしたので、今回こちらのteratailで確認致したいと思った次第です。 大変恐縮ですが、是非ご教授頂けますと幸いです。 よろしくお願い申し上げます。
回答: > > できればGSのImageNetで学習した際のパラメータとしての情報を取得したいと考えております。このGSのImageNetで学習したパラメータというのはどこかに落ちているのでしょうか?。それとも既に引数として指定できるのでしょうか? > > > 私の知る限り、ImageNet をグレースケール化して学習した事前学習済みが配布されているのは見たことないのですね。 なので、入力チャンネルが1チャンネルの事前学習済みモデルがネットに落ちていなければ、ImageNet の画像をグレースケール化して自分で学習が必要です。 計算リソースが限られていて ImageNet の学習が難しいようであれば、Grayscale -> RGB に変換して、RGB の学習済みモデルを使うのが無難かと思います。 3チャンネル → 1チャンネルで変わるのは最初の畳み込み層の重みの形状だけなので、それ以外の層は事前学習済みモデルの重みで初期化して最初の畳み込み層だけ転移学習するというアイデアもありますが、上手くいくかはやってみないとわかりません。 追記 > > Kerasの場合、ImageNetのパラメータを用いる時は上記のようにImageNetパラメータを選択しますので、1部分だけ用いることが可能なのか疑問に思いました。 > > > Keras / TensorFlow でもできるとは思いますが、自分は Pytorch しか使わないので具体的なやり方はわからないです。 Pytorch だと以下のように3チャンネルのモデルで事前学習済みの重みで初期化したあと、最初の畳み込み層だけ変えれば、1チャンネルを入力にするモデルができます。 ``` import torch.nn as nn import torchvision.models as models # ResNet-18 を作成する。 model = models.resnet18(pretrained=True) # 最初の畳み込み層だけ変更 model.conv1 = nn.Conv2d(1, 64, kernel_size=7, stride=2, padding=3, bias=False) print(model) ```