# 事前学習済みネットワークと転移学習 CNNのトレーニングには多くの時間がかかり、そのためには大量のデータが必要です。しかし、多くの時間は、ネットワークが画像からパターンを抽出するために使用できる最適な低レベルフィルターを学習することに費やされます。自然な疑問が生じます - 一つのデータセットで訓練されたニューラルネットワークを使用して、完全なトレーニングプロセスを必要とせずに異なる画像を分類することはできるのでしょうか? ## [事前講義クイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/108) このアプローチは**転移学習**と呼ばれ、あるニューラルネットワークモデルから別のモデルにいくつかの知識を転送します。転移学習では、通常、大規模な画像データセット(例えば、**ImageNet**)で訓練された事前学習済みモデルから始めます。これらのモデルは、一般的な画像からさまざまな特徴を抽出するのが得意であり、多くの場合、抽出された特徴の上に分類器を構築するだけで良い結果を得ることができます。 > ✅ 転移学習は、教育などの他の学問分野でも見られる用語です。これは、一つのドメインから知識を取り出し、別のドメインに適用するプロセスを指します。 ## 特徴抽出器としての事前学習済みモデル 前のセクションで話した畳み込みネットワークは、いくつかの層を含んでおり、それぞれが画像から特徴を抽出することになっています。低レベルのピクセルの組み合わせ(例えば、水平/垂直の線やストローク)から始まり、炎の目のような高レベルの特徴の組み合わせに至るまでです。一般的で多様な画像の十分に大きなデータセットでCNNを訓練すれば、ネットワークはこれらの共通の特徴を抽出することを学ぶはずです。 KerasとPyTorchの両方には、一般的なアーキテクチャのために事前学習済みのニューラルネットワークの重みを簡単に読み込む関数が含まれており、そのほとんどはImageNetの画像で訓練されています。最もよく使われるものは、前のレッスンの[ CNNアーキテクチャ](../07-ConvNets/CNN_Architectures.md)ページに記載されています。特に、以下のいずれかの使用を検討することをお勧めします。 * **VGG-16/VGG-19**は比較的シンプルなモデルでありながら、良好な精度を提供します。最初の試みとしてVGGを使用することは、転移学習がどのように機能しているかを見る良い選択です。 * **ResNet**は、2015年にMicrosoft Researchによって提案されたモデルのファミリーです。これらは層が多く、より多くのリソースを必要とします。 * **MobileNet**は、サイズが縮小されたモデルのファミリーで、モバイルデバイスに適しています。リソースが限られていて、少しの精度を犠牲にできる場合は、これらを使用してください。 以下は、VGG-16ネットワークによって猫の画像から抽出されたサンプル特徴です: ![VGG-16によって抽出された特徴](../../../../../translated_images/features.6291f9c7ba3a0b951af88fc9864632b9115365410765680680d30c927dd67354.ja.png) ## 猫と犬のデータセット この例では、実際の画像分類シナリオに非常に近い[猫と犬](https://www.microsoft.com/download/details.aspx?id=54765&WT.mc_id=academic-77998-cacaste)のデータセットを使用します。 ## ✍️ 演習: 転移学習 対応するノートブックで転移学習を実際に見てみましょう: * [転移学習 - PyTorch](../../../../../lessons/4-ComputerVision/08-TransferLearning/TransferLearningPyTorch.ipynb) * [転移学習 - TensorFlow](../../../../../lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb) ## 敵対的猫の可視化 事前学習済みのニューラルネットワークは、その*脳*の中にさまざまなパターンを含んでおり、**理想的な猫**(理想的な犬、理想的なシマウマなども含む)に関する概念も含まれています。この画像を何らかの形で**可視化する**ことができれば面白いでしょう。しかし、これは簡単ではありません。なぜなら、パターンはネットワークの重み全体に広がっており、また階層構造で整理されているからです。 取ることができる一つのアプローチは、ランダムな画像から始め、その画像を調整するために**勾配降下最適化**技術を使用して、ネットワークがそれを猫だと考え始めるようにすることです。 ![画像最適化ループ](../../../../../translated_images/ideal-cat-loop.999fbb8ff306e044f997032f4eef9152b453e6a990e449bbfb107de2493cc37e.ja.png) しかし、これを行うと、非常にランダムなノイズに似たものが得られます。これは、*ネットワークが入力画像を猫だと思わせる方法がたくさんあるため*であり、視覚的に意味を成さないものも含まれています。これらの画像には猫に典型的なパターンが多く含まれていますが、視覚的に際立たせるための制約がありません。 結果を改善するために、**変動損失**と呼ばれる別の項を損失関数に追加できます。これは、画像の隣接するピクセルがどれだけ似ているかを示すメトリックです。変動損失を最小化することで、画像が滑らかになり、ノイズが取り除かれ、より視覚的に魅力的なパターンが明らかになります。以下は、猫およびシマウマとして高い確率で分類されるそのような「理想的な」画像の例です: ![理想的な猫](../../../../../translated_images/ideal-cat.203dd4597643d6b0bd73038b87f9c0464322725e3a06ab145d25d4a861c70592.ja.png) | ![理想的なシマウマ](../../../../../translated_images/ideal-zebra.7f70e8b54ee15a7a314000bb5df38a6cfe086ea04d60df4d3ef313d046b98a2b.ja.png) -----|----- *理想的な猫* | *理想的なシマウマ* 同様のアプローチを使用して、ニューラルネットワークに対する**敵対的攻撃**を実行することができます。例えば、犬を猫のように見せかけたいとします。ネットワークが犬として認識している犬の画像を取り、それを少しだけ勾配降下最適化を使用して調整すれば、ネットワークがそれを猫として分類し始めるまで続けることができます: ![犬の画像](../../../../../translated_images/original-dog.8f68a67d2fe0911f33041c0f7fce8aa4ea919f9d3917ec4b468298522aeb6356.ja.png) | ![猫として分類された犬の画像](../../../../../translated_images/adversarial-dog.d9fc7773b0142b89752539bfbf884118de845b3851c5162146ea0b8809fc820f.ja.png) -----|----- *犬の元の画像* | *猫として分類された犬の画像* 上記の結果を再現するためのコードは、次のノートブックにあります: * [理想的な猫と敵対的猫 - TensorFlow](../../../../../lessons/4-ComputerVision/08-TransferLearning/AdversarialCat_TF.ipynb) ## 結論 転移学習を使用することで、カスタムオブジェクト分類タスクのための分類器を迅速に構築し、高い精度を達成することができます。現在解決しているより複雑なタスクは、より高い計算能力を必要とし、CPUでは簡単に解決できないことがわかります。次の単元では、より軽量な実装を使用して、同じモデルを低い計算リソースで訓練することを試みます。これにより、わずかに低い精度が得られます。 ## 🚀 チャレンジ 付随するノートブックには、転移知識がやや似たトレーニングデータ(新しい動物の種類など)で最も効果的に機能することについてのメモがあります。まったく新しいタイプの画像で実験を行い、転移知識モデルがどのように機能するかを確認してください。 ## [事後講義クイズ](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/208) ## レビュー & 自習 [TrainingTricks.md](TrainingTricks.md)を読んで、モデルを訓練する他の方法についての知識を深めてください。 ## [課題](lab/README.md) このラボでは、35種類の猫と犬の品種を含む実際の[Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/)ペットデータセットを使用し、転移学習分類器を構築します。 **免責事項**: この文書は、機械ベースのAI翻訳サービスを使用して翻訳されています。正確性を追求していますが、自動翻訳には誤りや不正確さが含まれる可能性があることをご理解ください。原文は、その母国語での権威ある情報源と見なされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用によって生じる誤解や誤訳に関して、当社は一切の責任を負いません。