الإصدارات الأحدث (أعيدت تسميتها):
الإصدارات الأقدم:
قم بتمييزنا بنجمة على GitHub - فهذا يحفزنا كثيرًا!
Samei هو إطار عمل Rust مع روابط Python التي تساعد في بناء أنظمة تتبع متطورة. باستخدام Sameali، يمكن للمرء تطوير SORT و DeepSORT المتوازي عالي الكفاءة ومحركات مراقبة فردية متطورة أخرى (مثل Cam) أو محركات تتبع متعددة المراقبين.
الغرض الأساسي من Sameli هو توفير وسائل لبناء محركات متطورة لتتبع الكائنات المتعددة في الذاكرة.
يساعد إطار العمل في بناء أنواع مختلفة من محركات البحث للتتبع والتشابه - أبسطها يحتوي على ميزات المتجهات ويسمح بمقارنة المتجهات الجديدة مع تلك الموجودة في قاعدة البيانات. تعمل المحركات الأكثر تطورًا على المسارات - وهي عبارة عن سلسلة من الملاحظات لنفس الميزة التي يتم جمعها خلال دورة الحياة. تُستخدم مثل هذه الأنظمة غالبًا في معالجة الفيديو أو الأنظمة الأخرى حيث يتلقى المراقب نتائج مراقبة غامضة أو متغيرة.
يعد برنامج Sameli بمثابة إطار عمل لإنشاء أجهزة تتبع مخصصة، إلا أنه يوفر خوارزميات معينة كوظيفة للمستخدم النهائي:
يدعم مرشح Bounding Box Kalman ، الذي يتنبأ بالمربعات المحيطة المستطيلة المحاذية للمحور مع المشهد، المربعات المحيطة الموجهة (التي تم تدويرها) أيضًا.
مرشح 2D Point Kalman ، الذي يتنبأ بحركة النقطة ثنائية الأبعاد.
مرشح 2D Point Vector Kalman ، الذي يتنبأ بمتجه حركة النقاط المستقلة ثنائية الأبعاد (المستخدم في Keypoint Tracker).
قص المربع المحيط ، الذي يسمح بحساب مساحة التقاطع للمربعات المحيطة المحاذية للمحور والموجهة (المدورة).
عدم الحد الأقصى للقمع (NMS) - يقوم بتصفية المربعات المحيطة المستطيلة المحورية للمشهد، ويدعم المربعات المحيطة الموجهة.
خوارزمية تتبع SORT (يتم دعم المربعات المحاذاة للمحور والموجهة) - يتم دعم مسافات IoU وMahalanobis.
خوارزمية تتبع Batch SORT (يتم دعم المربعات المحاذاة للمحور والموجهة) - يتم دعم مسافات IoU وMahalanobis. يسمح متتبع الدفعات بتمرير مشاهد متعددة لتعقبها في دفعة واحدة واستعادتها. إذا كان النظام الأساسي يدعم التجميع (مثل Nvidia DeepStream أو Intel DL Streamer)، فإن استخدام أداة تعقب الدفعات يكون أكثر فائدة.
تتبع VisualSORT - خوارزمية تشبه DeepSORT (يتم دعم المربعات المحاذاة للمحور والموجهة) - يتم دعم مسافات IoU وMahalanobis للتتبع الموضعي، ويتم استخدام المسافات الإقليدية وجيب التمام للتتبع البصري على ناقلات المعالم.
دفعة VisualSORT - نكهة VisualSORT مجمعة؛
على الرغم من أن Sameali يسمح ببناء محركات تتبع وتشابه مختلفة، إلا أن هناك أدوات تنافسية قد تكون مناسبة بشكل أفضل في بعض الأحيان. وسيشرح القسم مكان تطبيقه وما هي البدائل الموجودة.
يناسب التشابه بشكل أفضل مهام التتبع حيث يتم وصف الكائنات من خلال ملاحظات متعددة لفئة ميزة معينة، وليس متجه ميزة واحد. كما أن سلوكهم ديناميكي - حيث يمكنك إزالتهم من الفهرس أو تعديلهم كلما قمت بإضافة سلوكيات جديدة. هذه نقطة مهمة للغاية - فهي أقل كفاءة من الأدوات التي تعمل مع مساحات الكائنات المتنامية أو الثابتة.
الملاءمة : تتبع الشخص عبر الغرفة: يتم جمع ميزات ReID للشخص والعمر/الجنس والوجه عدة مرات أثناء التتبع واستخدامها لدمج المسارات أو تقديم نتائج مجمعة في نهاية المسار؛
غير مناسب : قاعدة بيانات الانتحال، عندما يتم وصف مستند واحد بواسطة عدد (أو واحد فقط) من متجهات ReID الثابتة، تتم إضافة المستندات ولكن لا تتم إزالتها. وتتمثل المهمة في العثور على المستندات X الأكثر تشابهًا مع المستندات المحددة.
إذا كانت مهمتك تبدو غير مناسبة ، فيمكنك استخدام مماثل، ولكنك ربما تبحث عن تطبيقات HNSW
أو NMS
:
الصدأ HNSW - الرابط
HNSW C/Python - الرابط
NMSLIb - الرابط
تدعم الكائنات المشابهة الميزات التالية:
دورة حياة المسار - يتم تمثيل الكائن من خلال دورة حياته (المسار) - فهو يظهر ويتطور ويختفي. يتطور الكائن خلال حياته وفقًا لخصائصه السلوكية (السمات وملاحظات الميزات).
الملاحظات - يفترض برنامج سيميلي أن كائنًا ما تمت ملاحظته بواسطة كيان مراقب يجمع ميزاته (المتجهات الموحدة) وسمات المراقبة المخصصة (مثل نظام تحديد المواقع العالمي (GPS) أو موضع مربع الشاشة) عدة مرات. يتم تقديم هذه الميزات بواسطة ناقلات الأعداد العائمة وسمات المراقبة. عند حدوث الملاحظة، يتم تحديث المسار بالميزات المجمعة. تُستخدم الملاحظات المستقبلية للعثور على مسارات مماثلة في الفهرس ودمجها.
سمات المسار - تصف السمات العشوائية خصائص المسار الإضافية بخلاف ملاحظات الميزات. تعتبر سمات المسار جزءًا مهمًا عند مقارنة الكائنات في البرية، لأنه قد يكون هناك ترتيب للسمات عندما تكون الكائنات غير متوافقة، مثل animal_type
الذي يمنعك من مقارنة dogs
cats
بين بعضها البعض. الاستخدام الشائع الآخر للسمات هو الخاصية المكانية أو الزمانية لكائن ما، على سبيل المثال لا يمكن مقارنة الأشياء التي تقع في مواقع بعيدة في نفس الوقت. السمات في Sameli ديناميكية وتتطور مع كل إضافة لملاحظة الميزة وعند دمج الكائنات. يتم استخدامها في كل من حسابات المسافة وتخمين التوافق (مما يقلل مساحة الحساب عن طريق تخطي الكائنات غير المتوافقة).
إذا كنت تخطط لاستخدام Samei للبحث في فهرس كبير، ففكر في سمات الكائن لتقسيم مساحة البحث. إذا كانت سمات المسارين غير متوافقة، فسيتم تخطي حسابات المسافة الخاصة بهم.
وSlikei سريع. وعادةً ما يكون أسرع من أجهزة التتبع المبنية باستخدام Python وNumPy.
لتشغيل حسابات الميزات المرئية، يستخدم إطار العمل الأشعة فوق البنفسجية - وهي مكتبة لحسابات SIMD السريعة.
يتم تنفيذ الحسابات المتوازية من خلال تقسيم الفهرس والحسابات المتوازية بناءً على مجموعة مخصصة لعمال الخيط.
يعتمد أداء عمليات المتجهات كثيرًا على مستوى التحسين المحدد للإنشاء. في مستويات التحسين المنخفضة أو الافتراضية، قد لا يستخدم Rust التوجيه f32، لذا عند تشغيل المعايير، يجب الاهتمام بمستويات التحسين المناسبة التي تم تكوينها.
استخدم RUSTFLAGS="-C target-cpu=native"
لتمكين جميع ميزات وحدة المعالجة المركزية مثل AVX وAVX2 وما إلى ذلك. وهو مفيد للأشعة فوق البنفسجية.
وبدلاً من ذلك، يمكنك إضافة تعليمات البناء إلى .cargo/config
:
[build] rustflags = "-C target-cpu=native"
ألق نظرة على معايير الأرقام.
يتم عرض بعض أرقام المعايير هنا: المعايير
يمكنك تشغيل المعايير الخاصة بك عن طريق:
rustup default nightly cargo bench
قد تحتاج إلى إضافة الأسطر التالية إلى ~/.cargo/config
لإنشاء التعليمات البرمجية على 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", ]
تعرض واجهة Python وظائف وفئات مشابهة جاهزة للاستخدام. أما الآن، توفر واجهة بايثون ما يلي:
مرشح كالمان للتنبؤ بالمربعات المحاذية للمحور والموجهة (المدورة)؛
مرشح كالمان للتنبؤ بحركة النقطة ثنائية الأبعاد؛
مرشح 2D Point Vector Kalman، الذي يتنبأ بمتجه حركة النقاط المستقلة ثنائية الأبعاد (المستخدم في Keypoint Tracker)؛
NMS (قمع غير الحد الأقصى)؛
منطقة قص Sutherland-Hodgman، منطقة التقاطع للصناديق الموجهة (التي تم تدويرها)؛
فرز باستخدام IoU ومتري Mahalanobis؛
BatchSORT مع IoU ومتري Mahalanobis؛
VisualSORT - متتبع يشبه DeepSORT مع مقياس إقليدي/جيب التمام للميزات المرئية ومقياس IoU/Mahalanobis للتتبع الموضعي (VisualSort).
BatchVisualSORT - نكهة VisualSORT المجمعة؛
يمكن استكشاف فئات ووظائف Python API في وثائق python والأمثلة الصغيرة المقدمة.
هناك أيضًا مجموعة أدوات تقييم MOTChallenge المتوفرة والتي يمكنك استخدامها لتقييم أداء أجهزة التتبع ومقاييسها.
من فضلك، ضع في اعتبارك أن حزمة PyPi مصممة لتتوافق مع مجموعة واسعة من الأنظمة الأساسية، لذلك قد لا تكون بنفس سرعة الحزمة التي تقوم بإنشائها محليًا لمنصتك (راجع الأقسام التالية).
المنصات:
لينكس: X86_64، ARM64، ARMv7؛
ويندوز: X86_64؛
ماك: X86_64، ARM64.
pip3 install similari-trackers-rs
يمكنك إنشاء العجلة في Docker وإذا كنت تريد تثبيتها في النظام المضيف، فانسخ الحزمة الناتجة إلى النظام المضيف كما هو موضح في الأمثلة التالية.
إذا كنت تستخدم مكتبات الصدأ الأخرى، فقد تجد أنه من المفيد البناء باستخدام حاوية Rust الأساسية (و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 مستخدمًا بشكل متكرر. إليك كيفية بناء التشابه معه:
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
إذا كنت تستخدم أحدث بيئة Python، فيمكنك البناء باستخدام حاوية 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
ملاحظة : إذا كنت تحصل على خطأ pip3
مثل:
ERROR: similari-trackers-rs-0.26.4-cp38-cp38-manylinux_2_28_x86_64.whl is not a supported wheel on this platform.
هذا يعني أن إصدار Python الموجود في النظام المضيف لا يتطابق مع الإصدار الموجود في الصورة المستخدمة لبناء العجلة.
قم بتثبيت مجموعة أدوات Rust المحدثة:
حليقة --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | shsource $HOME/.cargo/env تحديث الصدأ
تثبيت أدوات البناء الأساسية apt install build-essential -y
.
قم بتثبيت Python3 (>= 3.8) وملفات التطوير ( python3-dev
).
تثبيت ماتورين:
pip3 install --upgrade maturin~=0.15
ليس في فينف . بناء وحدة بايثون:
RUSTFLAGS=" -C target-cpu=native -C opt-level=3" maturin build --release --out dist pip3 install --force-reinstall dist/*.whl
في فينف . بناء وحدة بايثون:
RUSTFLAGS=" -C target-cpu=native -C opt-level=3" maturin develop
توجد أمثلة الاستخدام في بيثون.
صورة MOT Challenge Docker لأجهزة التتبع المشابهة وأجهزة التتبع التقليدية موجودة هنا. يمكنك بسهولة إنشاء صورة Docker الكل في واحد وتجربة أدوات التتبع الخاصة بنا.
مقالات مجمعة حول كيفية استخدام التشابه لحل مشاكل محددة.
مثال على تعقب كائن IoU؛
مثال على إعادة تعريف كائن تعقب؛
SORT مثال على تعقب الكائنات؛
مثال على تعقب كائنات Python SORT؛
مثال لتعقب كائنات Python Rotated SORT؛
لماذا تحتاج إلى أنظمة تتبع عالية الأداء لتتبع الكائنات المتعددة.
ألق نظرة على العينات في الريبو:
simple.rs - فكرة الاستخدام البسيط.
Track_merging.rs - فكرة لدمج المسار داخل الكاميرا.
incremental_track_build.rs - أداة تعقب بسيطة للغاية تعتمد على الميزات.
simple_sort_iou_tracker.rs - متعقب SORT (مع مرشح كالمان، IoU).
simple_sort_iou_tracker_Oriented.rs - متتبع SORT الموجه (المدور) (مع مرشح كالمان، IoU).
simple_sort_maha_tracker.rs - متعقب SORT (مع مرشح كالمان، Mahalanobis).
simple_sort_maha_tracker_Oriented.rs - متتبع SORT الموجه (مع مرشح كالمان، Mahalanobis).
middleware_sort_tracker.rs - متعقب SORT (مع مرشح كالمان، وتنفيذ البرامج الوسيطة).