画像に関するタスクを扱っている際に、事前学習済みの重みを利用した転移学習を行うことは良い精度を出すことが多く広く使われています。Kearsには学習済みのいくつかのモデルが用意されており簡単に転移学習を行うことが出来ます。
公式のサンプルなどを見れば問題無いのですが、この事前学習済みのモデルを使う際にはpreprocess_input()という関数を呼び出して画像に対して前処理を行うことが想定されています。しかしながら、いくつかのブログ記事などを見たところpreprocess_input()を呼ばずに、転移学習を行っている記事があったため今回この記事を書きました。厄介なことに、preprocess_input()を呼ばなくても、VGGやResNetなどの高容量なモデルは前処理分の処理を学習するようで割と良い精度を出します。本質的には前処理しないことで、無駄な訓練が行われていることになるので、忘れずにpreprocess_input()を呼ぶべきでしょう。
ちなみにpreprocess_input()の中では、モデルによって画像の正規化、ImageNetデータセットのRGB各チャンネルごとの平均値を引く、などの処理が行われているようです。