تصنيف الغطاء الأرضي باستخدام التعلم الإلكتروني. الجزء 3

عندما تحتاج إلى نتائج أفضل من مرضية


الجزء 1
الجزء 2



يتكون انتقال المنطقة من الشتاء إلى الصيف من صور Sentinel-2. يمكنك ملاحظة بعض الاختلافات في أنواع الغطاء في الثلج ، والتي تم وصفها في مقال سابق.


مقدمة


خلال الأسبوعين الماضيين كانت صعبة للغاية. لقد نشرنا الجزءين الأول والثاني من مقالاتنا حول تصنيف التغطية في جميع أنحاء البلاد باستخدام إطار eo-learn . eo-learn هي مكتبة مفتوحة المصدر لإنشاء طبقة بين تلقي ومعالجة صور الأقمار الصناعية والتعلم الآلي. في المقالات السابقة في الأمثلة ، أشرنا فقط إلى مجموعة فرعية صغيرة من البيانات وأظهرنا النتائج فقط على نسبة مئوية صغيرة من مجال الاهتمام بالكامل (AOI - مجال الاهتمام). أعلم أن هذا يبدو على الأقل غير مثير للإعجاب للغاية ، وربما يكون وقحًا للغاية من جانبنا. طوال هذا الوقت كنت تعذبها أسئلة حول كيفية استخدام هذه المعرفة ونقلها إلى المستوى التالي .


لا تقلق ، هذا هو المقال الثالث في هذه السلسلة. تناول كوبًا من القهوة وشغل مقعدًا ...


جميع بياناتنا تنتمي إليك!


هل أنت جالس بالفعل؟ ربما اترك القهوة على الطاولة لثانية أخرى ، لأنك الآن ستسمع أفضل الأخبار لهذا اليوم ...
قررنا في Sinergise نشر مجموعة البيانات الكاملة لسلوفينيا لعام 2017. مجانا يمكنك الوصول بحرية إلى 200 جيجابايت من البيانات في شكل ~ 300 جزءًا من EOPatch ، كل منها تقريبًا بحجم 1000 × 1000 ، بدقة 10 أمتار! يمكنك قراءة المزيد حول تنسيق EOPatch في المنشور الأخير حول eo-learn Learn ، ولكنها في الواقع حاوية للبيانات الجغرافية EO (رصد الأرض) والبيانات غير EO: على سبيل المثال ، صور الأقمار الصناعية والأقنعة والخرائط ، إلخ.



هيكل EOPatch )


لم نخترق عندما قمنا بتنزيل هذه البيانات. تحتوي كل EOPatch على صور Sentinel-2 L1C ، وقناع s2cloudless المقابل ، وخريطة الغطاء الأرضي الرسمية بتنسيق نقطي!


يتم تخزين البيانات على AWS S3 على: http://eo-learn.sentinel-hub.com/


إلغاء تسلسل كائن EOPatch بسيط للغاية:


 EOPatch.load('path_to_eopatches/eopatch-0x6/') 

نتيجة لذلك ، تحصل على كائن البنية التالية:


 EOPatch( data: { BANDS: numpy.ndarray(shape=(80, 1010, 999, 6), dtype=float32) } mask: { CLM: numpy.ndarray(shape=(80, 1010, 999, 1), dtype=uint8) IS_DATA: numpy.ndarray(shape=(80, 1010, 999, 1), dtype=uint8) IS_VALID: numpy.ndarray(shape=(80, 1010, 999, 1), dtype=bool) } mask_timeless: { LULC: numpy.ndarray(shape=(1010, 999, 1), dtype=uint8) VALID_COUNT: numpy.ndarray(shape=(1010, 999, 1), dtype=int64) } meta_info: { maxcc: 0.8 service_type: 'wcs' size_x: '10m' size_y: '10m' time_difference: datetime.timedelta(-1, 86399) time_interval: (datetime.datetime(2017, 1, 1, 0, 0), datetime.datetime(2017, 12, 31, 0, 0)) } bbox: BBox(((370230.5261411405, 5085303.344972428), (380225.31836121203, 5095400.767924464)), crs=EPSG:32633) timestamp: [datetime.datetime(2017, 1, 1, 10, 4, 7), ..., datetime.datetime(2017, 12, 25, 10, 15, 32)], length=80 ) 

الوصول إلى سمات EOPatch المختلفة هو كما يلي:


 eopatch.timestamp eopatch.mask['LULC'] eopatch.data['CLM'][0] eopatch.data['BANDS'][5][..., [3, 2, 1]] 

ترتيب تنفيذ 66


عظيم ، يتم تحميل البيانات. بينما نحن ننتظر الانتهاء من هذه العملية ، دعونا نلقي نظرة على قدرات فئة لم تناقش بعد في هذه المقالات - EOExecutor . تعمل هذه الوحدة في تنفيذ ومراقبة خط الأنابيب وتسمح باستخدام خيوط المعالجة المتعددة دون بذل جهود غير ضرورية. لا مزيد من البحث في Stack Overflow حول كيفية موازاة خط الأنابيب بشكل صحيح أو كيفية جعل شريط التقدم يعمل في هذا الوضع - لقد فعلنا بالفعل كل شيء من أجلك!


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



الرسم البياني للاعتماد على خطوط الأنابيب الناتجة عن eo-learn


تجارب تعلم الآلة


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


لسوء الحظ ، لا يمكن للمرء أن يقدم إجابة لا لبس فيها بشأن القرارات التي ينبغي اتخاذها أثناء التجارب. يمكنك دراسة الموضوع بشكل أعمق وعمل افتراضات من أجل تحديد ما إذا كانت اللعبة تستحق كل هذا العناء ، ولكن في النهاية لا يزال العمل سينتهي إلى التجربة والخطأ.


العب مع الغيوم


السحب هي ألم كبير في عالم EO ، خاصة عندما يتعلق الأمر بخوارزميات التعلم الآلي ، حيث تريد تحديدها وإزالتها من مجموعة البيانات الخاصة بالاستيفاء استنادًا إلى القيم المفقودة. ولكن ما مدى فائدة هذا الإجراء؟ هل يستحق كل هذا العناء؟ حتى أن Rußwurm و Körner ، في مقالهما المصمم متعدد الزمن للغطاء الأرضي مع الترميز المتكرر المتسلسل ، أظهروا أنه من أجل التعلم العميق ، من المحتمل أن عملية فلترة السحابة غير مهمة على الإطلاق ، لأن المصنف نفسه قادر على اكتشاف السحب وتجاهلها.



تنشيط طبقة الإدخال (أعلى) وطبقة التشكيل (أسفل) في تسلسل الصور لشظية معينة لشبكة عصبية. قد تلاحظ أن جزء الشبكة هذا تعلم إنشاء أقنعة سحابية وتصفية النتائج التي تم الحصول عليها. (الصفحة 9 على https://www.researchgate.net/publication/322975904_Multi-Temporal_Land_Cover_Classification_with_Sequential_Recurrent_Encoders )


نتذكر لفترة وجيزة هيكل خطوة تصفية البيانات (للحصول على التفاصيل ، انظر [المقال السابق] ()). بعد أخذ لقطات Sentinel-2 ، نبدأ في تصفية لقطات السحابة. جميع الصور التي لا يتجاوز عدد البكسلات غير السحابية فيها 80٪ تخضع للفحص (قد تختلف قيم العتبات لمناطق اهتمام مختلفة). بعد ذلك ، للحصول على قيم البكسل في الأيام العشوائية ، يتم استخدام أقنعة السحابة حتى لا تأخذ هذه البيانات في الاعتبار.


في المجموع ، أربعة سلوكيات ممكنة:


  1. مع مرشح الصورة ، وأقنعة سحابة معينة
  2. لا مرشح لقطة ، نظرا للأقنعة السحابية
  3. مع مرشح الصورة ، باستثناء أقنعة السحابة
  4. بدون مرشح صورة ، لا يشمل أقنعة سحابية


عرض مرئي لمجموعة الصور من القمر الصناعي Sentinel-2. البيكسلات الشفافة على اليسار تعني البيكسل المفقود بسبب الغطاء السحابي. يُظهر المكدس المركزي قيم البيكسل بعد تصفية الصور وإقحامها بقناع سحابة (الحالة 4) ، ويظهر المكدس على اليمين نتيجة الاستكمال الداخلي في الحالة دون تصفية الصور وبدون أقنعة سحابية (1). (ملاحظة الخط - على ما يبدو ، تحتوي المقالة على خطأ مطبعي ، وكان المقصود بالعكس - الحالة 1 في الوسط ، و 4 على اليمين).


في المقالة الأخيرة ، أجرينا بالفعل صيغة مختلفة للحالة 1 وأظهرنا النتائج ، لذلك سنستخدمها للمقارنة. يبدو تحضير الناقلات الأخرى وتدريب النموذج مهمة بسيطة - تحتاج فقط إلى التأكد من أننا نقوم بمقارنة القيم الصحيحة. للقيام بذلك ، ما عليك سوى استخدام نفس مجموعة البكسل لتدريب النموذج والتحقق منه.


النتائج مبينة في الجدول أدناه. قد تلاحظ أنه بشكل عام تأثير السحب على نتيجة النموذج منخفض جدًا! قد يكون هذا بسبب حقيقة أن البطاقة المرجعية ذات نوعية جيدة جدًا وأن النموذج قادر على تجاهل معظم الصور. في أي حال ، لا يمكن ضمان هذا السلوك لأي AOI ، لذلك خذ وقتك لرمي هذه الخطوة من النماذج الخاصة بك!


نموذجدقة [٪]F_1 [٪]
لا مرشحات ، لا قناع92.892.6
لا مرشحات ، مع قناع94.293.9
مع فلتر ، دون قناع94.093.8
مع مرشح ، مع قناع94.494.1

تأثير مناهج إعادة التشكيل المختلفة


اختيار خيارات إعادة التشكيل الزمني غير واضح. من ناحية ، نحتاج إلى مجموعة مفصلة من الصور التي تعرض تفاصيل الصور المصدر جيدًا - نريد تضمين أقرب عدد ممكن من الصور إلى البيانات المصدر. من ناحية أخرى ، نحن محدودون بموارد الحوسبة. يؤدي تقليل خطوة إعادة التشكيل إلى مضاعفة عدد الإطارات بعد الاستيفاء ، وبالتالي يزيد عدد السمات المستخدمة في التدريب. هل هذا التحسن يستحق تكلفة الموارد؟ هذا هو ما لدينا لمعرفة ذلك.


بالنسبة لهذه التجربة ، سوف نستخدم الصيغة 1 عن الخطوة السابقة. بعد الاستيفاء ، نقوم بإعادة التشكيل باستخدام الأشكال التالية:


  1. إعادة تشكيل موحدة مع فاصل 16 يوما
  2. إعادة تشكيل موحدة مع فاصل 8 أيام
  3. اختيار التواريخ "الأفضل" ، يتزامن الرقم مع الحالة 2.

تعتمد العينة في الحالة 3 على أكبر عدد من التواريخ الشائعة لكل EOPatch في AOI المحدد

يوضح الرسم البياني عدد شظايا EOPatch التي تحتوي على بيانات لكل يوم 2017 (أزرق). توضح الخطوط الحمراء التواريخ المثلى لإعادة التشكيل ، والتي تستند إلى تواريخ صور Sentinel-2 لـ AOI 2017 المحددة.


بالنظر إلى الجدول أدناه ، يمكنك أن ترى أن النتائج ليست مؤثرة للغاية ، كما في التجربة السابقة. في الحالتين 2 و 3 ، يتضاعف الوقت المنقضي ، لكن الفرق مع النهج الأولي أقل من 1٪. هذه التحسينات غير واضحة للغاية للاستخدام العملي ، لذلك يمكننا اعتبار الفاصل الزمني لمدة 16 يومًا مناسبًا للمهمة.


نموذجدقة [٪]F_1 [٪]
بالتساوي كل 16 يوم94.494.1
بالتساوي كل 8 أيام94.594.3
اختيار أفضل التواريخ94.694.4

نتائج الدقة الكلية و F1 الموزونة لخطوط الأنابيب المختلفة مع تغيير في طريقة إعادة أخذ العينات.


التعلم العميق: استخدام الشبكة العصبية التلافيفية (CNN)


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


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


للقيام بذلك ، استخدمنا Temporal Fully-Convolutional Netvork أو TFCN أو بالأحرى الامتداد الزمني إلى U-Net ، الذي تم تنفيذه في TensorFlow. وبشكل أكثر تحديداً ، تستخدم الهندسة المعمارية الارتباطات المكانية والزمانية لتحسين النتيجة. ميزة إضافية هي أن بنية الشبكة تسمح لك بتمثيل العلاقات المكانية بشكل أفضل على مستويات مختلفة بفضل عملية التشفير / فك التشفير في U-net. كما هو الحال في النماذج الكلاسيكية ، في الناتج ، نحصل على مصفوفة ثنائية الأبعاد من الملصقات ، والتي سنقارنها بالحقيقة.



استخدمنا النموذج المدرب للتنبؤ بالعلامات في مجموعة الاختبار ، وتم التحقق من القيم التي تم الحصول عليها مع الحقيقة. وعموما ، كانت الدقة 84.4 ٪ و F1 كان 85.4 ٪.



مقارنة بين التوقعات المختلفة لمهمتنا. الصورة المرئية (أعلى اليسار) ، والخريطة المرجعية الحقيقية (أعلى اليمين) ، وتوقع نموذج LightGBM (أسفل اليسار) والتنبؤ بشبكة U (أسفل اليمين)


تُظهر هذه النتائج العمل الأولي فقط على هذا النموذج الأولي ، والذي لم يتم تحسينه بشكل كبير للمهمة الحالية. على الرغم من ذلك ، تتفق النتائج مع بعض الإحصاءات التي تم الحصول عليها في المنطقة. لإطلاق إمكانات الشبكة العصبية ، من الضروري تحسين البنية (مجموعة من السمات ، وعمق الشبكة ، وعدد التلافيف) ، وكذلك تعيين معلمات مفرطة (سرعة التعلم ، وعدد العصور ، ووزن الفئة). نتوقع أن نتعمق في هذا الموضوع (ha ha) أكثر ، ونخطط لتوزيع الكود الخاص بنا عندما يكون في شكل مقبول.


تجارب أخرى


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


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


من المترجم


لسوء الحظ ، لم يخرج الجزء التالي من هذه السلسلة من المقالات ، مما يعني أن المؤلفين لم يعرضوا أمثلة على شفرة المصدر مع بناء U-Net. كبديل ، يمكنني تقديم المصادر التالية:


  1. U-Net: الشبكات التلافيفية لتقسيم الصور الطبية الحيوية - أولاف رونبرجر ، فيليب فيشر ، توماس بروكس هي واحدة من المقالات الأساسية حول هندسة U-Net التي لا تتضمن بيانات مؤقتة.
  2. https://eo-learn.readthedocs.io/en/latest/examples/land-cover-map/SI_LULC_pipeline.html - صفحة وثائق eo Learn ، حيث يوجد (ربما) إصدار أحدث من خطوط الأنابيب المكونة من 1.2 جزء.
  3. https://github.com/divamgupta/image-segmentation-keras - مستودع به عدة شبكات تم تنفيذها باستخدام keras. لدي بعض الأسئلة حول التطبيقات (تختلف قليلاً عن تلك الموضحة في المقالات الأصلية) ، ولكن بشكل عام ، يتم تكييف الحلول بسهولة للأغراض الشخصية وتعمل بشكل جيد.

Source: https://habr.com/ru/post/ar453354/


All Articles