社内で髪の多いプログラマートップ3の1人として、私はいつも髪に頼って残業しています。若い人たち、なぜ残業しないの?と自分に問いかけています。私はガールフレンドはいませんが しかし、私はコードを持っています。
でも、私が理解できないのは、隣の職場で働いている男性が私より遅く出勤し、私より早く退勤することです。彼は毎日彼女を迎えに定時に退勤し、いい仕事をしているようです。もちろん、彼の髪もかなりきれいです。私より年上に見えること以外に、彼には何か勝つための秘訣があるのだろうか?昼休みに、1週間分のコーヒーを費やして、私は彼の勝つための秘訣を学んだ。 その秘密がわかれば、仕事でも恋愛でも成功できるかもしれない。 NCNNを直接統合することのデメリット NCNNを直接統合して、老若男女を美しく見せます。統合中に涙を流したのを覚えています。同時に、ガールフレンドのSK2を使って顔をメイクしたいと思いました( 各コンポーネントは NCNN ライブラリに依存し、それを含める必要があり、各コンポーネントの開発者は NCNN インターフェイスに精通し、C 呼び出しコードを記述し、JNI を記述する必要があります。そこで、自然に NCNN コンポーネントを抽出することを考えます。抽出後は、次のようになります。 AOE SDK の NCNN コンポーネント AOE SDKを使えば、私も虎のように行動できます!AOEオープンソースSDKでは、NCNNコンポーネントを提供しています。4つの側面からNCNNコンポーネントについてお話ししましょう。
NCNNコンポーネントの設計 NCNN のコンポーネント設計を理解していなければ、一生懸命働いても 2 ドル 50 セントしか得られないかもしれません。では、そのコンポーネントとは何でしょうか? NCNN コンポーネントの設計コンセプトは、コンポーネントに特定のビジネス ロジックは含まれず、NCNN インターフェイスのカプセル化と呼び出しのみが含まれるというものです。特定のビジネス ロジックは、ビジネス パーティによって外部で実装されます。インターフェースの定義と設計に関しては、TF Lite のソースコードとインターフェース設計を参考にしました。現在提供されている外部呼び出しインターフェースは次のようになります。
そして、機知に富んだ若者自身もこう言った。
AOE NCNNをうまく使えば、タスクを早く完了できます。その秘密はここにあります。
実践せずに語るのは単なる空論です。AOE NCNN の実装プロセスを詳しく説明しましょう。 ★ 複数の入力と複数の出力をサポートする方法 複数の入力と出力をサポートするために、ネイティブ レイヤーに Tensor オブジェクトのリストを作成し、各オブジェクトに関連する入力データと出力データを格納します。ネイティブ レイヤーの Tensor オブジェクトは、tensor_jni を介して呼び出すために Java レイヤーに提供され、Java レイヤーはネイティブ レイヤーのテンソルを指す「ポインタ」アドレスを維持します。このように、複数の入力と複数の出力がある場合、このリスト内の対応するテンソルを取得するだけでデータ操作を実行できます。 ★ ByteBufferの使用 サブセクションを処理するバイト バッファーである ByteBuffer は、従来の配列よりも効率的です。 DirectByteBuffer はオフヒープ メモリを使用するため、カーネルにデータをコピーする必要がなくなり、ByteBuffer を使用するよりも効率的です。 もちろん、ByteBuffer の使用はここで取り上げたいことではありません。ByteBuffer を使用する利点についてお話ししましょう。 1. インターフェース内のバイト操作がより便利になりました。たとえば、putInt、getInt、putFloat、getFloat、flip などの一連のインターフェースで簡単にデータを操作できます。 2. ネイティブ レイヤーと対話し、DirectByteBuffer を使用して効率を向上します。 Java レイヤーとネイティブ レイヤーが「共有」メモリ上で直接操作できるため、中間バイトのコピー プロセスが削減されることを簡単に理解できます。 ★ オブジェクトを入力と出力として使用する方法 現在、ByteBuffer と MultiDimensionalArray のみをサポートしています。実際の操作プロセスでは、ByteBuffer であればダイレクト バッファであるかどうかを判断して、異なる読み取りおよび書き込み操作を実行します。 MultiDimensionalArray の場合は、異なるデータ型 (int、float など)、次元などに応じてデータを読み書きします。 ★ SqueezeNetサンプルの修正 AOE NCNN コンポーネントを統合した後、SqueezeNet を NCNN モジュールに依存させます。SqueezeNet サンプルには、モデル ファイルと、前処理および後処理に関連するビジネス ロジックのみが含まれています。前処理および後処理は、特定のビジネス実装に応じて、Java または C で実装できます。新しいコード構造は非常に簡潔になり、ディレクトリは次のようになります。
↑ このサンプルは、他の AI ビジネス コンポーネントから NCNN コンポーネントへの呼び出しにも適用できます。 (素晴らしいものなら全て完了です) ★ アプリケーションでNCNNコンポーネントにアクセスする方法 NCNN コンポーネントにアクセスするには 2 つの方法があります。 直接アクセス ●AOE SDK経由でアクセス ▲2つのアクセス方法の比較: もう戦いはありません。AOE SDK が勝者だと一方的に宣言します! ★NCNNコンポーネントの概要と考察 NCNN コンポーネントをカプセル化することで、NCNN とのビジネス統合がより高速かつ便利になりました。以前は、NCNN を新しいビジネスに統合するのに半日から 1 日かかることもありました。 AOE NCNN コンポーネントを使用した後、所要時間は 1 ~ 2 時間だけになる場合があります。もちろん、NCNN コンポーネントにはまだ多くの不完全な点があり、NCNN の研究と理解をさらに深める必要があります。今後も継続的な学習を通じて、NCNN コンポーネントの変換と最適化を進めていきます。 |
<<: DeLu Deep Vision: 3Dマシンビジョンに焦点を当て、セキュリティの「スマートアイ」を照らす
編集者注: この記事は Mybridge からのもので、過去 1 年間 (2017 年) で最も素晴...
[[431971]]この記事はWeChatの公開アカウント「3分でフロントエンドを学ぶ」から転載した...
[[282511]]製造業の新たな課題製造業はインテリジェント製造に向けてアップグレードし、変革する...
[[280913]] Jiwei.comニュース(文/Jimmy)によると、北京軌道交通指揮センター...
最新世代の言語モデル (特に GPT-4、PaLM、LLaMa) は、自然言語処理と生成の限界を押し...
[[121962]]この記事の参考文献: アルゴリズム入門、第 2 版。この記事では、ヒープソートア...
自動運転車は自動車の知能化の究極の目標であると広く考えられていますが、自動車技術のさまざまな段階の発...
企業における人工知能新しい人工知能 (AI) と機械学習 (ML) のワークロードにより、エンタープ...
この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...
[[252297]] 8月15日から19日まで、世界ロボット会議が北京市宜荘で成功裏に終了しました...
[[205151]] 1. 問題の説明画像認識や画像分類、その他の機械学習タスクを扱う場合、どのよ...