質問: 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)×クラス数分パラメーターを用意しないといけないため、このクラス数が変化するとモデルの形も変わるので重みを学習済みモデルから素直に乗せることができないと思っています。
回答: ソース内で該当するコードがありました。基本的に学習済みモデルの層と新しく作るモデルの層で名前が一致するものを比較して、同じ形だったら重みを保持しておくという処理なので、クラス数を変えてclassification層の形が変わると重みが初期化されてしまうという仕様でした。