転移学習を利用した物体認識(画像分類)技術

転移学習

転移学習は、あるデータセットで学習済みのモデルを、新しいデータセットで再学習させることをいう。目的によって、転移学習を利用することで、学習時間を短くし、物体の認識性能を向上させることが知られている。

物体認識で利用されている深層学習のアーキテクチャは、ほぼすべて、畳み込みニューラルネットワーク(CNN)を用いてる。典型的な CNN は、特徴抽出および物体認識の 2 つのブロックに分けることができる。特徴抽出ブロックにおいて、入力画像に対して畳み込み演算およびプーリング演算を行い、画像から特徴を抽出している。特徴抽出ブロックは、通常、複数の層からなる。浅い方にある層は、画像中の一般的な特徴を抽出している。この層で抽出された特徴は、画像分類にほとんど寄与していないと思われる。これに対して、深い方にある層は、画像分類に必要な具体的な特徴を抽出していると思われる。特徴抽出ブロックで抽出された特徴は、後に続く画像分類ブロックに入力され、数層の典型的なニューラルネットワークを経て、分類結果が出力される。

CNN の特徴を考慮すると、転移学習を行うとき、いくつかの戦略が考えられる。例えば、新しく学習させたいデータセットが、学習済みのデータセットと似ているならば、CNN の特徴抽出ブロックを固定させて、画像分類ブロックのみ再学習させることで、時間の節約や性能の向上を期待できる。あるいは、新しく学習させたいデータセットが、学習済みのデータセットと似ているようで似ていない場合は、特徴抽出ブロックの後半と画像分類ブロックを再学習させることで、性能の向上を期待できる。もちろん、新しく学習させたいデータセットが、学習済みのデータセットがまったく異なっているならば、特徴抽出ブロックと画像分類ブロックの両方を再学習させる必要がある。

転移学習における再学習しない層と再学習する層について

転移学習を行う場合、学習済みのモデルを選択し、再学習の戦略を決める、という順序で行う。学習済みのモデルには、VGGNet、ResNet、DenseNet、Inception などがある。Keras を使って転移学習を行う場合、Keras が提供している学習済みのモデルを利用すればよく(Keras available models)、PyTorch を使っている場合は、PyTorch が提供している学習済みのモデルを利用すればいい(PyTorch pre-trained models)。Keras や PyTorch で提供している学習済みのモデルは ImageNet とよばれるデータセットで学習させたものである。ImageNet は車、飛行機、猫、犬などの一般的なオブジェクトを含むデータセットとなっている。そのため、ImageNet で学習させたモデルを使って、生物学的な問題(種の判別や癌腫の検出など)に応用する際に、取る転移学習の戦略によって性能が大きく変動すると考えられる。

次に、学習済みのモデルに使ったデータセットとこれから新しく学習させたいデータセットの特徴に基づいて、転移学習の戦略を決める。上述のように、両方のデータセットがまったく異なっていれば、モデル(アーキテクチャ)の大部分あるいは全体を再学習させる必要がある。例えば、ImageNet で学習したモデルを使って、癌腫を検出できるように転移学習させた場合は、このケースに当たる。もし、癌腫のデータセットが大量にあれば、モデル全体を再学習した方がいいと言われている。しかし、癌腫のデータセットが少量にしかなければ、特徴抽出ブロックの最初の方を固定させて、特徴抽出ブロックの後半から画像分類ブロックまでの大部分を再学習させた方がいいと言われている。

逆に、学習済みのモデルに使ったデータセットとこれから新しく学習させたいデータセットの特徴が似ているとき、より少なめな層を再学習させればいい。例えば、すでに他の研究グループが発表した癌腫検出モデルをもらって、それを自分たちのデータセットで再学習(転移学習)をさせる場合は、このケースに当たる。この場合、両方のデータセットが似ていて、目的も似ているので、CNN の画像分類ブロックだけを再学習させればいい。また、データ量が多い場合は、CNN の特徴抽出ブロックの最後の数層を再学習させることで、より、自分たちのデータセットに適合したモデルを作ることができる。

転移学習における再学習しない層と再学習する層の決め方