ディープラーニングツール:スマート端末におけるTensorFlowの応用

ディープラーニングツール:スマート端末におけるTensorFlowの応用

[[204425]]

序文

ディープラーニングは、画像処理、音声認識、自然言語処理の分野で大きな成功を収めていますが、通常は強力なサーバー上で実行されます。スマートフォンがインターネット経由でサーバーにリモート接続する場合も、ディープラーニング技術を使用できますが、速度が遅く、デバイスが良好なネットワーク接続環境にある場合にのみ機能するため、ディープラーニングモデルをスマート端末に移行する必要があります。

スマート端末の CPU とメモリのリソースは限られているため、コンピューティング パフォーマンスとメモリ使用率を向上させるには、サーバー側モデルを量子化し、低精度アルゴリズムをサポートする必要があります。 TensorFlow リリースでは、Android、iOS、Raspberry Pi ハードウェア プラットフォームのサポートが追加され、それらのデバイスで画像分類などの操作を実行できるようになりました。これにより、スマートフォンで動作し、クラウドを常に利用可能にする必要がない機械学習モデルの作成が可能になり、新しいアプリが前面に出てきます。

この記事では主に、「花の名前認識」APPアプリケーションに基づいてTensorFlowモデルをAndroidシステムに適用する方法、サーバー側でTensorFlowモデルをトレーニングしてモデルファイルをスマート端末に移行する方法、TensorFlow Android開発環境とアプリケーション開発APIを構築する方法について説明します。

花の名前アプリ

「花に名前をつけよう」アプリは、AlexNet モデル、Flowers データ、Android プラットフォームを使用して構築されました。 TensorFlow モデルは 5 種類の花のデータでトレーニングされます。次の図に示すように:

デイジー

タンポポ

バラ: バラ

ひまわり: ひまわり

チューリップ:

サーバー上でモデルをトレーニングした後、モデル ファイルを Android プラットフォームに移行し、モバイル フォンに APP をインストールします。効果は以下の図に示されています。インターフェースの上部にはモデル認識の信頼度が表示され、インターフェースの中央には認識される花が表示されます。

TensorFlow モデルを花名認識アプリに適用する方法には、主にモデルの選択と適用、モデル ファイルの変換、Android 開発という重要な手順が含まれます。次の図に示すように:

モデルトレーニングとモデルファイル

この章では、AlexNet モデルを使用して Flowers データをトレーニングします。 AlexNet は 2012 年に ImageNet で最高スコアを達成し、トップ 5 の精度は 80.2% でした。これは、従来の機械学習分類アルゴリズムとしては非常に印象的です。モデル構造は次のとおりです。

この記事では、トレーニングに TensorFlow 公式 Slim (https://github.com/tensorflow/models/tree/master/slim) AlexNet モデルを使用します。

  • まず、Flowers データをダウンロードし、TFRecord 形式に変換します。
  1. DATA_DIR=/tmp/data/flowers
  2. python download_and_convert_data.py --dataset_name=flowers  
  3. --dataset_dir="${DATA_DIR}"  
  • モデルのトレーニングを実行します。36618 回の反復後、モデルの精度は 85% に達します。
  1. TRAIN_DIR=/tmp/data/train
  2. python train_image_classifier.py --train_dir=${TRAIN_DIR}  
  3. --dataset_dir=${DATASET_DIR} --dataset_name=flowers  
  4. --dataset_split_name=トレーニング --model_name=alexnet_v2  
  5. --前処理名=vgg  
  • 推論グラフのPBファイルを生成する
  1. python export_inference_graph.py --alsologtostderr  
  2. --model_name=alexnet_v2 --dataset_name=flowers --dataset_dir=${DATASET_DIR}  
  3. --output_file=alexnet_v2_inf_graph.pb  
  • チェックポイントファイルと推論グラフPBファイルを組み合わせてフリーズグラフPBファイルを生成します。
  1. Python freeze_graph.py --input_graph=alexnet_v2_inf_graph.pb を実行します。  
  2. --input_checkpoint= ${TRAIN_DIR}/model.ckpt-36618 --input_binary=true  
  3. --output_graph=frozen_alexnet_v2.pb --output_node_names=alexnet_v2/fc8/squeezed  
  • Freeze Graph の PB ファイルに対してデータ量子化を実行し、モデル ファイルのサイズを縮小します。生成された quantized_alexnet_v2_graph.pb がスマート ターミナルで使用されるモデル ファイルです。
  1. bazel-bin/tensorflow/tools/graph_transforms/transform_graph
  2. --in_graph=frozen_alexnet_v2.pb --outputs="alexnet_v2/fc8/squeezed"  
  3. --out_graph=quantized_alexnet_v2_graph.pb --transforms='add_default_attributes  
  4. strip_unused_nodes(type= float , shape= "1,224,224,3" ) remove_nodes(op=Identity,
  5. op=CheckNumerics) fold_constants(ignore_errors= true ) fold_batch_norms
  6. fold_old_batch_norms quantize_weights quantize_nodes
  7. 未使用ノードを削除し、実行順に並べ替える'

スマート端末上のモデルファイルのサイズを縮小するために、TensorFlow ではモデルファイルを量子化するのが一般的な方法です。この記事の AlexNet CheckPoint ファイルの Freeze および Quantize 処理後のファイルサイズの変化は次の図に示されています。

量子化演算の主なアイデアは、モデルの推論段階で 32 ビット浮動小数点演算の代わりに同等の 8 ビット整数演算を使用することです。置き換えられた演算には、畳み込み演算、行列乗算、活性化関数、プーリング演算などが含まれます。量子化ノードの入力と出力は浮動小数点数ですが、内部演算は量子化計算によって 8 ビット整数 (0 ~ 255) に変換されます。浮動小数点数と 8 ビット量子化整数の対応関係は次の図に示されています。

量子化 ReLU 演算の基本的な考え方は次の図に示されています。

TensorFlow Androidアプリ開発環境構築

Android システムで推論に TensorFlow モデルを使用するには、libtensorflow_inference.so と libandroid_tensorflow_inference_java.jar の 2 つのファイルが必要です。これら 2 つのファイルは、以下に示すように、TensorFlow ソース コードをダウンロードし、bazel を使用してコンパイルできます。

  • TensorFlow ソースコードをダウンロードします。git clone –recurse-submodules https://github.com/tensorflow/tensorflow.git
  • Android NDKをダウンロードしてインストールする
  • Android SDKをダウンロードしてインストールする
  • tensorflow/WORKSPACE で Android 開発ツールのパスを設定する
  1. android_sdk_repository(名前= "androidsdk" 、 api_level = 23 、 build_tools_version = "25.0.2" 、 パス = "/opt/android" 、)
  2. android_ndk_repository(名前= "androidndk" 、 パス = "/opt/android/android-ndk-r12b" 、 api_level = 14)
  • libtensorflow_inference.soをコンパイルする
  1. bazel ビルド -c opt //tensorflow/contrib/android:libtensorflow_inference.so
  2. --crosstool_top=//外部:android/crosstool --host_crosstool_top=  
  3. @bazel_tools//tools/cpp:ツールチェーン--cpu=armeabi-v7a  
  • libandroid_tensorflow_inference_java.jar をコンパイルする
  1. bazel ビルド //tensorflow/contrib/android:android_tensorflow_inference_java

TensorFlow は、Android 開発用のサンプル フレームワークを提供します。以下は、AlexNet モデルに基づくアプリです。対応するソース コードを変更してコンパイルし、Android インストール パッケージを生成します。

  • AlexNetモデルに基づいて、推論の入力と出力のテンソル名を変更します。
  1. プライベート静的最終文字列 INPUT_NAME = "input" ;
  2.  
  3. プライベート静的最終文字列 OUTPUT_NAME = "alexnet_v2/fc8/squeezed" ;
  • quantized_alexnet_v2_graph.pbと対応するlabels.txtファイルをアセットディレクトリに配置し、Androidファイルパスを変更します。
  1. プライベート静的最終文字列 MODEL_FILE = "file:///android_asset/quantized_alexnet_v2_graph.pb" ;
  2.  
  3. プライベート静的最終文字列 LABEL_FILE = "file:///android_asset/labels.txt" ;
  • インストールパッケージをコンパイルして生成する
  1. bazel ビルド -c opt //tensorflow/examples/android:tensorflow_demo
  • tensorflow_demo.apk を携帯電話にコピーしてインストールします。ヒマワリの認識効果は次の図に示されています: (画像をクリックすると拡大します)

TensorFlow モバイルアプリケーション開発 API

Android システムで TensorFlow Inference 操作を実行するには、libandroid_tensorflow_inference_java.jar の JNI インターフェースを呼び出す必要があります。主なインターフェースは次のとおりです。

  • TensorFlow Inference オブジェクトをビルドします。オブジェクトをビルドすると、TensorFlow ダイナミック リンク ライブラリ libtensorflow_inference.so がシステムにロードされます。パラメータ assetManager は Android アセット マネージャーです。パラメータ modelFilename は android_asset 内の TensorFlow モデル ファイルのパスです。
  1. TensorFlowInferenceInterface 推論インターフェース = 新規
  2.  
  3. TensorFlowInferenceInterface(assetManager、モデルファイル名);
  • 入力データをTensorFlowグラフに読み込みます。このアプリでは、入力データはカメラで撮影した画像です。パラメータinputNameは、TensorFlow Inferenceでの入力データTensorの名前です。パラメータfloatValuesは入力画像のピクセルデータで、前処理後の浮動小数点値です。[1, inputSize, inputSize, 3]は、224*224*3のRGB画像などの切り取られた画像のサイズです。
  1. 推論インターフェース.feed(入力名、floatValues、1、入力サイズ、入力サイズ、3);
  • モデル推論を実行します。outputNames は TensorFlow Inference モデルで計算されるテンソルの名前であり、このアプリでは分類された Logist 値です。
  1. 推論インターフェースを実行します(出力名);
  • モデル推論の演算結果を取得します。ここで、outputName はテンソル名であり、パラメーター output にはテンソルの演算結果が格納されます。このアプリでは、計算されたロジスト浮動小数点配列が出力されます。
  1. 推論インターフェース。fetch (outputName、outputs) ;

要約する

この記事では、「花を見て名前を識別する」アプリをベースに、Androidスマート端末におけるTensorFlowの応用技術について説明します。まず、AlexNet モデル構造を確認し、AlexNet スリム モデルに基づいて Flowers データをトレーニングしました。次に、トレーニングした CheckPoint データをフリーズおよび量子化して、スマート端末で使用される推論モデルを生成しました。次に、TensorFlow Android アプリケーション開発環境の構築を紹介し、Android 上で TensorFlow のダイナミック リンク ライブラリと Java 開発キットをコンパイルして生成します。最後に、Inference API の使用方法を紹介します。

参考文献

  • http://www.tensorflow.org
  • ディープラーニングツール: 分散TensorFlowとサンプル分析
  • ディープラーニングツール:TensorFlowの活用
  • ディープラーニングツール: TensorFlow システムアーキテクチャと高性能プログラミング
  • ディープラーニングツール: TensorFlow とディープ畳み込みニューラルネットワーク
  • ディープラーニングツール: TensorFlow と NLP モデル

<<:  Facebookの詐欺行為と戦う方法を学び、CopyCatchアルゴリズムがLockstepをどのように解決するかを見てみましょう

>>:  機械学習を学ぶ前に、まずは確率論の基礎知識を習得する必要があります。

ブログ    
ブログ    

推薦する

...

機械学習がサプライチェーン管理を変える10の方法

[[431487]]サプライチェーン管理で機械学習を使用すると、日常的なタスクを自動化できるため、企...

...

ChatGPTはPyTorchなしでは構築できません。LeCunの発言は白熱した議論を引き起こしました。モデルメーカーが重量を公開しない理由は、

ここ2日間で、オープンソースの話題が再び人気を集めています。 「オープンソースがなければ、AI は何...

「人工知能+学習」は教育をより良くするのでしょうか?

「教育は死んだが、学習は不滅である。」半世紀前、アメリカの教育思想家イリイチは著書『脱学校社会』の...

...

AIはITに顧客体験の向上における優位性を与える

パンデミックにより、IT 部門がデジタル顧客体験を向上させる必要性がさらに高まりました。 IT リー...

金融業界がAI自動化を採用すべき理由

ガートナーによると、「ロボティック・プロセス・オートメーション(RPA)ソフトウェア市場は2020年...

機械学習の第一歩、ランダムフォレストのステップバイステップの入門書です

2020 年には、すでに多くの楽しい機械学習チュートリアルが見つかります。この記事では、最も人気のあ...

国産初のオープンソースMoE大型モデルが登場!パフォーマンスはLlama 2-7Bに匹敵し、計算量は60%削減されます。

オープンソースのMoEモデルがついに国内初のプレイヤーを迎えます!そのパフォーマンスは高密度の Ll...

機械学習のユニットテスト方法

過去 1 年間、私は仕事時間のほとんどをディープラーニングの研究とインターンシップに費やしてきました...

C# モザイク アルゴリズムの実装

視聴者の要望に応えて、今日は C# モザイク アルゴリズムの実装についてお話します。古いルール、理解...

クラウドとSaaSのセキュリティには包括的なアプローチが必要

米国国土安全保障省および米国国税庁の元最高情報責任者であり、現在は Learning Tree In...

...

ファーウェイの孫茂陸氏:今後5年間で10億ドルを投資し、スマートエンタープライズサービスを構築する

上海で開催されたHUAWEI CONNECT 2019で、ファーウェイはエンタープライズサービス開発...