質問するログイン新規登録

回答編集履歴

5

d

2020/07/21 04:30

投稿

tiitoi
tiitoi

スコア21962

answer CHANGED
@@ -20,7 +20,7 @@
20
20
  # ResNet-18 を作成する。
21
21
  model = models.resnet18(pretrained=True)
22
22
 
23
- # 入力層だけ変更
23
+ # 最初の畳み込み層だけ変更
24
24
  model.conv1 = nn.Conv2d(1, 64, kernel_size=7, stride=2, padding=3, bias=False)
25
25
  print(model)
26
26
  ```

4

d

2020/07/21 04:30

投稿

tiitoi
tiitoi

スコア21962

answer CHANGED
@@ -4,4 +4,23 @@
4
4
  なので、入力チャンネルが1チャンネルの事前学習済みモデルがネットに落ちていなければ、ImageNet の画像をグレースケール化して自分で学習が必要です。
5
5
  計算リソースが限られていて ImageNet の学習が難しいようであれば、Grayscale -> RGB に変換して、RGB の学習済みモデルを使うのが無難かと思います。
6
6
 
7
- 3チャンネル → 1チャンネルで変わるのは最初の畳み込み層の重みの形状だけなので、それ以外の層は事前学習済みモデルの重みで初期化して最初の畳み込み層だけ転移学習するというアイデアもありますが、上手くいくかはやってみないとわかりません。
7
+ 3チャンネル → 1チャンネルで変わるのは最初の畳み込み層の重みの形状だけなので、それ以外の層は事前学習済みモデルの重みで初期化して最初の畳み込み層だけ転移学習するというアイデアもありますが、上手くいくかはやってみないとわかりません。
8
+
9
+ ## 追記
10
+
11
+ > Kerasの場合、ImageNetのパラメータを用いる時は上記のようにImageNetパラメータを選択しますので、1部分だけ用いることが可能なのか疑問に思いました。
12
+
13
+ Keras / TensorFlow でもできるとは思いますが、自分は Pytorch しか使わないので具体的なやり方はわからないです。
14
+ Pytorch だと以下のように3チャンネルのモデルで事前学習済みの重みで初期化したあと、最初の畳み込み層だけ変えれば、1チャンネルを入力にするモデルができます。
15
+
16
+ ```python
17
+ import torch.nn as nn
18
+ import torchvision.models as models
19
+
20
+ # ResNet-18 を作成する。
21
+ model = models.resnet18(pretrained=True)
22
+
23
+ # 入力層だけ変更
24
+ model.conv1 = nn.Conv2d(1, 64, kernel_size=7, stride=2, padding=3, bias=False)
25
+ print(model)
26
+ ```

3

修正

2020/07/21 04:29

投稿

tiitoi
tiitoi

スコア21962

answer CHANGED
@@ -4,4 +4,4 @@
4
4
  なので、入力チャンネルが1チャンネルの事前学習済みモデルがネットに落ちていなければ、ImageNet の画像をグレースケール化して自分で学習が必要です。
5
5
  計算リソースが限られていて ImageNet の学習が難しいようであれば、Grayscale -> RGB に変換して、RGB の学習済みモデルを使うのが無難かと思います。
6
6
 
7
- 3チャンネル → 1チャンネルで変わるのは最初の畳み込み層の重みの形状だけなので、それ以外の層は事前学習済みモデルの重みで初期化して入力層だけ転移学習するというアイデアもありますが、上手くいくかはやってみないとわかりません。
7
+ 3チャンネル → 1チャンネルで変わるのは最初の畳み込み層の重みの形状だけなので、それ以外の層は事前学習済みモデルの重みで初期化して最初の畳み込み層だけ転移学習するというアイデアもありますが、上手くいくかはやってみないとわかりません。

2

修正

2020/07/20 16:32

投稿

tiitoi
tiitoi

スコア21962

answer CHANGED
@@ -1,7 +1,7 @@
1
1
  > できればGSのImageNetで学習した際のパラメータとしての情報を取得したいと考えております。このGSのImageNetで学習したパラメータというのはどこかに落ちているのでしょうか?。それとも既に引数として指定できるのでしょうか?
2
2
 
3
3
  私の知る限り、ImageNet をグレースケール化して学習した事前学習済みが配布されているのは見たことないのですね。
4
- なので、入力チャンネルが1チャンネルの事前学習済みモデルがネットに落ちていなければ、ImageNet の画像をグレースケール化して事前で学習が必要です。
4
+ なので、入力チャンネルが1チャンネルの事前学習済みモデルがネットに落ちていなければ、ImageNet の画像をグレースケール化して自分で学習が必要です。
5
5
  計算リソースが限られていて ImageNet の学習が難しいようであれば、Grayscale -> RGB に変換して、RGB の学習済みモデルを使うのが無難かと思います。
6
6
 
7
7
  3チャンネル → 1チャンネルで変わるのは最初の畳み込み層の重みの形状だけなので、それ以外の層は事前学習済みモデルの重みで初期化して入力層だけ転移学習するというアイデアもありますが、上手くいくかはやってみないとわかりません。

1

修正

2020/07/20 16:31

投稿

tiitoi
tiitoi

スコア21962

answer CHANGED
@@ -1,7 +1,7 @@
1
1
  > できればGSのImageNetで学習した際のパラメータとしての情報を取得したいと考えております。このGSのImageNetで学習したパラメータというのはどこかに落ちているのでしょうか?。それとも既に引数として指定できるのでしょうか?
2
2
 
3
3
  私の知る限り、ImageNet をグレースケール化して学習した事前学習済みが配布されているのは見たことないのですね。
4
- なので、入力チャンネル1チャンネルにしたモデルを作りたのであれば、ImageNet の画像をグレースケール化して学習が必要です。
4
+ なので、入力チャンネル1チャンネルの事前学習済みモデルがネットに落ちてなければ、ImageNet の画像をグレースケール化して事前で学習が必要です。
5
5
  計算リソースが限られていて ImageNet の学習が難しいようであれば、Grayscale -> RGB に変換して、RGB の学習済みモデルを使うのが無難かと思います。
6
6
 
7
7
  3チャンネル → 1チャンネルで変わるのは最初の畳み込み層の重みの形状だけなので、それ以外の層は事前学習済みモデルの重みで初期化して入力層だけ転移学習するというアイデアもありますが、上手くいくかはやってみないとわかりません。