torchvisionのmodelsモジュール

PyTorchのtorchvision.modelsモジュールは、画像分類などのタスクにおける**事前学習済みモデル(pre-trained models)**を簡単に活用するための重要な機能を提供します。以下ではこのモジュールの概要、活用方法、主要なモデル、および転移学習との関係について詳しく説明します。


1. torchvision.modelsの概要

torchvision.modelsは、ImageNetデータセットなどで事前学習された一般的な画像認識モデル(CNNベース)を提供するモジュールです。これにより、ユーザーはスクラッチから学習する必要なく、高精度なモデルを利用または微調整(ファインチューニング)することができます。


2. 利用可能な主なモデル

以下はtorchvision.modelsで利用できる代表的なモデルです:

モデル名 特徴
resnet18resnet152 残差接続による深層学習の安定性(ResNet)
vgg11vgg19 シンプルな構造で古典的なCNNアーキテクチャ
alexnet CNN黎明期の代表モデル
densenet121densenet201 各層がすべての前の層と接続される(DenseNet)
mobilenet_v2 / mobilenet_v3 軽量なモデル、モバイル向け
efficientnet_b0efficientnet_b7 高性能かつ効率的なモデル
swin_t など トランスフォーマーベースの画像分類モデル

3. 基本的な使い方

事前学習済みモデルの読み込み

python
import torchvision.models as models # ResNet-18の事前学習済みモデルをロード model = models.resnet18(pretrained=True)

PyTorch 2.0以降では以下のように記述することもあります:

python
model = models.resnet18(weights=models.ResNet18_Weights.DEFAULT)

転移学習:出力層のカスタマイズ

多くの場合、ImageNetの1000クラス分類から別のタスクに転移するために最後の全結合層(classifier)を置き換える必要があります。

python
import torch.nn as nn # たとえば10クラス分類用に変更 num_classes = 10 model.fc = nn.Linear(model.fc.in_features, num_classes)

モデルにより、出力層の名前(fc, classifierなど)が異なるため注意が必要です。


4. 転移学習の一般的な戦略

凍結(freeze)と微調整(fine-tuning)

python
# 全てのパラメータを凍結 for param in model.parameters(): param.requires_grad = False # 出力層だけ学習可能にする model.fc = nn.Linear(model.fc.in_features, num_classes)

必要に応じて、一部の層だけを微調整する戦略も有効です。


5. torchvision.modelsの利点

  • 高速な実装:複雑なモデルを数行で利用可能。

  • 高精度:ImageNetなどで高精度な事前学習が完了している。

  • 拡張性:転移学習やファインチューニングが容易。

  • モデルの一貫性:公式でテストされた安定したアーキテクチャ。


6. 学習済みモデルの精度と重み管理

各モデルには精度やトレーニング条件が文書化されており、weights.transforms()メソッドで適切な前処理(リサイズ、正規化など)も取得できます。

python
weights = models.ResNet18_Weights.DEFAULT preprocess = weights.transforms()

これにより、入力画像をモデルに最適な形式に整えることができます。


まとめ

torchvision.modelsモジュールは、画像認識タスクにおける迅速なプロトタイピング転移学習の効率化に非常に有用です。事前学習済みモデルを適切にカスタマイズし、学習済みの知識を新たなタスクに活用することで、少ないデータでも高性能なモデルを構築可能です。

生成日:2025/05/22