Splitting Large Datasets

بدءًا من إصدار ODM `` 0.6.0 ، يمكنك تقسيم مجموعات البيانات الكبيرة جدًا إلى قطع قابلة للإدارة (تسمى النماذج الفرعية) ، وتشغيل خط الأنابيب على كل قطعة ، ثم إنتاج DEMs مدمجة ، وتقويم الصور ، وسحب النقاط. يشار إلى العملية باسم "الدمج المقسم".

لماذا قد تستخدم خط أنابيب الدمج المقسم؟ إذا كان لديك عدد كبير جدًا من الصور في مجموعة البيانات الخاصة بك ، سيساعد الدمج المقسم على جعل المعالجة أكثر قابلية للإدارة على جهاز كبير (سيتطلب ذاكرة أقل). إذا كان لديك العديد من الأجهزة المتصلة جميعها بالشبكة نفسها ، فيمكنك أيضًا معالجة النماذج الفرعية بشكل متوازٍ ، مما يسمح بالقياس الأفقي ومعالجة آلاف الصور بسرعة أكبر.

تعمل ميزة Split-merge في WebODM من خارج الصندوق طالما أن عقد المعالجة تدعم الدمج المقسم ، من خلال تمكين خيار `` -split '' عند إنشاء مهمة جديدة.

معايرة الصور

يوصى بمعايرة الصورة (ولكن ليس مطلوبًا) لمجموعات البيانات الكبيرة لأن انتشار الخطأ بسبب تشوه الصورة يمكن أن يسبب تأثير الوعاء على النماذج. يمكن العثور على تعليمات المعايرة في Calibrate Images.

image of lens distortion effect on bowling of data

تأثير البولينج على السحابة النقطية أكثر من 13000 مجموعة بيانات للصور تم جمعها من قبل البنك الدولي في تنزانيا حول حوض الفيضانات المعرض للفيضانات ، دار السلام ، تنزانيا.

دمج التجزئة المحلية

إن تقسيم مجموعة البيانات إلى نماذج فرعية أكثر قابلية للإدارة ومعالجة جميع النماذج الفرعية على نفس الجهاز بالتتابع أمر سهل! ما عليك سوى استخدام "--split" و "--split-interap" لتحديد متوسط ​​عدد الصور لكل نماذج فرعية والتداخل (بالأمتار) بين النماذج الفرعية على التوالي

docker run -ti --rm -v /my/project:/datasets/code opendronemap/odm --project-path /datasets --split 400 --split-overlap 100

إذا كنت تعرف بالفعل كيف تريد تقسيم مجموعة البيانات ، يمكنك تقديم هذه المعلومات وسيتم استخدامها بدلاً من خوارزمية التجميع.

مكن توفير التجميع عن طريق إضافة ملف باسم image_groups.txt في مجلد مجموعة البيانات الرئيسي. يجب أن يحتوي الملف على سطر واحد لكل صورة. يجب أن يحتوي كل سطر على كلمتين: أولاً اسم الصورة وثانيًا اسم المجموعة التي تنتمي إليها. فمثلا:

01.jpg A
02.jpg A
03.jpg B
04.jpg B
05.jpg C

سيتم إنشاء 3 نماذج فرعية. تأكد من تمرير "--split-overap 0" إذا قدمت يدويًا ملف `` image_groups.txt ''.

دمج سبليت الموزعة

يمكن لـ ODM أيضًا توزيع معالجة كل نموذج فرعي تلقائيًا على أجهزة متعددة عبر NodeODM nodes, مدبرة عبر ClusterODM.

image of lens distortion effect on bowling of data

الشروع في البدء في عملية دمج التجزئة الموزعة

الخطوة الأولى هي بدء ClusterODM

docker run -ti -p 3001:3000 -p 8080:8080 opendronemap/clusterodm

ثم على كل جهاز تريد استخدامه للمعالجة ، قم بتشغيل مثيل NodeODM عبر

docker run -ti -p 3000:3000 opendronemap/nodeodm

اتصل عبر Telnet بـ ClusterODM وأضف عناوين IP / منفذ الأجهزة التي تعمل بـ NodeODM

$ telnet <cluster-odm-ip> 8080
Connected to <cluster-odm-ip>.
Escape character is '^]'.
[...]
# node add <node-odm-ip-1> 3000
# node add <node-odm-ip-2> 3000
[...]
# node list
1) <node-odm-ip-1>:3000 [online] [0/2] <version 1.5.1>
2) <node-odm-ip-2>:3000 [online] [0/2] <version 1.5.1>

تأكد من تشغيل الإصدار 1.5.1 أو أعلى من NodeODM API

عند هذه النقطة ، ما عليك سوى استخدام خيار --sm-cluster لتمكين دمج التقسيم الموزع

docker run -ti --rm -v /my/project:/datasets/code opendronemap/odm --project-path /datasets --split 800 --split-overlap 120 --sm-cluster http://<cluster-odm-ip>:3001

فهم الكتلة

ند الاتصال عبر telnet ، من الممكن استجواب ما يحدث على الكتلة. على سبيل المثال ، يمكننا استخدام الأمر HELP لمعرفة الأوامر المتاحة

# HELP
NODE ADD <hostname> <port> [token] - Add new node
NODE DEL <node number> - Remove a node
NODE INFO <node number> - View node info
NODE LIST - List nodes
NODE LOCK <node number> - Stop forwarding tasks to this node
NODE UNLOCK <node number> - Resume forwarding tasks to this node
NODE UPDATE - Update all nodes info
NODE BEST <number of images> - Show best node for the number of images
ROUTE INFO <taskId> - Find route information for task
ROUTE LIST [node number] - List routes
TASK LIST [node number] - List tasks
TASK INFO <taskId> - View task info
TASK OUTPUT <taskId> [lines] - View task output
TASK CANCEL <taskId> - Cancel task
TASK REMOVE <taskId> - Remove task
ASR VIEWCMD <number of images> - View command used to create a machine
!! - Repeat last command

إذا ، على سبيل المثال ، لم يكن مثيل NodeODM نشطًا عند بدء ClusterODM ، فقد ندرج العقد ونرى شيئًا كالتالي

# NODE LIST
1) localhost:3000 [offline] [0/2] <version 1.5.3> [L]

لمعالجة هذا ، يمكننا بدء العقدة المحلية الخاصة بنا (إذا لم تكن قد بدأت بالفعل) ، ثم إجراء تحديث العقدة

# NODE UPDATE
OK
# NODE LIST
1) localhost:3000 [online] [0/2] <version 1.5.3> [L]

الوصول إلى السجلات

أثناء تشغيل العملية ، من الممكن أيضًا سرد المهام ، وعرض إخراج المهمة

# TASK LIST
# TASK OUTPUT <taskId> [lines]

أوتوسكالينج ClusterODM

يتضمن ClusterODM أيضًا خيار القياس التلقائي على منصات متعددة ، بما في ذلك حتى الآن ، أمازون والمحيط الرقمي. يسمح ذلك للمستخدمين بتقليل التكاليف المرتبطة بالمثيلات التي تعمل دائمًا بالإضافة إلى القدرة على توسيع نطاق المعالجة بناءً على الطلب.

لإعداد القياس التلقائي ، يجب عليك:

  • قم بتثبيت إصدار فعال من NodeJS ثم قم بتثبيت ClusterODM

git clone https://github.com/OpenDroneMap/ClusterODM
cd ClusterODM
npm install
  • تأكد من تثبيت آلة عامل الميناء.

  • قم بإعداد دلو متوافق مع S3 لتخزين النتائج.

  • قم بإنشاء ملف تكوين لـ DigitalOcean or Amazon Web Services.

يمكنك بعد ذلك تشغيل ClusterODM باستخدام

node index.js --asr configuration.json

من المفترض أن ترى شيئًا مشابهًا للرسائل التالية في وحدة التحكم

info: ASR: DigitalOceanAsrProvider
info: Can write to S3
info: Found docker-machine executable

يجب أن يكون لديك دائمًا عقدة NodeODM ثابتة واحدة على الأقل متصلة بـ ClusterODM ، حتى إذا كنت تخطط لاستخدام أداة autoscaler لجميع عمليات المعالجة. إذا قمت بإعداد التحجيم التلقائي ، فلا يمكن أن يكون لديك صفر عقد وتعتمد 100٪ على أداة القسط الآلي. تحتاج إلى إرفاق عقدة NodeODM لتكون بمثابة "العقدة المرجعية" وإلا فلن يعرف ClusterODM كيفية التعامل مع طلبات معينة (لإعادة توجيه واجهة المستخدم ، للتحقق من صحة الخيارات قبل تدوير مثيل ، وما إلى ذلك). لهذا الغرض ، يجب عليك إضافة عقدة NodeODM "وهمية" وقفلها

telnet localhost 8080
> NODE ADD localhost 3001
> NODE LOCK 1
> NODE LIST
1) localhost:3001 [online] [0/2] <version 1.5.1> [L]

بهذه الطريقة ستتم إعادة توجيه جميع المهام تلقائيًا إلى أوتوسكالر.

محددات

لا يتم دمج الشبكات ثلاثية الأبعاد في الوقت الحالي كجزء من سير العمل (فقط الغيوم النقطية ، DEMs و orthophotos هي).

يتم دعم GCP بشكل كامل ، ومع ذلك ، يجب أن يكون هناك 3 نقاط GCP على الأقل في كل نموذج فرعي حتى يتم إجراء الإشارة الجغرافية. إذا كان النموذج الفرعي يحتوي على أقل من 3 من نقاط Google Cloud Platform ، فسيتم استخدام مجموعة من بيانات GCPs + EXIF ​​المتبقية بدلاً من ذلك (والتي ستكون أقل دقة). نوصي باستخدام ملف `` image_groups.txt '' للتحكم بدقة في تقسيم النموذج الفرعي عند استخدام GCP.

شكر وتقدير

الدعائم الضخمة لباو والناس في Mapillary لمساهماتهم المذهلة في OpenDroneMap من خلال كود OpenSfM الخاص بهم ، والذي يعد مكونًا رئيسيًا لخط الأنابيب المدمج. نحن نتطلع إلى زيادة حدود OpenDroneMap ومعرفة مدى ضخامة مجموعة البيانات التي يمكننا معالجتها.

Learn to edit and help improve this page!