Versi yang lebih baru (berganti nama):
Versi yang lebih lama:
Bintangi kami di GitHub — ini sangat memotivasi kami!
Mirip adalah kerangka kerja Rust dengan pengikatan Python yang membantu membangun sistem pelacakan yang canggih. Dengan Miripi seseorang dapat mengembangkan SORT paralel, DeepSORT, dan pengamat tunggal canggih lainnya yang sangat efisien (misalnya Cam) atau mesin pelacak multi-pengamat.
Tujuan utama dari Miripi adalah untuk menyediakan sarana untuk membangun mesin pelacak beberapa objek dalam memori yang canggih.
Kerangka kerja ini membantu membangun berbagai jenis mesin pencari pelacakan dan kesamaan - yang paling sederhana yang menyimpan fitur vektor dan memungkinkan membandingkan vektor baru dengan vektor yang disimpan dalam database. Mesin yang lebih canggih beroperasi di trek - serangkaian pengamatan untuk fitur yang sama yang dikumpulkan selama siklus hidup. Sistem seperti ini sering digunakan dalam pemrosesan video atau sistem lain di mana pengamat menerima hasil pengamatan yang tidak jelas atau berubah-ubah.
Mirip adalah kerangka kerja untuk membangun pelacak khusus, namun ia menyediakan algoritma tertentu sebagai fungsi pengguna akhir:
Filter Kalman Kotak Pembatas , yang memprediksi kotak pembatas persegi panjang yang sejajar sumbu dengan pemandangan, juga mendukung kotak pembatas yang berorientasi (diputar).
Filter Kalman Titik 2D , yang memprediksi pergerakan titik 2D.
Filter Kalman Vektor Titik 2D , yang memprediksi vektor pergerakan titik 2D independen (digunakan dalam Keypoint Tracker).
Kliping kotak pembatas , yang memungkinkan penghitungan luas perpotongan untuk kotak pembatas yang sejajar sumbu dan berorientasi (diputar).
Non-Maximum Suppression (NMS) - memfilter kotak pembatas persegi panjang koaksial dengan pemandangan, dan mendukung kotak pembatas yang berorientasi.
Algoritma pelacakan SORT (kotak sejajar sumbu dan berorientasi didukung) - Jarak IoU dan Mahalanobis didukung.
Algoritma pelacakan SORT batch (kotak sejajar sumbu dan berorientasi didukung) - Jarak IoU dan Mahalanobis didukung. Pelacak batch memungkinkan meneruskan beberapa adegan ke pelacak dalam satu batch dan mendapatkannya kembali. Jika platform mendukung batching (seperti Nvidia DeepStream atau Intel DL Streamer), pelacak batch lebih bermanfaat untuk digunakan.
Pelacakan VisualSORT - algoritme mirip DeepSORT (mendukung kotak sejajar sumbu dan berorientasi) - Jarak IoU dan Mahalanobis didukung untuk pelacakan posisi, jarak euclidean dan kosinus digunakan untuk pelacakan visual pada vektor fitur.
Batch VisualSORT - kumpulan rasa VisualSORT;
Meskipun Miripi memungkinkan pembuatan berbagai mesin pelacakan dan kesamaan, ada alat kompetitif yang terkadang lebih cocok. Bagian ini akan menjelaskan di mana penerapannya dan alternatif apa yang ada.
Mirip paling cocok untuk tugas pelacakan di mana objek dideskripsikan melalui beberapa pengamatan untuk kelas fitur tertentu, bukan vektor fitur tunggal. Selain itu, perilakunya dinamis - Anda menghapusnya dari indeks atau memodifikasinya sesering menambahkan yang baru. Ini adalah poin yang sangat penting - ini kurang efisien dibandingkan alat yang bekerja dengan ruang objek yang tumbuh atau statis.
Cocok : melacak orang di seberang ruangan: ID Ulang orang, usia/jenis kelamin, dan fitur wajah dikumpulkan beberapa kali selama pelacakan dan digunakan untuk menggabungkan trek atau memberikan hasil gabungan di akhir trek;
Tidak cocok : database plagiarisme, ketika satu dokumen dijelaskan oleh sejumlah (atau hanya satu) vektor ReID konstan, dokumen ditambahkan tetapi tidak dihapus. Tugasnya adalah menemukan X dokumen teratas yang paling mirip dengan yang dicentang.
Jika tugas Anda terlihat seperti Not fit , dapat menggunakan Miripi, tetapi Anda mungkin mencari implementasi HNSW
atau NMS
:
Karat HNSW - Tautan
HNSW C/Python - tautan
NMSLib - tautan
Objek serupa mendukung fitur berikut:
Lacak siklus hidup - objek diwakili oleh siklus hidupnya (jalur) - ia muncul, berkembang, dan menghilang. Selama masa hidupnya, objek berevolusi sesuai dengan sifat perilakunya (atribut, dan observasi fitur).
Pengamatan - Same mengasumsikan bahwa suatu objek diamati oleh entitas pengamat yang mengumpulkan fitur-fiturnya (vektor seragam) dan atribut pengamatan khusus (seperti GPS atau posisi kotak layar) beberapa kali. Fitur-fitur tersebut disajikan oleh vektor bilangan float dan atribut observasi. Ketika observasi terjadi, trek diperbarui dengan fitur-fitur yang dikumpulkan. Pengamatan di masa depan digunakan untuk menemukan jalur serupa dalam indeks dan menggabungkannya.
Atribut Track - Atribut sewenang-wenang mendeskripsikan properti track tambahan selain observasi fitur. Atribut track merupakan bagian krusial saat Anda membandingkan objek di alam liar, karena mungkin terdapat disposisi atribut ketika objek tidak kompatibel, seperti animal_type
yang melarang Anda membandingkan dogs
dan cats
satu sama lain. Penggunaan atribut yang populer lainnya adalah karakteristik spasial atau temporal suatu objek, misalnya objek yang terletak di lokasi yang jauh pada waktu yang sama tidak dapat dibandingkan. Atribut di Miripi bersifat dinamis dan berkembang seiring dengan setiap penambahan observasi fitur dan saat objek digabungkan. Mereka digunakan dalam penghitungan jarak dan tebakan kompatibilitas (yang mengurangi ruang komputasi dengan melewatkan objek yang tidak kompatibel).
Jika Anda berencana menggunakan Same untuk mencari dalam indeks besar, pertimbangkan atribut objek untuk membagi ruang pencarian. Jika atribut kedua trek tidak kompatibel, perhitungan jaraknya akan dilewati.
Miripnya cepat. Biasanya lebih cepat daripada pelacak yang dibuat dengan Python dan NumPy.
Untuk menjalankan perhitungan fitur visual yang berkinerja baik, kerangka kerja ini menggunakan ultraviolet - perpustakaan untuk perhitungan SIMD yang cepat.
Komputasi paralel diimplementasikan dengan sharding indeks dan komputasi paralel berdasarkan kumpulan pekerja thread khusus.
Performa operasi vektor sangat bergantung pada tingkat pengoptimalan yang ditentukan untuk build. Pada tingkat pengoptimalan rendah atau default, Rust mungkin tidak menggunakan vektorisasi f32, jadi saat menjalankan benchmark, jagalah konfigurasi tingkat pengoptimalan yang tepat.
Gunakan RUSTFLAGS="-C target-cpu=native"
untuk mengaktifkan semua fitur cpu seperti AVX, AVX2, dll. Bermanfaat untuk sinar ultraviolet.
Alternatifnya, Anda dapat menambahkan instruksi pembuatan ke .cargo/config
:
[build] rustflags = "-C target-cpu=native"
Lihatlah tolok ukur angka.
Beberapa angka benchmark disajikan di sini: Benchmark
Anda dapat menjalankan tolok ukur Anda sendiri dengan:
rustup default nightly cargo bench
Anda mungkin perlu menambahkan baris berikut ke ~/.cargo/config
untuk membuat kode di Apple Silicone:
[build] rustflags = "-C target-cpu=native" # Apple Silicone fix [target.aarch64-apple-darwin] rustflags = [ "-C", "link-arg=-undefined", "-C", "link-arg=dynamic_lookup", ]
Antarmuka Python memperlihatkan fungsi dan kelas Mirip yang siap digunakan. Untuk saat ini, antarmuka Python menyediakan:
filter Kalman untuk prediksi kotak yang sejajar sumbu dan berorientasi (diputar);
filter Kalman untuk prediksi gerakan titik 2D;
filter Kalman Vektor Titik 2D, yang memprediksi vektor pergerakan titik 2D independen (digunakan dalam Keypoint Tracker);
NMS (Penindasan non-maksimum);
kliping Sutherland-Hodgman, area persimpangan untuk kotak-kotak yang berorientasi (diputar);
SORT dengan metrik IoU dan Mahalanobis;
BatchSORT dengan metrik IoU dan Mahalanobis;
VisualSORT - Pelacak mirip DeepSORT dengan metrik euclidean/cosine untuk fitur visual dan metrik IoU/Mahalanobis untuk pelacakan posisi (VisualSort).
BatchVisualSORT - rasa VisualSORT batch;
Kelas dan fungsi Python API dapat dieksplorasi dalam dokumentasi python dan contoh kecil yang disediakan.
Ada juga kit evaluasi MOTChallenge yang disediakan yang dapat Anda gunakan untuk sekadar mengevaluasi kinerja dan metrik pelacak.
Harap diingat bahwa paket PyPi dibuat untuk menyesuaikan dengan berbagai platform, sehingga mungkin tidak secepat paket yang Anda buat secara lokal untuk platform Anda (lihat bagian berikut).
Platform:
Linux: X86_64, ARM64, ARMv7;
Jendela: X86_64;
MacOS: X86_64, ARM64.
pip3 install similari-trackers-rs
Anda dapat membuat roda di Docker dan jika Anda ingin menginstalnya di sistem host, salin paket yang dihasilkan ke sistem host seperti yang ditunjukkan oleh contoh berikut.
Jika Anda menggunakan perpustakaan karat lainnya, Anda mungkin merasa bermanfaat untuk membangun dengan wadah dasar Rust (dan Python 3.8):
docker build -t similari-trackers-rs -f docker/rust_1.67/Dockerfile . # optional: copy and install to host system docker run --rm -it -v $(pwd)/distfiles:/tmp similari-trackers-rs cp -R /opt/dist /tmp pip3 install --force-reinstall distfiles/dist/*.whl
Python 3.8 masih sangat sering digunakan. Berikut ini cara membuat Mirip dengan itu:
docker build -t similari-trackers-rs -f docker/python_3.8/Dockerfile . # optional: copy and install to host system docker run --rm -it -v $(pwd)/distfiles:/tmp similari-trackers-rs cp -R /opt/dist /tmp pip3 install --force-reinstall distfiles/dist/*.whl
Jika Anda menggunakan lingkungan Python terbaru, Anda dapat membangun dengan wadah dasar Python:
docker build -t similari-trackers-rs -f docker/python_3.10/Dockerfile . # optional: copy and install to host system docker run --rm -it -v $(pwd)/distfiles:/tmp similari-trackers-rs cp -R /opt/dist /tmp pip3 install --force-reinstall distfiles/dist/*.whl
CATATAN : Jika Anda mendapatkan kesalahan pip3
seperti:
ERROR: similari-trackers-rs-0.26.4-cp38-cp38-manylinux_2_28_x86_64.whl is not a supported wheel on this platform.
Artinya, versi Python di sistem host tidak cocok dengan versi yang ada di gambar yang digunakan untuk membuat roda.
Instal toolkit Rust terbaru:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sumber $HOME/.cargo/env pembaruan karat
Instal alat build-essential apt install build-essential -y
.
Instal Python3 (>= 3.8) dan file pengembangan ( python3-dev
).
Instal Dewasa:
pip3 install --upgrade maturin~=0.15
Tidak di VENV . Bangun modul python:
RUSTFLAGS=" -C target-cpu=native -C opt-level=3" maturin build --release --out dist pip3 install --force-reinstall dist/*.whl
Di VENV . Bangun modul python:
RUSTFLAGS=" -C target-cpu=native -C opt-level=3" maturin develop
Contoh penggunaan terdapat di python.
Gambar MOT Challenge Docker untuk pelacak Same dan pelacak konvensional ada di sini. Anda dapat dengan mudah membuat image Docker lengkap dan mencoba pelacak kami.
Kumpulan artikel tentang bagaimana Miripi dapat digunakan untuk memecahkan masalah tertentu.
Contoh pelacak objek IoU;
Contoh pelacak objek ID ulang;
Contoh pelacak objek SORT;
Contoh pelacak objek Python SORT;
Contoh pelacak objek SORT Diputar Python;
Mengapa Anda Membutuhkan Sistem Pelacakan Berkinerja Tinggi Untuk Pelacakan Banyak Objek.
Lihatlah contoh di repo:
simple.rs - ide penggunaan sederhana.
track_merging.rs - gagasan penggabungan trek intra-kamera.
incremental_track_build.rs - pelacak berbasis fitur yang sangat sederhana.
simple_sort_iou_tracker.rs - Pelacak SORT (dengan filter Kalman, IoU).
simple_sort_iou_tracker_orientasi.rs - Pelacak SORT berorientasi (diputar) (dengan filter Kalman, IoU).
simple_sort_maha_tracker.rs - Pelacak SORT (dengan filter Kalman, Mahalanobis).
simple_sort_maha_tracker_oriented.rs - Pelacak SORT berorientasi (dengan filter Kalman, Mahalanobis).
middleware_sort_tracker.rs - Pelacak SORT (dengan filter Kalman, implementasi middleware).