画像埋め込みのためのトップ10の事前訓練モデル、データサイエンティストが知っておくべきもの

「データサイエンティストが知っておくべき、画像埋め込みのためのトップ10の事前訓練モデル」

“`html

コンピュータビジョンの急速な発展は、転移学習の登場によってさらに加速されています。大規模な画像データセットでコンピュータビジョンニューラルネットワークモデルをトレーニングするには、多くの計算リソースと時間が必要です。

幸いにも、事前トレーニングされたモデルを使用することで、この時間とリソースを短縮することができます。事前学習モデルから特徴表現を活用する技術は、転移学習と呼ばれます。事前学習モデルは一般的に、高性能な計算リソースと大規模なデータセットでトレーニングされます。

事前学習モデルは、以下のようにさまざまな方法で使用することができます:

  • 事前学習モデルの重みを使用し、テストデータに直接予測を行う
  • 事前学習モデルの重みを使用してモデルを初期化し、カスタムデータセットでモデルをトレーニングする
  • 事前学習ネットワークのアーキテクチャのみを使用し、カスタムデータセットでゼロからトレーニングする

この記事では、画像埋め込みを取得するための最新の10種類の最先端事前学習モデルについて説明します。これらの事前学習モデルは、keras.application APIを使用してKerasモデルとして読み込むことができます。

1) VGG:

VGG-16/19ネットワークは、最も人気のある事前学習モデルの1つであるため、ILSVRC 2014で紹介されました。これはオックスフォード大学のビジュアルグラフィックスグループによって開発されました。

VGGモデルには2つのバリエーションがあります:16層と19層のネットワークで、VGG-19(19層モデル)はVGG-16(16層モデル)の改良版です。

アーキテクチャ:

(出典CC BY-SA 4.0でのフリーライセンス), VGG-16ネットワークアーキテクチャ

VGGネットワークはシンプルで順序立てられた性質を持ち、多くのフィルタが使用されています。各ステージで小さな(3*3)フィルタを使用して、パラメータの数を減らしています。

VGG-16ネットワークには以下があります:

  • 畳み込み層:13層
  • プーリング層:5層
  • 完全連結のDense層:3層

入力:次元が(224, 224, 3)の画像

出力:1000次元の画像埋め込み

VGG-16/19のその他の詳細:

  • 論文リンク:https://arxiv.org/pdf/1409.1556.pdf
  • GitHub:VGG
  • 発表日:2015年4月
  • ImageNetデータセットでのパフォーマンス:71%(トップ1の正答率)、90%(トップ5の正答率)
  • パラメータの数:約140M
  • 層の数:16/19
  • ディスク上のサイズ:約530MB

実装:

  • 入力画像を各色チャンネルごとにBGRに変換するために、入力データにtf.keras.applications.vgg16.preprocess_inputを呼び出します。
  • 以下のコードを使用してVGG16モデルをインスタンス化します:
tf.keras.applications.VGG16(    include_top=True,    weights="imagenet",    input_tensor=None,    input_shape=None,    pooling=None,    classes=1000,    classifier_activation="softmax",)

上記のコードはVGG-16の実装用です。VGG-19の実装については、Kerasは同様のAPIを提供しています。詳細についてはこのドキュメントを参照してください。

“`

2) Xception(エクセプション):

Xception(エクセプション)は、深い畳み込みニューラルネットワーク(CNN)のアーキテクチャで、深さ方向に分離可能な畳み込みを利用しています。深さ方向に分離可能な畳み込みは、最大限の数のタワーを持つインセプションモデルとして理解できます。

アーキテクチャ:

(出典CC BY-SA 4.0で自由に使用できるライセンス)、Xception(エクセプション)アーキテクチャ

入力:寸法が(299、299、3)の画像

出力:1000次元の画像埋め込み

Xception(エクセプション)のその他の詳細:

実装:

  • 以下のコードを使用して、Xception(エクセプション)モデルをインスタンス化します:
tf.keras.applications.Xception(    include_top=True,    weights="imagenet",    input_tensor=None,    input_shape=None,    pooling=None,    classes=1000,    classifier_activation="softmax",)

上記のコードは、Xception(エクセプション)の実装に使用されます。詳細については、このドキュメントを参照してください。

3) ResNet(レスネット):

以前のCNNアーキテクチャは、多くの畳み込み層にスケールさせるために設計されていませんでした。これにより、勾配消失問題が発生し、既存のアーキテクチャに新しい層を追加するとパフォーマンスが制限されました。

ResNet(レスネット)アーキテクチャでは、勾配消失問題を解決するためにスキップ接続が提供されています。

アーキテクチャ:

(出典CC BY-SA 4.0で自由に使用できるライセンス)、ResNet(レスネット)アーキテクチャ

このResNet(レスネット)モデルは、VGG-19モデルからインスピレーションを受けた34層のネットワークアーキテクチャで、ショートカット接続が追加されています。これらのショートカット接続により、アーキテクチャはリジュームネットワークに変換されます。

ResNet(レスネット)アーキテクチャには、いくつかのバージョンがあります:

  • ResNet50
  • ResNet50V2
  • ResNet101
  • ResNet101V2
  • ResNet152
  • ResNet152V2

入力:寸法が(224、224、3)の画像

出力:1000次元の画像埋め込み

ResNetモデルのその他の詳細:

  • 論文リンク:https://arxiv.org/pdf/1512.03385.pdf
  • GitHub:ResNet(レスネット)
  • 公開日:2015年12月
  • ImageNetデータセットでのパフォーマンス:75–78%(トップ1の正答率)、92–93%(トップ5の正答率)
  • パラメータ数:25–60M
  • 深さ:107–307
  • ディスク上のサイズ:約100–230MB

実装:

  • 以下のコードを使用して、ResNet50モデルをインスタンス化します:
tf.keras.applications.ResNet50(    include_top=True,    weights="imagenet",    input_tensor=None,    input_shape=None,    pooling=None,    classes=1000,    **kwargs)

上記のコードはResNet50の実装のために使用されます。Kerasは他のResNetアーキテクチャの実装にも類似したAPIを提供しており、詳細についてはこのドキュメントを参照してください。

4) Inception:

複数の深い畳み込み層により、データの過学習が起こります。過学習を避けるために、Inceptionモデルでは同じレベルで並行レイヤーや異なるサイズの複数のフィルタを使用してモデルを幅広くすることで、より深くする代わりにします。Inception V1モデルは、(1*1)、(3*3)、(5*5)の畳み込みと(3*3)の最大プーリングから成り立っています。

Inception(V1/V2/V3)は、Googleのチームによって開発された深層学習モデルベースのCNNネットワークです。InceptionV3は、InceptionV1およびV2モデルの高度で最適化されたバージョンです。

アーキテクチャ:

InceptionV3モデルは42層で構成されています。InceptionV3のアーキテクチャ構築は段階的に進んでいます:

  • ファクタライズド畳み込み
  • 小さい畳み込み
  • 非対称畳み込み
  • 補助畳み込み
  • グリッドサイズの縮小

これらの概念は、以下に示す最終的なアーキテクチャに統合されています:

(ソースCC BY-SA 4.0で使用許可されているフリーのライセンス) InceptionV3アーキテクチャ

入力: サイズ(299, 299, 3)の画像

出力: 1000次元の画像埋め込み

InceptionV3モデルのその他の詳細:

  • 論文リンク: https://arxiv.org/pdf/1512.00567.pdf
  • GitHub: InceptionV3
  • 公開日: 2015年12月
  • Imagenetデータセットでのパフォーマンス: 78% (トップ1の正解率)、94% (トップ5の正解率)
  • パラメータ数: 24M
  • 深さ: 189
  • ディスク上のサイズ: 92MB

実装:

  • 以下のコードを使用して、InceptionV3モデルをインスタンス化します:
tf.keras.applications.InceptionV3(    include_top=True,    weights="imagenet",    input_tensor=None,    input_shape=None,    pooling=None,    classes=1000,    classifier_activation="softmax")

上記のコードはInceptionV3の実装のために使用されます。詳細についてはこのドキュメントを参照してください。

5) InceptionResNet:

InceptionResNet-v2は、Googleの研究者によって開発されたCNNモデルです。このモデルの目標は、InceptionV3の複雑さを減らし、Inceptionモデルに対して残差ネットワークを使用する可能性を探ることでした。

アーキテクチャ:

ソース、無料で使用できるCC BY-SA 4.0ライセンス)、Inception-ResNet-V2アーキテクチャ

入力: 次元(299、299、3)の画像

出力: 1000次元の画像埋め込み

Inception-ResNet-V2モデルのその他の詳細:

  • 論文リンク:https://arxiv.org/pdf/1602.07261.pdf
  • GitHub:Inception-ResNet-V2
  • 発表された日:2016年8月
  • ImageNetデータセットでのパフォーマンス:80%(上位1%の正確性)、95%(上位5%の正確性)
  • パラメータの数:56M
  • 深さ:189
  • ディスク上のサイズ:215MB

実装:

  • 以下のコードを使用してInception-ResNet-V2モデルをインスタンス化します:
tf.keras.applications.InceptionResNetV2(    include_top=True,    weights="imagenet",    input_tensor=None,    input_shape=None,    pooling=None,    classes=1000,    classifier_activation="softmax",    **kwargs)

上記のコードはInception-ResNet-V2の実装です。詳細についてはこのドキュメントを参照してください。

6) MobileNet:

MobileNetは、深層畳み込みニューラルネットワークを構築するために深さの分離畳み込みを使用し、モバイルおよび組み込みビジョンアプリケーションに効率的なモデルを提供するスリムなアーキテクチャです。

アーキテクチャ:

ソース、無料で使用できるCC BY-SA 4.0ライセンス)、Mobile-Netアーキテクチャ

入力: 次元(224、224、3)の画像

出力: 1000次元の画像埋め込み

MobileNetモデルのその他の詳細:

  • 論文リンク:https://arxiv.org/pdf/1602.07261.pdf
  • GitHub:MobileNet-V3MobileNet-V2
  • 発表された日:2017年4月
  • ImageNetデータセットでのパフォーマンス:71%(上位1%の正確性)、90%(上位5%の正確性)
  • パラメータの数:3.5–4.3M
  • 深さ:55–105
  • ディスク上のサイズ:14–16MB

実装:

  • 以下のコードを使用してMobileNetモデルをインスタンス化します:
tf.keras.applications.MobileNet(    input_shape=None,    alpha=1.0,    depth_multiplier=1,    dropout=0.001,    include_top=True,    weights="imagenet",    input_tensor=None,    pooling=None,    classes=1000,    classifier_activation="softmax",    **kwargs)

上記のコードはMobileNetの実装です。Kerasは他のMobileNetアーキテクチャ(MobileNet-V2、MobileNet-V3)の実装にも似たようなAPIを提供しています。詳細については、このドキュメントを参照してください。

7) DenseNet:

DenseNetは、高次のニューラルネットワークにおける勾配消失による精度の改善を図るために開発されたCNNモデルです。入力層と出力層の間の距離が長くなるため、情報が目的地に到達する前に消えてしまいます。

アーキテクチャ:

DenseNetアーキテクチャには3つの密なブロックがあります。隣接する2つのブロックの間のレイヤーは、畳み込みやプーリングを介して特徴マップのサイズを変更する遷移層と呼ばれます。

(ソースCC BY-SA 4.0の下で無料利用可能なライセンス), DenseNetアーキテクチャ

入力: (224, 224, 3)の次元を持つ画像

出力: 1000次元の画像埋め込み

DenseNetモデルのその他の詳細:

実装:

  • 以下のコードを使用して、DenseNet121モデルをインスタンス化します:
tf.keras.applications.DenseNet121(    include_top=True,    weights="imagenet",    input_tensor=None,    input_shape=None,    pooling=None,    classes=1000,    classifier_activation="softmax",)

上記のコードはDenseNetの実装です。Kerasは他のDenseNetアーキテクチャ(DenseNet-169、DenseNet-201)の実装にも似たようなAPIを提供しています。詳細については、このドキュメントを参照してください。

8) NasNet:

Googleの研究者は、最良のCNNアーキテクチャを見つけるための問題を強化学習アプローチとしてフレーム化したNasNetモデルを設計しました。アイデアは、層の数、フィルターサイズ、ストライド、出力チャネルなどの指定された検索空間のパラメータの最良の組み合わせを探すことです。

入力: (331, 331, 3)の次元を持つ画像

NasNetモデルのその他の詳細:

  • 論文リンク: https://arxiv.org/pdf/1608.06993.pdf
  • 公開日: 2018年4月
  • ImageNetデータセットでの性能: 75-83% (Top 1 Accuracy), 92-96% (Top 5 Accuracy)
  • パラメータの数: 5-90M
  • 深さ: 389-533
  • ディスク上のサイズ: 23-343MB

実装:

  • 以下のコードを使用して、NesNetLargeモデルをインスタンス化します:
tf.keras.applications.NASNetLarge(    input_shape=None,    include_top=True,    weights="imagenet",    input_tensor=None,    pooling=None,    classes=1000,    classifier_activation="softmax",)

上記のコードはNesNetの実装のためのものであり、kerasは他のNasNetアーキテクチャ(NasNetLarge、NasNetMobile)の実装にも似たようなAPIを提供しています。詳細については、このドキュメントを参照してください。

9) EfficientNet:

EfficientNetは、Googleの研究者によって開発されたCNNアーキテクチャであり、コンパウンドスケーリングと呼ばれるスケーリング方法により、より優れたパフォーマンスを実現することができます。このスケーリング方法は、深さ/幅/解像度のすべての次元を均一に固定量(コンパウンド係数)で均一にスケーリングします。

アーキテクチャ:

(ソースCC BY-SA 4.0でのフリー利用ライセンス)、Efficient-B0アーキテクチャ

EfficientNetモデルのその他の詳細:

  • 論文リンク:https://arxiv.org/pdf/1905.11946v5.pdf
  • GitHub:EfficientNet
  • 公開日:2020年9月
  • ImageNetデータセットでのパフォーマンス:77-84%(トップ1の精度)、93-97%(トップ5の精度)
  • パラメータ数:5-67M
  • 深さ:132-438
  • ディスク上のサイズ:29-256MB

実装:

  • 以下のコードを使用してEfficientNet-B0モデルをインスタンス化します:
tf.keras.applications.EfficientNetB0(    include_top=True,    weights="imagenet",    input_tensor=None,    input_shape=None,    pooling=None,    classes=1000,    classifier_activation="softmax",    **kwargs)

上記のコードはEfficientNet-B0の実装のためのものであり、kerasは他のEfficientNetアーキテクチャ(EfficientNet-B0からB7、EfficientNet-V2-B0からB3)に対しても似たようなAPIを提供しています。詳細については、このドキュメントこのドキュメントを参照してください。

10) ConvNeXt:

ConvNeXtは、純粋な畳み込みモデル(ConvNet)として提案されたCNNモデルであり、Vision Transformersの設計に着想を得ており、それらを上回るパフォーマンスを発揮すると主張しています。

アーキテクチャ:

(ソースCC BY-SA 4.0でのフリー利用ライセンス)、ConvNeXtアーキテクチャ

ConvNeXtモデルのその他の詳細:

  • 論文リンク:https://arxiv.org/pdf/1905.11946v5.pdf
  • GitHub:ConvNeXt
  • 公開日:2022年3月
  • ImageNetデータセットでのパフォーマンス:81-87%(トップ1の精度)
  • パラメータ数:29-350M
  • ディスク上のサイズ:110-1310MB

実装:

  • 以下のコードを使用して、ConvNeXt-Tinyモデルをインスタンス化します:
tf.keras.applications.ConvNeXtTiny(    model_name="convnext_tiny",    include_top=True,    include_preprocessing=True,    weights="imagenet",    input_tensor=None,    input_shape=None,    pooling=None,    classes=1000,    classifier_activation="softmax",)

上記のコードはConvNeXt-Tinyの実装のためのものであり、Kerasは他のEfficientNetアーキテクチャ(ConvNeXt-Small, ConvNeXt-Base, ConvNeXt-Large, ConvNeXt-XLarge)の実装にも似たAPIを提供しています。詳細については、このドキュメントを参照してください。

概要:

私は転移学習を使用して埋め込みを生成できる10の人気のあるCNNアーキテクチャについて説明しました。これらの事前学習済みCNNモデルはImageNetデータセットを上回り、最も優れています。Kerasライブラリは、議論された事前学習済みモデルのアーキテクチャと重みをロードするためのAPIを提供しています。これらのモデルから生成されたイメージの埋め込みは、さまざまなユースケースで使用することができます。

しかし、これは常に進化し続ける領域であり、常に新しいCNNアーキテクチャが待ち望まれています。

この記事は、Suraj Guravによって最初にここで投稿されました。

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more