42519


Tensorflow object detection api でSSDモデルを学習させる時、fine-tune
checkpointとして学習済みモデルを指定できますが、 ~~feature-extractor にしか学習済みの重みは反映されず、feature-map
内の localization層と classification層の重みは初期化されているようでした。feature-map
にも学習済み重みを反映するにはどうすれば良いでしょうか。~~  
自由にクラス数を指定できるものの、クラス数を変えた結果変化するモデルの
classification層の形に合わせてどのように重みを載せているのかわかりませんでした。  
どのような仕組みになっているのでしょうか。  
例えば、様々な車を識別するモデルを作る際には、MSCOCOで学習済みのモデルで feature-extractor だけではなく feature-map の
localization層全てと、classification層の該当するクラスの重みのうち車に該当する重みのみを使ってモデルの重みを初期化してから転移学習をスタートさせたほうが効率が良いと考えています。ただしモデルの作り的に位置の予測数（8732）×クラス数分パラメーターを用意しないといけないため、このクラス数が変化するとモデルの形も変わるので重みを学習済みモデルから素直に乗せることができないと思っています。


CC BY-SA 3.0
2018-03-20T02:52:12.633
42507
2018-03-20T07:53:07.773
2018-03-20T07:04:54.977
26558
26558
question
python tensorflow 機械学習 深層学習
TensorFlow object detection api SSD 転移学習: クラス数を変化させた時に学習済みモデルを使ったクラス層の重みの初期化はどのように行われているのか


<https://github.com/tensorflow/models/blob/master/research/object_detection/utils/variables_helper.py#L133>

ソース内で該当するコードがありました。基本的に学習済みモデルの層と新しく作るモデルの層で名前が一致するものを比較して、同じ形だったら重みを保持しておくという処理なので、クラス数を変えてclassification層の形が変わると重みが初期化されてしまうという仕様でした。


CC BY-SA 3.0
2018-03-20T07:53:07.773
42519
2018-03-20T07:53:07.773
26558
42507
answer