
Neoml adalah kerangka pembelajaran mesin ujung ke ujung yang memungkinkan Anda membangun, melatih, dan menggunakan model ML. Kerangka kerja ini digunakan oleh Insinyur Abbyy untuk visi komputer dan tugas pemrosesan bahasa alami, termasuk preprocessing gambar, klasifikasi, analisis tata letak dokumen, OCR, dan ekstraksi data dari dokumen terstruktur dan tidak terstruktur.
Fitur Utama:
Versi Perpustakaan с ++ lengkap telah diuji pada platform:
| OS target | Penyusun | Arsitektur |
|---|---|---|
| Windows 7+ (CPU dan 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) | dentang 7+ | armeabi-v7a, arm64-v8a, x86, x86_64 |
Inferensi Java dan versi Perpustakaan Objective-C telah diuji pada platform:
| OS target | Penyusun | Arsitektur |
|---|---|---|
| iOS 11+ (CPU, GPU) | Apple Clang 12+ | ARM64-V8A, x86_64 |
| Android 5.0+ (CPU), Android 7.0+ (GPU) | dentang 7+ | armeabi-v7a, arm64-v8a, x86, x86_64 |
Perpustakaan dibangun dengan CMake (versi yang disarankan 3.18 dan yang lebih baru).
Untuk kinerja CPU terbaik di Windows, Linux dan MacOS kami menggunakan Intel MKL.
Saat memproses pada GPU, Anda dapat secara opsional menggunakan CUDA (versi 11.2 UPD.1) di Windows atau Linux dan Vulkan (versi 1.1.130 dan yang lebih baru) di Windows, Linux atau Android.
Kami juga menggunakan Tes Google untuk pengujian dan buffer protokol Google untuk bekerja dengan format model ONNX.
Kami menggunakan generator yang sangat berbelit -belit dari JIT Code Xbyak untuk mempercepat beberapa konvolusi pada prosesor x86_64.
Lihat di sini untuk instruksi tentang membangun versi perpustakaan C ++ untuk platform yang berbeda.
Lihat di sini untuk instruksi tentang membangun java dan versi Objective-C yang hanya akan menjalankan jaringan saraf yang terlatih.
Beberapa tutorial dengan kode sampel akan membantu Anda mulai bekerja dengan perpustakaan:
Perpustakaan dikembangkan dengan prinsip -prinsip ini dalam pikiran:
Antarmuka pengguna sepenuhnya terpisah dari perhitungan tingkat rendah yang diimplementasikan oleh mesin matematika.
Satu -satunya hal yang harus Anda lakukan adalah menentukan pada awal jenis mesin matematika yang akan digunakan untuk perhitungan. Anda juga dapat memilih untuk memilih mesin matematika secara otomatis, berdasarkan konfigurasi perangkat yang terdeteksi.
Sisa kode pembelajaran mesin Anda akan sama terlepas dari mesin matematika yang Anda pilih.
Setiap jaringan bekerja dengan satu instance mesin matematika, dan semua lapisannya seharusnya dibuat dengan mesin matematika yang sama. Jika Anda telah memilih mesin matematika GPU, itu akan melakukan semua perhitungan. Ini berarti Anda tidak dapat memilih untuk menggunakan CPU untuk perhitungan "ringan" seperti menambahkan vektor dan GPU untuk perhitungan "berat" seperti mengalikan matriks. Kami telah memperkenalkan pembatasan ini untuk menghindari sinkronisasi yang tidak perlu dan pertukaran data antar perangkat.
Antarmuka mesin matematika aman-utas; Contoh yang sama dapat digunakan dalam jaringan yang berbeda dan utas yang berbeda.
Perhatikan bahwa ini mungkin memerlukan beberapa overhead sinkronisasi.
Namun, implementasi jaringan saraf tidak aman; Jaringan dapat berjalan hanya dalam satu utas.
Perpustakaan Neoml juga bekerja dengan model yang dibuat oleh kerangka kerja lain, selama mereka mendukung format ONNX. Lihat deskripsi API impor. Namun, Anda tidak dapat mengekspor model yang dilatih neoml ke dalam format ONNX.
Perpustakaan menggunakan format binernya sendiri (diimplementasikan oleh CArchive , CArchiveFile ) untuk menyimpan dan memuat model yang terlatih.
Pemrosesan pada GPU sering membantu secara signifikan meningkatkan kinerja operasi matematika. Perpustakaan Neoml menggunakan GPU baik untuk melatih dan menjalankan model. Ini adalah pengaturan opsional dan tergantung pada kemampuan perangkat keras dan perangkat lunak sistem Anda.
Untuk mengerjakan GPU, perpustakaan membutuhkan:
Perpustakaan Neoml berasal dari infrastruktur internal Abbyy. Karena berbagai alasan, Abbyy menggunakan kerangka kerja lintas platform yang disebut fineobj. Karena itu, versi Perpustakaan Open menggunakan beberapa primitif kerangka kerja ini. Lihat deskripsi kelas umum.
Neoml berisi dua perpustakaan C ++:
Perpustakaan menyediakan objek C ++ yang mengimplementasikan berbagai algoritma tingkat tinggi. Itu terdiri dari beberapa bagian:
Mesin matematika yang digunakan untuk perhitungan adalah modul terpisah yang mengimplementasikan fungsi matematika tingkat rendah yang digunakan dalam pustaka algoritma. Pengguna juga dapat memanggil fungsi -fungsi ini tetapi biasanya tidak perlu.
Modul ini memiliki implementasi yang berbeda untuk platform yang berbeda. Secara khusus, ada implementasi yang menggunakan GPU untuk perhitungan.
Mesin matematika juga merupakan satu set antarmuka C ++ yang dijelaskan di sini.
Lihat dokumentasi luas modul Python di readthedocs.io.
Untuk bekerja dengan versi inferensi perpustakaan di Java dan Kotlin, kami menyediakan antarmuka java.
Untuk bekerja dengan versi inferensi perpustakaan di Swift dan Objective-C, kami menyediakan antarmuka Objective-C.
Hak Cipta © 2016-2020 Abbyy Production LLC. Lisensi di bawah lisensi Apache, versi 2.0. Lihat file lisensi.