役に立つヒント | 複数の事前トレーニング済みビジョンモデルの転移学習

役に立つヒント | 複数の事前トレーニング済みビジョンモデルの転移学習

この記事では、Keras Tensorflow 抽象ライブラリに基づく転移学習アルゴリズム モデルを紹介します。このアルゴリズムはシンプルで実装が簡単で、優れた結果が得られます。

機械学習やデータサイエンスの分野では、「ディープラーニング」と呼ばれる手法が数多く登場しています。これらすべての「ディープラーニング」手法の中で、特に際立っているのが、学習した表現の転送です。学習した表現を転送するのに特に簡潔で堅牢かつ効果的な方法があります。特にコンピューター ビジョンの分野では、このアプローチは非常に大きな利点を示しており、以前は克服できなかったタスクが keras.applications import * のように簡単になりました。

簡単に言うと、このアプローチでは、大規模なデータセットを使用して、関心のあるオブジェクト (画像、時系列、顧客、さらにはネットワークなど) を分類やクラスタリングなどのデータ サイエンス研究タスクに適した特徴ベクトルとして表現することを学習する必要があることを示しています。一度学習すれば、新しいデータの量や利用可能なコンピューティング リソースのサイズをほとんど考慮せずに、他の研究者や他のデータセットで表現メカニズムを使用できます。

この記事では、keras TensorFlow 抽象化ライブラリを使用して、事前トレーニング済みのコンピューター ビジョン モデルに基づく転移学習の使用方法を説明しました。事前トレーニング済みのコンピューター ビジョン モデルは、大規模な ImageNet データセットでトレーニングされており、特徴ベクトルの形式で画像の単純な表現を生成することを学習しています。ここでは、このメカニズムを使用して鳥の分類器を学習します。

事前トレーニング済みモデルを使用する方法は多数あり、選択は通常、データセットのサイズと利用可能なコンピューティング リソースによって異なります。これらの方法には次のものがあります。

  1. 微調整: この場合、ネットワークの最終分類層は、現在のデータセットに適合する適切なサイズのソフトマックス層に置き換えられますが、他のすべての層の学習済みパラメータは変更されずに、新しいタスクでさらにトレーニングされます。
  2. 凍結:微回転法では、比較的強力な計算能力と大量のデータが必要になります。データセットが小さい場合、ネットワークの最も初期のレイヤーの一部を「フリーズ」するのが一般的です。つまり、事前トレーニング済みネットワークのパラメーターはこれらのレイヤーで固定されます。他のレイヤーは、新しいタスクで以前と同じようにトレーニングされます。
  3. 特徴抽出: この方法は、事前トレーニング済みのネットワークを最も自由に使用する方法です。画像は、特定のレイヤー (通常は最終的な分類器出力の前のレイヤー) を新しいタスク用に再トレーニングされることのない表現として使用して、ネットワークを通じてフィードフォワードされます。この画像からベクトルへのメカニズムの出力は、ほぼすべての後続タスクで使用できます。

この記事では、特徴抽出法を使用します。まず、事前にトレーニングされた単一のディープラーニング モデルを使用し、次にスタッキング手法を使用して 4 つの異なるモデルを組み合わせます。次に、選択された 200 種の鳥類の画像 (vision.caltech 提供) を含む CUB-200 データセットを分類します。

まず、データセットをダウンロードします。MAC/Linux システムのダウンロード パス:

または、ファイルを手動でダウンロードして解凍します。

次にプログラムの主な要素について説明します。読みやすいテキストにするためにインポートとデプロイメントのコードは省略しましたが、必要に応じて完全なコードを表示できます。

まず、ユーティリティ関数 (こちら) を使用してデータセットを読み込み、指定されたサイズの画像を含むデータセットをロードしてみましょう。 「CUB_200_2011」フォルダはデータセットが解凍されたときに作成され、定数 CUB_DIR はそのフォルダ内の「image」ディレクトリを指します。

まず、特徴抽出に Resnet50 モデル (論文と keras ファイルを参照) を使用します。 244x244 ピクセルのサイズの画像を使用していることに注意してください。データセット全体のベクトル表現を生成するには、次の 2 行のコードを追加する必要があります。

モデルが作成されると、初期トレーニング データ (ImageNet) は、平均チャネル ピクセル値を減算した結果である preprocess_input 関数を使用して正規化されます。 ResNet50.predict は実際の変換を実行し、各画像を表すサイズ 2048 のベクトルを返します。 ***が呼び出されると、ResNet501d[1]コンストラクターが事前トレーニング済みのパラメータファイルをダウンロードします。必要な時間はネットワーク速度によって異なります。その後、これらの特徴ベクトルは単純な線形 SVM 分類器とともに使用され、相互検証プロセスが実行されました。

[ 0.62522158 0.62344583 0.62852745 ]

総合精度: 62.6

このシンプルなアプローチにより、200 クラスのデータセットで 62.6% の精度を達成しました。次のセクションでは、いくつかの事前トレーニング済みモデルとスタッキングアプローチを使用して、この結果をさらに改善していきます。

複数の事前トレーニング済みモデルを使用した後の感覚は、機能セットを使用するあらゆる状況と同じです。つまり、組み合わせると優れたパフォーマンスにつながる重複しない情報を提供することが期待されます。

私たちが使用する方法は、これら 4 つの事前トレーニング済みモデル (VGG19、ResNet、Inception、Xception) から派生した機能に基づいており、総称して「スタッキング」と呼ばれます。スタッキングは、一連のモデル (基本分類器) の予測を集約し、第 2 段階の予測器 (メタ分類器) に渡す 2 段階のアルゴリズムです。この例では、各基本分類器は単純なロジスティック回帰モデルになります。これらの出力確率は平均化され、線形 SVM アルゴリズムに渡されて最終的な決定が下されます。

事前トレーニング済みの各モデル (上記の ResNet など) は、特徴セット (X_vgg、X_resnet、X_incept、X_xcept) を生成できます。これを開始点として使用します (完全なコードについては、git リポジトリを参照してください)。便宜上、すべての機能セットは単一のマトリックスに積み重ねられますが、各モデルが正しいセットを指すことができるように境界インデックスは保持されます。

強力な mlxtend 拡張ライブラリを使用して、スタッキング アルゴリズムをさらに簡単にします。 4 つの基本分類器のいずれに対しても、適切な特徴を選択し、LogisticRegression アルゴリズムのパスに従う転送メソッドを構築しました。

各基本分類器によって提供される平均確率を集計関数として使用するように、スタック分類器を定義および構成します。

***、スタッキング方法をテストする準備ができました:

[ 0.74221322 0.74194367 0.75115444 ]

総合精度: 74.5

いくつかのモデルベースの分類器を提供し、これらの個々の事前トレーニング済み分類器のスタッキング方法を使用することで、74.5% の精度を達成しました。これは、単一の ResNet モデルと比較して大幅な改善です (同じ方法を使用して他のモデルをテストし、2 つの方法を比較することもできます)。

要約すると、この記事では、複数の事前トレーニング済みモデルを特徴抽出メカニズムとして利用し、スタッキング アルゴリズムを使用してそれらを組み合わせて画像分類を行う方法について説明しました。このアプローチはシンプルで実装が簡単で、驚くほど良い結果が得られます。

[1] ディープラーニングモデルは通常、GPUでトレーニングされます。ローエンドのラップトップGPUを使用している場合、メモリ不足の例外が発生するため、ここで使用するモデルの一部を実行するのに適していない可能性があります。この場合、tf.device("/cpu:0")を使用して、すべてのディープラーニング関連コンテンツをブロックの下に配置し、TensorFlowがすべてをCPUで実行するように強制する必要があります。

<<:  Lingzhi Unuo CTO Xu Ke: AI技術が従来の保険販売モデルのジレンマを打破

>>:  CES 2018: 見逃せない 4 つの主要なテクノロジー トレンド

ブログ    
ブログ    
ブログ    
ブログ    
ブログ    
ブログ    

推薦する

ダンスをしたり、音楽を作曲したり、演出したりできる AI を見たことがありますか?

最近、NVIDIA Blog は「ライト、カメラ、AI: Cambridge Consultants...

人工知能の潜在能力を活かすための深層開発

[[244225]]人工知能は現実的な科学技術の力であり、需要、デジタル経済、高品質の開発に焦点を当...

強化学習の概念から応用まで包括的に理解する

週末ですが、まだ充電中です。今日は強化学習について見ていきます。ただし、ゲームで使うつもりはありませ...

これは人工ニューラルネットワークの非常に簡単な説明です

[[419321]]導入私は機械学習についてはよく知りませんが、先月、GitHub で Go のサン...

カメラか LiDAR か?堅牢な 3D オブジェクト検出を実現するにはどうすればよいでしょうか?最新レビュー!

この記事は、Heart of Autonomous Driving の公開アカウントから許可を得て転...

...

LRUキャッシュの実装アルゴリズムについて議論しましょう

ビジネスモデル読み取り、書き込み、削除の比率はおよそ 7:3:1 です。少なくとも 500 万個のキ...

AIは教育分野で大きな可能性を秘めています。どのように活用できるでしょうか?

[[238201]]過去 10 年間、学界と AI の専門家は、AI が教育に活用できるかどうかに...

...

機械学習の研究を再現するのは非常に難しい

[[223551]]はじめに:再現性と一貫性は計算科学研究の基本要件であり、機械学習も例外ではありま...

人工知能の分野は大きな需要があり、金融​​人材の将来性は有望である

[[408300]]重慶ビジネスデイリー・商油新聞記者が本について語る大学入試願書を記入中です。専攻...

...

人間の編集者の仕事を奪ってきたAIアルゴリズムは勝利するのでしょうか?

AIが権力を握り、メディア業界では再び「スペアタイヤがレギュラー化する」ドラマが繰り広げられている...

銀行におけるクラウドコンピューティングと人工知能の利点

クラウド コンピューティング プロバイダーは、データを分析し、スキルの低いユーザー (または予算が限...

Kubernetes 上で生成 AI アプリケーションをデプロイするためのステップバイステップ ガイド

翻訳者 |李睿レビュー | Chonglou今日の急速に変化するテクノロジーと市場環境では、人工知能...