90 lines
9.3 KiB
Markdown
90 lines
9.3 KiB
Markdown
<!--
|
||
CO_OP_TRANSLATOR_METADATA:
|
||
{
|
||
"original_hash": "717775c4050ccbffbe0c961ad8bf7bf7",
|
||
"translation_date": "2025-08-24T21:11:26+00:00",
|
||
"source_file": "lessons/4-ComputerVision/08-TransferLearning/README.md",
|
||
"language_code": "ja"
|
||
}
|
||
-->
|
||
# 事前学習済みネットワークと転移学習
|
||
|
||
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ネットワークによって猫の画像から抽出された特徴の例です:
|
||
|
||

|
||
|
||
## 猫と犬のデータセット
|
||
|
||
この例では、[猫と犬](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)
|
||
|
||
## 理想的な猫の可視化
|
||
|
||
事前学習済みニューラルネットワークには、その「脳」の中にさまざまなパターンが含まれており、**理想的な猫**(理想的な犬、理想的なシマウマなど)に関する概念も含まれています。この画像を**可視化**するのは興味深いですが、簡単ではありません。なぜなら、パターンはネットワークの重み全体に広がっており、階層的に構成されているからです。
|
||
|
||
一つのアプローチとして、ランダムな画像から始めて、**勾配降下法**を使用してその画像を調整し、ネットワークがそれを猫だと認識するようにする方法があります。
|
||
|
||

|
||
|
||
しかし、この方法ではランダムノイズに非常に近いものが得られます。これは、*ネットワークが入力画像を猫だと認識する方法が多数存在する*ためであり、その中には視覚的に意味をなさないものも含まれます。これらの画像には猫に典型的な多くのパターンが含まれていますが、視覚的に特徴的であることを制約するものはありません。
|
||
|
||
結果を改善するために、**変動損失**と呼ばれる項を損失関数に追加することができます。これは、画像の隣接するピクセルがどれだけ似ているかを示す指標です。変動損失を最小化することで画像が滑らかになり、ノイズが除去され、より視覚的に魅力的なパターンが現れます。以下は、猫とシマウマとして高い確率で分類される「理想的な」画像の例です:
|
||
|
||
 | 
|
||
-----|-----
|
||
*理想的な猫* | *理想的なシマウマ*
|
||
|
||
同様のアプローチを使用して、ニューラルネットワークに対する**敵対的攻撃**を行うこともできます。例えば、犬を猫のように見せたい場合、ネットワークが犬として認識する犬の画像を取り、それを少し調整して、ネットワークがそれを猫として分類するようにすることができます:
|
||
|
||
 | 
|
||
-----|-----
|
||
*元の犬の画像* | *猫として分類された犬の画像*
|
||
|
||
上記の結果を再現するコードは以下のノートブックで確認できます:
|
||
|
||
* [理想的な猫と敵対的猫 - 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)
|
||
|
||
このラボでは、実際の[Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/)ペットデータセットを使用し、35種類の猫と犬の品種で転移学習分類器を構築します。
|
||
|
||
**免責事項**:
|
||
この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を期すよう努めておりますが、自動翻訳には誤りや不正確さが含まれる可能性があります。元の言語で記載された原文が公式な情報源と見なされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤認について、当方は一切の責任を負いません。 |