フライング・パドルの開発者である李瑞さんは、東京逓信大学の学生で、AIとモバイル開発の愛好家です�
デスクトップにおけるエレクトロン技術の漸進的な台頭により、エレクトロンをベースに開発されたコードエディター、チャットソフト、ゲームなどが数多く存在します。
バックエンドの開発にNode.jsを使用するために使用されている人のために、美しいデスクトップUIクライアントまたは難易度の一定のセットの開発、およびElectronの開発はあまりにも簡単ではありません、限り、あなたはHTMLを書くことができるように、あなたはクライアントを書くことができる、ゆっくりと洗練された時間の残りの部分は、時間に引き渡すことができます。また、このオープンソースの技術は、開発者がJavaScript、HTMLとCSSを使用して、クロスプラットフォームのデスクトップアプリケーションを構築することができます。異なるプラットフォームのUI効果とWebページが同じ効果を表示し、非常に使いやすい。
では、デスクトップクライアントの上に、開発者が推論のためにPaddle Liteをローカルにデプロイするのを助けることができますか?答えはイエスです。これはPaddle LiteをNode.js用のC++プラグインとしてパッケージ化する可能性を開きます。うまく移植できれば、イメージ分類などのタスクを完了するためのデスクトップアプリケーションの開発をクライアント上で実現できます。同時に、Paddle Liteが提供するモデルは非常に軽量であり、通常のPCで十分なパフォーマンスを発揮します。
また、ウェブサイトのバックエンドなど、他のNode.jsシナリオでは、推論に直接Paddle Liteを使用することも可能です。
そこで、Paddle LiteのC++ APIをPaddle Liteクラスにカプセル化するデモを作りました。Node.jsはPaddle LiteのC++ APIを呼び出すことができます。
プロジェクト効果
1.コンパイル済み結果のダウンロード: パドルノードのリリースインターフェースから、以下の3つのファイルを含むコンパイル済み結果を直接ダウンロードすることができます:
paddlenode.node : コンパイルされたNode.jsモジュール
libiomp5md.dll : OpenMP DLL
mklml.dll : MKL 数学コアライブラリ
2.事前学習済みモデルのダウンロードと変換:公式オープンモデルリポジトリからmobilenet_v1モデルをダウンロードし、optツールを使用して変換します:
1.パドルライトをインストールします。
pip install paddlelite
2.変形モデル
paddle_lite_opt -モデル_dir=./mobilenet_v1 -有効_targets=x86 -最適化_out=mobilenetv1_opt
上記の手順を実行した後、変換されたモデルファイル: mobilenetv1_opt.nb を取得できます。
3.Node.jsの推論:
var addon = require('./paddlenode')
var arr = new Array()
for(var i=0; i<arr.length; i++) arr[i]=1;
addon.set_model_file("./mobilenetv1_opt.nb")
addon.infer_float(arr,[1, 3, ])
set_model_fileメソッドはPaddle Liteのset_model_from_fileに直接対応しており、infer_floatの第1引数は渡されるデータ、第2引数は渡されるデータのサイズです。個々の要素の積のサイズが入力データのサイズと異なる場合、エラーがスローされます。その後、1001次元の配列が得られます:
ここで、要素0はトラバーサルを容易にするための結果ベクトルのサイズであり、他の要素はモデル自体の出力です。
手動コンパイル
手動でコンパイルする場合は、まずPaddle Liteのリリースからx86プリコンパイル(最新バージョンはv2.6.1)を見つける必要があります。これをダウンロードしてbinding.gypに配置したら、lite_dir変数にプリコンパイルリポジトリを設定します。
フォルダの絶対パス。以下に例を示します:
{
'variables': {
'lite_dir%': 'C:/Users/Li/Desktop/Exp/inference_lite_lib.win.x86.MSVC.C++_static.py37.full_publish',
},
"targets": [
{
'target_name': "paddlenode",
'sources': ["paddlelib.h","paddlelib.cc","paddlenode.cc"],
'defines': [
],
'include_dirs': [
"<(lite_dir)/cxx/include",
"<(lite_dir)/third_party/mklml/include"
],
'libraries': [
"-l<(lite_dir)/cxx/lib/libpaddle_api_light_bundled.lib",
"-l<(lite_dir)/third_party/mklml/lib/libiomp5md.lib",
"-l<(lite_dir)/third_party/mklml/lib/mklml.lib",
"-lshlwapi.lib"
]
}
]
}
node-gypとwindows-build-toolsがインストールされていることを確認してください:
node-gyp configure build
最終的な結果を生成することができますが、プリコンパイルされたライブラリからコンパイルされた結果のディレクトリに2つのdllライブラリをコピーすることを忘れないでください。なぜなら、libファイルの公式リリースバージョンを使用すると、デバッグバージョンがミスマッチエラーにつながるからです。
原則
このプロジェクトは、実際にはシェルのセットでパドルライトのC + +デモで、最も注意を払う必要があるNode.jsの公式ドキュメントでは、相互にN - APIとCのオブジェクトを変換する方法であり、変換を行うことができるに基づいて、関数や説明の非常に大きな数を与えます。ここでは、いくつかの関数の説明です:
ナピ
定義プロパティ - リソースの定義ナピ
取得cb_info - 呼び出しの情報を取得するナピ
スローerror - エラーをスローします。ナピ
typeo - ナピを取得値のタイプナピ
得る値utf8 - napi_value を utf8 文字列に変換します。utf8 - napi_value を utf8 文字列に変換します。ナピ
ゲットlength - napiを取得length - napi に対応する配列の長さを取得します。値ナピ
得る値double - get napi値の倍精度配列要素を取得します。ナピ
得る値int32 - napi値を 32 ビット整数に変換します。ナピ
得る値double - napi値を倍精度浮動小数点数に変換します。ナピ
を作成します。double - 倍精度浮動小数点数を napi_value に変換します。
また、変換だけを行う関数も数多くあります。