
NEOMLは、 MLモデルを構築、トレーニング、展開できるエンドツーエンドの機械学習フレームワークです。このフレームワークは、画像の前処理、分類、ドキュメントレイアウト分析、OCR、構造化および非構造化ドキュメントからのデータ抽出など、コンピュータービジョンと自然言語処理タスクのためにAbbyyエンジニアが使用しています。
主な機能:
完全な消++ライブラリバージョンは、プラットフォームでテストされています。
| ターゲットOS | コンパイラ | 建築 |
|---|---|---|
| Windows7+(CPUおよびGPU) | MSVC 2019+ | x86、x86_64 |
| Ubuntu 14+(CPU) | GCC 5.4+ | x86_64 |
| MacOS 10.11+(CPU) | Apple Clang 12+ | ARM64、x86_64 |
| iOS 11+(CPU、GPU) | Apple Clang 12+ | ARM64-V8A、X86_64 |
| Android 5.0+(CPU)、Android 7.0+(GPU) | Clang 7+ | Armeabi-V7a、ARM64-V8A、X86、X86_64 |
推論JavaおよびObjective-Cライブラリバージョンは、プラットフォームでテストされています。
| ターゲットOS | コンパイラ | 建築 |
|---|---|---|
| iOS 11+(CPU、GPU) | Apple Clang 12+ | ARM64-V8A、X86_64 |
| Android 5.0+(CPU)、Android 7.0+(GPU) | Clang 7+ | Armeabi-V7a、ARM64-V8A、X86、X86_64 |
ライブラリはCmake(推奨バージョン3.18以降)で構築されています。
Windows、Linux、およびMacOで最高のCPUパフォーマンスを使用するには、Intel MKLを使用しています。
GPUで処理する場合、WindowsまたはLinuxおよびVulkan(バージョン1.1.130以降)でWindows、Linux、AndroidでCUDA(バージョン11.2 Upd.1)を使用することができます。
また、Googleテストには、ONNXモデル形式を操作するためのテストおよびGoogleプロトコルバッファーも使用しています。
X86_64プロセッサのいくつかの畳み込みをスピードアップするために、JITコードXbyakの非常に説得力のあるジェネレーターを使用しています。
さまざまなプラットフォームのC ++ライブラリバージョンの構築に関する指示については、こちらをご覧ください。
訓練されたニューラルネットワークのみを実行するJavaおよびObjective-Cバージョンの構築に関する指示については、こちらをご覧ください。
サンプルコードを備えたいくつかのチュートリアルは、ライブラリの操作を開始するのに役立ちます。
図書館は、これらの原則を念頭に置いて開発されました。
ユーザーインターフェイスは、数学エンジンによって実装された低レベルの計算から完全に分離されています。
あなたがしなければならない唯一のことは、計算に使用される数学エンジンのタイプを開始時に指定することです。検出されたデバイス構成に基づいて、数学エンジンを自動的に選択することもできます。
機械学習コードの残りの部分は、選択した数学エンジンに関係なく同じになります。
各ネットワークは1つの数学エンジンインスタンスで動作し、すべてのレイヤーが同じ数学エンジンで作成されるはずです。 GPU数学エンジンを選択した場合、すべての計算を実行します。つまり、ベクトルの追加などの「ライト」計算や、マルチングマトリックスなどの「重い」計算用のGPUを使用することを選択できないことを意味します。不必要な同期とデバイス間のデータ交換を避けるために、この制限を導入しました。
数学エンジンインターフェイスはスレッドセーフです。同じインスタンスが異なるネットワークや異なるスレッドで使用される場合があります。
これには、オーバーヘッドの同期が必要になる可能性があることに注意してください。
ただし、ニューラルネットワークの実装はスレッドセーフではありません。ネットワークは1つのスレッドでのみ実行できます。
NEOMLライブラリは、ONNX形式をサポートする限り、他のフレームワークによって作成されたモデルとも連携します。 Import APIの説明を参照してください。ただし、NeOMLトレーニングモデルをONNX形式にエクスポートすることはできません。
ライブラリは、独自のバイナリ形式( CArchive 、 CArchiveFileによって実装)を使用して、訓練されたモデルを保存およびロードします。
GPUでの処理は、多くの場合、数学的操作のパフォーマンスを大幅に改善するのに役立ちます。 NeOMLライブラリは、モデルのトレーニングと実行の両方にGPUを使用しています。これはオプションの設定であり、システムのハードウェアとソフトウェア機能に依存します。
GPUに取り組むために、ライブラリには次のことが必要です。
NeOMLライブラリは、Abbyy内部インフラストラクチャに由来します。さまざまな理由で、Abbyyはfineobjと呼ばれるクロスプラットフォームフレームワークを使用しています。このため、オープンライブラリバージョンはこのフレームワークのプリミティブの一部を使用しています。一般的なクラスの説明を参照してください。
NeOMLには2つのC ++ライブラリが含まれています。
ライブラリは、さまざまな高レベルのアルゴリズムを実装するC ++オブジェクトを提供します。それはいくつかの部分で構成されています:
計算に使用される数学エンジンは、アルゴリズムライブラリで使用される低レベルの数学関数を実装する別のモジュールです。ユーザーはこれらの機能を呼び出すこともできますが、通常は必要ありません。
このモジュールには、さまざまなプラットフォームに対して実装が異なります。特に、計算にGPUを使用する実装があります。
数学エンジンは、ここで説明するC ++インターフェイスのセットでもあります。
readthedocs.ioのPythonモジュールの広範なドキュメントを参照してください。
JavaとKotlinのライブラリの推論バージョンを使用するには、Javaインターフェイスを提供します。
SwiftおよびObjective-Cのライブラリの推論バージョンを使用するには、Objective-Cインターフェイスを提供します。
Copyright©2016-2020 Abbyy Production LLC。 Apacheライセンス、バージョン2.0に基づいてライセンスされています。ライセンスファイルを参照してください。