ディープラーニングツール:スマート端末における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をどのように解決するかを見てみましょう

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

ブログ    
ブログ    
ブログ    

推薦する

...

...

この本は人気があり、この本を学んだ男性は給料が30万以上上がった

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

Python は 2023 年のプログラミング言語リストで引き続きトップを占めています。 SQLが求人需要リストのトップに

技術の急速な発展により、プログラミング言語は現代社会に欠かせないものになりました。ウェブサイト開発、...

人工知能の研究内容:自然言語処理と知的情報検索技術

自然言語処理は、人工知能技術を実際の分野に応用した典型的な例です。コンピュータ システムが人間のよう...

AI支援農業建築:農業生産効率の向上

科学技術の急速な発展に伴い、人工知能(AI)はさまざまな分野にますます統合されつつあり、農業分野も例...

MITチームの最新研究により、LiDARと2Dマップのみでエンドツーエンドの自動運転が実現

自動運転に関して言えば、当然のことながら「視覚アルゴリズム」派と「ライダー」派の論争が思い浮かびます...

自動運転車は交通事故のほとんどをなくすことはできないかもしれない

統計によると、交通事故のほぼ主な原因は運転者の過失です。そのため、自動化は長い間、セキュリティにおけ...

...

「初の顔認証事件」の最終判決がこちら

[[392244]] 4月9日午後3時、「初の顔認識事件」は杭州市中級人民法院で二審判決を受けた。こ...

インテリジェントプロセスオートメーションについて知っておくべきこと

インテリジェント プロセス オートメーション (IPA) とは何ですか?インテリジェント プロセス ...

東方世界の楊暁:AR開発技術のポイントを探る

[51CTO.comからのオリジナル記事] 市場調査会社Digi-Capitalのデータによると、2...

中国ダイビングチームの勝利には人工知能が貢献した

ネットユーザーたちはこのオリンピックについて不満を述べている。たとえ境界線を越えたとしても、高得点を...

...

K8S向け機械学習ツール「Kubeflow」の詳しい解説

[51CTO.com オリジナル記事] Kubeflowには多くのコンポーネントがあり、各コンポーネ...