モバイル端末でのアルゴリズムモデルの展開

    この段階でアプリで使用されるアルゴリズムモデルには、主に2つのモードがあります。

オンライン方式

まず、モバイル端末で前処理を行い、予測のためにサーバーにデータを転送してから、モバイル端末に戻ります。
利点:展開が比較的簡単で、既製のフレームワーク(caffe、theano、mxnet、Torch)をパッケージ化直後に使用できます。計算にサーバーを使用し、強力なパフォーマンスを発揮し、比較的大きなモデルを処理できます。
欠点:ネットワークを使用し、表示する必要があります。この効果はネットワーク速度に依存し、リアルタイム要件の高いアプリケーションには適していません。

オフラインモード

ハードウェアのパフォーマンスに応じてモデルを選択し、サーバーでモデルをトレーニングし、電話で予測を行うプロセス。
長所:ネットワークを使用する必要がなく、プライバシーを保護できます。
短所:コンピューティングのパフォーマンス、時間のかかるなどは、モバイル端末のパフォーマンスに依存します。一部のモデルはCPUしか使用できず、精度に影響があり、大規模である可能性があります。クラウドのような分散トレーニングは実行できません。端末の展開は比較的面倒であり、モバイル端末用に最適化する必要があります。大規模なモデルは多くのリソース(計算、メモリ、ストレージ、電力)を消費します。

オフライン展開方法

主に2つの段階に分かれており、第1段階はモデルのトレーニングと取得であり、第2段階はモデルの取得後にモバイル端末にモデルを展開することです。この記事では主に第2段階について説明します。

トレーニングモデル

トレーニングモデルの最初のフェーズでは、実装用の成熟したオープンソースフレームワークとアルゴリズムがすでに存在しますが、モバイル端末に展開するには、圧縮と高速化も必要です。

圧縮ネットワーク

現在、ディープラーニングはさまざまな分野の従来のアルゴリズムを簡単に破壊しますが、実際のプロジェクトで実際に使用すると大きな問題が発生します。

  1. 計算量は膨大です。
  2. このモデルは大量のメモリを占有します。
    モバイル端末システムのリソースが限られているため、深層学習モデルは数百Mにもなる可能性があるため、モバイル端末システムに深層学習を適用することは困難です。

モバイル展開

現在、多くの企業がオープンソースのモバイルディープラーニングフレームワークを立ち上げています。これは基本的にトレーニングをサポートせず、前向き推論のみをサポートします。これらのフレームワークはすべてオフライン方式であり、ユーザーデータのプライバシーを確​​保し、インターネット接続に依存しなくなります。

Caffe2

2017年4月19日、FacebookはF8開発者会議でCaffe2を立ち上げました。このプロジェクトは、caffe2に基づいて移行される、携帯電話用にカスタマイズされたディープフレームワークです。目的は、最も一般的なスマートデバイスを作成することです。携帯電話は、ディープラーニングアルゴリズムを広く効率的に適用することもできます。
Caffe2は、表現、速度、モジュール性を念頭に置いて作成されたディープラーニングフレームワークです。Caffeの実験的なリファクタリングであり、計算をより柔軟に整理する方法を可能にします。

オープンソースアドレス:https:  //github.com/caffe2/caffe2

TensorFlow Lite

2017年5月17日、GoogleはI / OカンファレンスでTensorFlowLiteをリリースしました。これは、モバイルデバイス向けに最適化されたTensorFlowのバージョンです。TensorFlow Liteには、次の3つの重要な機能があります。
軽量:小さな2進数で機械学習モデルの推論をサポートし、
クロスプラットフォーム(クロスプラットフォーム)をすばやく初期化/開始できます:さまざまなプラットフォームで使用できます実行、AndroidをサポートするようになりましたおよびiOSFast
(Fast):モデルの読み込み時間の大幅な短縮、ハードウェアアクセラレーションのサポートなど、モバイルデバイス向けに最適化されています

モジュールは次のとおりです
。TensorFlowモデル:ハードディスクに保存されたトレーニング済みのTensorFlowモデル
TensorFlow Lite Converter:モデルをTensorFlow Liteファイル形式に変換するプログラム
TensorFlowLiteモデルファイル:FlatBuffersに基づく最適化されたモデルファイル形式速度とサイズについて。

TensorFlow Liteは現在、モバイル向けにトレーニングおよび最適化された多くのモデルをサポートしています。

コアML

機械学習モデルをアプリに統合します。Core MLは、すべてのモデルに統一されたプレゼンテーションを提供します。アプリは、Core ML APIとユーザーデータを使用して、すべてユーザーのデバイスで予測を行い、モデルをトレーニングまたは微調整できます。

メース

XiaomiはディープラーニングフレームワークMACEをオープンソース化しました。これには、異種アクセラレーション、アセンブリレベルの最適化、さまざまなフレームワークのモデル変換のサポートなど、いくつかの機能があります。

異質性により、CPU、GPU、DSPでさまざまなモデルを実行して、顔検出、顔認識、顔追跡など、さまざまなハードウェアで同時に実行できる実際の本番環境への展開を実現できます。XiaomiがサポートするGPUはQualcommに限定されません。これは非常に用途が広く、非常に優れています。たとえば、RockchipのRK3299はCPUとGPUの両方を利用できます。
MACEは、モバイルデバイス向けに最適化された深層学習モデル予測フレームワークです。MACEは、設計当初から、モバイルデバイスの特性に合わせて特別に最適化されています。
速度:モバイル端末で計算されるモデルの場合、全体的な予測遅延は通常、非常に高い要件があります。フレームワークの下部では、ARM CPUに対してNEON命令レベルの最適化が実行され、モバイルGPUに対して効率的なOpenCLカーネルコードが実装されています。Qualcomm DSPの場合、nnlib計算ライブラリがHVXアクセラレーション用に統合されています。同時に、アルゴリズムレベルでは、Winogradアルゴリズムを使用して畳み込みを加速します。
消費電力:モバイル端末は消費電力に非常に敏感です。フレームワークはARMプロセッサのbig.LITTLEアーキテクチャを対象としており、高性能や低消費電力などのさまざまな組み合わせ構成を提供します。Adreno GPUには、さまざまな電力パフォーマンスオプションが用意されているため、開発者はパフォーマンスと消費電力を柔軟に調整できます。
システムの応答:GPUコンピューティングモードの場合、フレームワークの最下層がOpenCLカーネルを適応的に分割およびスケジュールして、GPUレンダリングタスクをより適切にプリエンプトおよびスケジュールできるようにし、システムの流暢さを確保します。
初期化の遅延:実際のプロジェクトでは、初期化時間はユーザーエクスペリエンスにとって非常に重要であり、フレームワークはこのためにターゲットを絞った最適化を実行しました。
メモリ使用量:モデルの演算子への依存関係分析とメモリ再利用テクノロジーの導入により、メモリ使用量が大幅に削減されます。
モデルの保護:モバイルモデルの場合、知的財産の保護が非常に重要になることがよくあります。MACEは、モデルのC ++コードへの変換をサポートしているため、リバースエンジニアリングの難易度が大幅に高まります。
さらに、MACEはTensorFlowモデルとCaffeモデルをサポートし、トレーニング済みモデルを独自のモデルデータファイルに変換できる変換ツールを提供します。同時に、モデルをC ++コードに変換し、動的ライブラリまたは静的ライブラリの生成をサポートすることもできます。 、モデルの機密性を向上させます。

現在、MACEは、カメラのポートレートモード、シーン認識、画像の超解像、オフライン翻訳(近日公開)など、Xiaomi携帯電話のさまざまなアプリケーションシナリオに適用されています。

オープンソースアドレス:https//github.com/XiaoMi/mace

MACE Model Zoo
は、MACEとともにオープンソースでもあり、現在、オブジェクト認識、シーンのセマンティックセグメンテーション、画像のスタイル設定など、複数のパブリックモデルが含まれています。

リンク:https:  //github.com/XiaoMi/mace-models

FeatherCNNおよびNCNN

FeatherCNNは、ARMアーキテクチャに基づいてTencentAIプラットフォーム部門によって開発された効率的なニューラルネットワークフォワードコンピューティングライブラリです。コアアルゴリズムは特許を取得しています。コンピューティングライブラリはカフェモデルをサポートしており、依存関係がない、高速である、軽量であるという3つの主要な特性があります。ライブラリには次の特徴があります。

  1. 依存関係なし:コンピューティングライブラリにはサードパーティコンポーネントがなく、静的ライブラリまたはソースコードは、ARMサーバー、組み込み端末、Android、Apple携帯電話、その他のモバイルスマートデバイスに簡単にデプロイできます。
  2. 高速:このコンピューティングライブラリは、現在、最高のオープンソースフォワードコンピューティングライブラリの1つです。64コアARMメニーコアチップのCaffeおよびCaffe2の6倍および12倍、iPhone7のTensorflowliteの2.5倍の速度です。
  3. 軽量:このコンピューティングライブラリのコンパイル済みバックエンドLinux静的ライブラリはわずか115KB、フロントエンドLinux静的ライブラリは575KB、実行可能ファイルはわずか246KBです。
    FeatherCNNは、TensorGEMMによって高速化されたWinogradバリアントアルゴリズムを使用します。これは、ARM命令セットを使用してCPU効率を最大化し、モバイル端末に強力なAIコンピューティング機能を提供します。このコンピューティングライブラリを使用すると、プロのニューラルネットワークチップまたはGPUのパフォーマンスに近づいたり、到達したりすることができ、ユーザーの既存のハードウェア投資を保護できます。

NCNNは、携帯電話向けに最適化された高性能ニューラルネットワークフォワードコンピューティングフレームワークです。ncnnは、設計当初から携帯電話の導入と使用を深く考えています。サードパーティの依存関係、クロスプラットフォーム、携帯電話のCPU速度は、現在知られているすべてのオープンソースフレームワークよりも高速です。ncnnに基づいて、開発者はディープラーニングアルゴリズムを携帯電話に簡単に移植して効率的に実行し、人工知能アプリを開発し、AIをすぐに利用できます。ncnnは現在、QQ、Qzone、WeChat、TiantianPtuなどのさまざまなTencentアプリケーションで使用されています。

どちらのフレームワークもTencentによって作成され、FeatherCNNはTencent AIプラットフォーム部門から提供され、NCNNはTencentYoutuから提供されています。
重要なのは、すべてがオープンソースであり、
以前はcpu NCNNオープンソースのみをサポートしており、パフォーマンスが向上し、ユーザーが増えているということです。FeatherCNNはオープンソースに遅れており、基盤は非常に良好です。

FeatherCNNオープンソースアドレス:http
//github.com/tencent/FeatherCNN NCNNオープンソースアドレス:https//github.com/Tencent/ncnn

MDL

BaiduのモバイルディープラーニングMDLフレームワークには、主にモデル変換モジュール(MDLコンバーター)、モデルロードモジュール(ローダー)、ネットワーク管理モジュール(ネット)、行列演算モジュール(Gemmers)、およびJNIインターフェイスレイヤー(JNIインターフェイス)が含まれます。その中で、モデル変換モジュールは主にCaffeモデルをMDLモデルに変換する役割を果たします。また、32ビット浮動小数点パラメーターの8ビットパラメーターへの量子化をサポートするため、モデルボリュームが大幅に圧縮されます。モデルロードモジュール主にモデルの非量子化とロード検証、ネットワークを完了します。登録およびその他のプロセス中、ネットワーク管理モジュールは主にネットワーク内の各レイヤーの初期化と管理を担当します。MDLは、Androidが呼び出すJNIインターフェイスレイヤーと開発者を提供します。 JNIインターフェースを呼び出すことにより、ロードおよび予測プロセスを簡単に完了することができます。

モバイルディープラーニングフレームワークとして、モバイルアプリケーション自体と動作環境の特性を十分に考慮する必要があり、速度、サイズ、およびリソース占有率に関して厳しい要件があります。同時に、スケーラビリティ、堅牢性、および互換性も考慮する必要があります。フレームワークのスケーラビリティを確保するために、MDLはレイヤーレイヤーを抽象化し、フレームワークユーザーがモデルのニーズに応じて特定のタイプのレイヤーをカスタマイズできるようにします。MDLを使用して、さまざまなタイプのレイヤーを追加することで、より多くのネットワークモデルをサポートします。他の場所のコードを変更します。フレームワークの堅牢性を確保するために、MDLはリフレクションメカニズムを使用してC ++の最下位レベルの例外をアプリケーション層にスローし、アプリケーション層は、ログを介した例外情報の収集や継続的なソフトウェア最適化の確保など、例外をキャッチすることで例外を処理します。 。現在、業界には多くの種類の深層学習トレーニングフレームワークがあり、MDLはモデルトレーニング機能をサポートしていません。フレームワークの互換性を確保するために、MDLはCaffeモデルをMDLに変換するためのツールスクリプトを提供します。ユーザーはモデルを完成させることができます。 1行のコマンドによる変換と定量化。プロセス。

オープンソースアドレス:https//github.com/baidu/mobile-deep-learning

SNPE

これはQualcommSnapdragonの公式SDKであり、オープンソースではありません。

実用化

Zhiyun Viewの顔キャリブレーションアルゴリズムを例にとると、オープンソースプロジェクトのアドレスは次のとおりです:https
//github.com/zeusees/HyperLandmark

  1. 。展開まず、カフェやtensorflowを通じて、列車のために使用TencentのNCNN例えば、モデルを生成しますカフェのトレーニングを使用して:。
    deploy.prototxt
    snapshot_10000.caffemodel

  2. 次に、caffeに付属のツールを使用して、古いバージョンのcaffeネットワークとモデルを新しいバージョンに変換します(ncnnツールは新しいバージョンのみを認識します)
    upgrade_net_proto_text [古いprototxt] [新しいprototxt]
    upgrade_net_proto_binary [古いcaffemodel] [新しいcaffemodel]

  3. caffe2ncnnツールを使用して、ncnnのネットワーク記述とモデルを変換します
    。caffe2ncnndeploy.prototxtbvlc_alexnet.caffemodel alexnet.param alexnet.bin
    ただし、param記述ファイルはプレーンテキストであるため、ncnn2memツールを使用してバイナリ記述ファイルに変換できます。 binおよび2つの静的配列のalexnet.param。コードファイルを生成するためのメモリモデル

  4. 次に、NCNNを使用して、バイナリparam.binおよびbinモデル
    ncnn :: Net net;
    net.load_param_bin( "alexnet.param.bin");
    net.load_model( "alexnet.bin");をロードできます

  5. 入力を取得し、出力結果を計算します
    。ncnnは、独自のデータ構造Matを使用して、入力データと出力データを格納します。入力画像のデータをMatに変換し、必要に応じて平均値と乗算係数を減算します。

#include "mat.h"
unsigned char* rgbdata;// data pointer to RGB image pixels
int w;// image width
int h;// image height
ncnn::Mat in = ncnn::Mat::from_pixels(rgbdata, ncnn::Mat::PIXEL_RGB, w, h);
const float mean_vals[3] = {104.f, 117.f, 123.f};
in.substract_mean_normalize(mean_vals, 0);

フォワードネットワークを実行し、計算結果を取得します

#include "net.h"
#include "alexnet.id.h"
ncnn::Mat in;// input blob as above
ncnn::Mat out;
ncnn::Extractor ex = net.create_extractor();
ex.set_light_mode(true);
ex.input(alexnet_param_id::BLOB_data, in);
ex.extract(alexnet_param_id::BLOB_prob, out);

特定のコードはgithubのデモを参照できます

 

入門ディープラーニングチュートリアル:

ディープラーニングの原則と実践的なチュートリアル:https//edu.51cto.com/sd/b5af5  

アルゴリズムエンジニアのための高度なチュートリアル:

ターゲット検出-YOLO-V4はPyTorchに基づいており、ゼロから再現します(歩行者と車両の検出による実際の戦闘):https://edu.51cto.com/sd/96752

 

学習教材:

ディープラーニングの展開-バックグラウンドサーバーリンクを構築します:https//www.pyimagesearch.com/2018/02/05/deep-learning-production-keras-redis-flask-apache/

ディープラーニングモデルをデプロイする方法を教えてください:https//www.jianshu.com/p/43da2553a2fb

WebとC ++に基づく2つのディープラーニングモデルのデプロイ方法:https//cloud.tencent.com/developer/article/1684510

Pytorch MobileのAndroidデモソースコード分析:https://blog.csdn.net/karry_zzj/article/details/102827337?utm_medium = distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase&depth_1-utm_source = distribute.pc_relevant 。 none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase

軽量の深層学習プロジェクトをデプロイする方法:https//blog.csdn.net/qq_33431368/article/details/102577704?utm_medium = distribute.pc_aggpage_search_result.none-task-blog-2〜all〜first_rank_v2〜rank_v28-6 -102577704 .nonecase&utm_term =%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E9%83%A8%E7%BD%B2%E5%88%B0%E5%89% 8D%E7%AB%AF&spm = 1000.2123.3001.4430

補足学習資料:

Flaskに基づくKerasディープラーニングモデルをデプロイしますhttps//www.freesion.com/article/4371925771/

pytorch漫画変換ncnn、再移植android、ios:https://blog.csdn.net/u011961856/article/details/97372919?utm_medium = distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param&depth_1-utm_source = distribute .pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param

 

 

おすすめ

転載: blog.csdn.net/wzhrsh/article/details/109520435