Understanding the Amazon Rain forest from Space #3 Cloud detection with machine learning

ตอนที่ 3 บทความนี้จะเขียนถึงขั้นตอนสำคัญในการวิเคราะห์และจำแนกสภาพอากาศ ซึ่งเป็นประเด็นสำคัญอย่างมากในงาน RS รวมไปถึงการแข่งขันในรายการนี้ที่ต้องอาศัยการวิเคราะห์ภาพถ่ายดาวเทียม แน่นอนว่าต่อจะให้ใช้เรื่องของ Deep Learning มาทำ Image Classification แต่ถ้าข้อมูลไม่ดี ผลลัพธ์ที่ได้ย่อมแย่ไปด้วย

ด้านการวิเคราะห์สภาพอากาศ เป็นโจทย์ใหญ่ที่ใช้เวลาคิด Method และทดลองกันพอควรเพราะประเด็นแรก เราต้องจำแนกภาพ Chip ที่เป็น class ของสภาพอากาศด้วย

– ส่วนแรกจะเป็นประเภท tag กลุ่ม clear >> ภาพไม่มีเมฆและหมอก
– ส่วนสองจะเป็นประเภท tag กลุ่ม partly_cloudy >> ภาพมีเมฆบางส่วน
– ส่วนสามจะเป็นประเภท tag กลุ่ม cloudy >> ภาพมีเมฆเต็มๆแบบมองไม่เห็นอะไรเลย
– ส่วนสามจะเป็นประเภท tag กลุ่ม haze >> ภาพมีหมอก ไม่ใช่เมฆไม่มีความหนา แต่มองเห็นแบบจางๆ มี DN นะแต่ค่าต่ำมาก

ความท้าทายตรงนี้น่าสนใจมาก เพราะเมื่อต้องมาทำ automatic processing การคิดวางแผนสำคัญ ผมเอง เริ่มจากการแยก ข้อมูล training data เป็น กลุ่มต่างๆก่อนแล้วลองรัน stat ดู เริ่มจากการใช้เงื่อนไขสภาพอากาศในการจำแนกข้อมูลที่มี

33

จากภาพ histogram จะเห็นว่าข้อมูล training data ส่วนใหญ่ 28431 ภาพจะเป็น Clear แต่ราวๆ 6000 chip จะเป็น partly_cloudy จำนวน 7261 และ เป็น haze อยู่ 2697 และเมฆเต็ม 2089

7-26-2018 4-52-59 PM
ตัวอย่างภาพ chip ในลักษณะสภาพอากาศ class ต่างๆ ได้แก่ cloudy,partly_cloudy และ haze

ประเด็นเพิ่มเติมคือ ต้องแยกภาพที่เต็มไปด้วยเมฆ หรือ cloudy ได้ดังนั้นต้องนี้ต้องพัฒนา learning algorithm ในการแยก เช่นเดียวกัน ประเด็นที่ 2 ภาพที่มีหมอกหรือ haze ค่า DN ต่ำจำแนกยาก ก็ต้องพัฒนา algorithm ในการปรับปรุงภาพ เพราะถึงจะจำแนก chip ว่าเป็น haze ได้ตรง แต่ tag ในภาพก็อาจจะมีอื่นๆปนตรงนี้ ก็ไม่สามารถตัดข้อมูลทิ้ง หรือปล่อยไว้เฉยๆเช่นกัน

7-26-2018 5-08-20 PM

1. Weather classification 

การจำแนกประเภทของภาพ นั้นจะทำผ่านกระบวนการ spectral analysis โดยวิเคราะห์ที่ตัวภาพจริงนั้นคือ tif เพื่อดูค่าสถิติ และสร้าง threshold ในการรับค่าสะท้อนของแสงในช่วงคลื่นต่างๆ R ,G ,B , NIR ซึ่งจะช่วยในการทำ Image classification และการปรับปรุงภาพได้มาก

การเข้าถึงภาพ tif ผมจะใช้ lib ของ gdal ที่สามารถเขียน python ไปเรียกใช้งานได้อย่างสะดวก กับการอ่านและเขียนไฟล์ geotiff รองรับการทำการประมวลผลภาพและการปรับแก้เชิงรังสี อีกด้วย และอีกอย่างที่ดูจะมีประโยชน์มากคือการแปลงไปมาระหว่าง vector  และ raster

7-26-2018 5-21-13 PM

การจัดการกับเมฆ(cloudy) นั้นเราจะใช้เทคนิคการวิเคราะห์ช่วงคลื่นและจำแนกด้วย Normalized B/R ratio ที่ผมมีโอกาสได้ศึกษางานด้าน cloud detection จาก บทความวิจัย Hybrid Thresholding Algorithm for Cloud Detection  ของคุณ Li ที่ใช้เทคนิคแบบ hybrid threshold มาจำแนกเมฆ โดยประยุกต์เอาบางส่วนจากงานวิจัยเพื่อนำมาใช้ร่วมกับ Deep learning ในการจำแนกเมฆ (เนื่องจากงานนี้ทดสอบใน Ground-Based )

7-24-2018 8-06-13 PM

ทดลองเขียน code เพื่อรันกับภาพถ่ายดาวเทียม เพื่อดูค่าทางสถิติและการกระจายตัวของข้อมูล DN โดยทดลองกับกลุ่มที่เป็น cloudy,partly_cloudy และ haze

7-26-2018 5-33-39 PM
ภาพประเภท cloudy

7-26-2018 5-37-02 PM
ภาพประเภท partly cloudy

7-26-2018 5-38-50 PM

ภาพประเภทหมอก หรือ haze

จากการประมวลผลเพื่อดูค่า สถิติของภาพทั้ง 3 ประเภททำให้เราสามารถสร้าง Threshold เพื่อใช้ในการจำแนกประเภท class ของสภาพอากาศในภาพถ่ายดาวเทียมแต่ละ Chip ได้ แต่ประเด็นมันยังไม่จบเพราะการสร้าง Threshold Algorithm ด้วย Normalized B/R อาจจะยังไม่เพียงพอที่จะทำให้ค่าความถูกต้องสมบูรณ์ โดยเฉพาะกลุ่ม partly_cloudy

ดังนั้นงาน cloud detection ต้องใช้เทคนิคการประมวลผลข้อมูลอื่นผสม ซึ่งตรงนี้ผมได้เลือกทำ cloud Mask algorithm อีกขั้นตอนหนึ่งเพื่อทำการคำนวณค่า %cloud บนภาพถ่ายดาวเทียมแต่ละ chip ตรงนี้จะช่วยแยกระหว่าง class ที่เป็น cloud และ partly_cloudy ได้ดีขึ้นด้วย โดย algorithm นี้จะใช้ค่า Blue และ NIR เป็นตัวหลักในการ detect ความแตกต่างของ pixel บนแต่ละ tile window จากนั้นคำนวณค่าสถิติและหาโอกาสความน่าจะเป็นที่เกิด ก่อนสรุปเป็นค่า %cloud บนภาพถ่ายดาวเทียม

7-26-2018 5-54-07 PM

 

ดำเนินการประมวลผลภาพ โดยเฉพาะกลุ่มพิเศษ cloudy,partly_cloudy และ haze เพื่อคำนวณค่าสถิติสำหรับการวิเคราะห์ สภาพอากาศและการจำแนกเมฆโดยทำการเก็บใน data frame

7-26-2018 6-51-59 PM

ทดลองรันโมเดล machine learning กับ  data เพื่อทำ weather classification  สำหรับจำแนก class ของสภาพอากาศด้วย Random Forest Algorithm โดยทำการทดสอบ classification กับกลุ่มข้อมูลทดสอบแบ่งกลุ่มเทรน 60% กลุ่มทดสอบ 40% ผลการจำแนกประเมินค่าความถูกต้องราวๆ 87.4% ออกมาเบื้องต้น กรณียังไม่ทำการ optimization ถือว่าใช้ได้พอควร หลังจากนี้มีการปรับจูน parameter ต่อ แต่สิ่งที่ค่อนข้างท้าทายคือความยากของ โจทย์การจำแนกข้อมูลแบบ multi-label classification
ที่เป็น unbalance แบบหลาย class

7-26-2018 7-57-42 PM

2. Haze removal and Image enhancement

หมอกจางๆและควัน กลายเป็นปัญหาพอควรในการทำงานวิเคราะห์ satellite image ในพื้นที่ของอเมซอนภาพถ่ายดาวเทียม ที่ได้มีทั้งส่วนที่เป็นหมอก(haze) พอควร ดังนั้นกระบวนการทำ Image enhancement สำคัญเพราะช่วยเพิ่มประสิทธิภาพของการจำแนกข้อมูล ใน Chip กลุ่มนี้ ใน training data มีภาพเป็น haze ราวๆ 2697 chip

โดยขั้นต้นเราสามารถจำแนก Chip ที่เป็นกลุ่ม haze ได้แล้วจาก spectral analysis ในขั้นตอนต่อจากนี้เราจะทำการ ขจัดหมอกและปรับเพิ่มความเข้มของค่า Digital number จาก histogram ซึ่งกระบวนการนี้ผมมีโอกาสได้อ่านงานวิจัยหลายชิ้น เจองานหนึ่งที่ดูเหมาะสมกับงาน automatic image classification ด้วย AI นั้นคือ Fast Single-image Defogging ของคุณ Zhiming Tan แต่ก็เหมือนเดิมอีกคืองานนี้ทำกับ single image ซึ่งแนวคิดเขายึดจุดสว่างที่สุดในภาพ เป็นค่าเริ่มต้นการปรับดังนั้นการนำ algorithm มากับภาพถ่ายดาวเทียมที่ลักษณะต่างก็ต้องประยุกต์

7-26-2018 9-01-14 PM

ปัญหาอีกข้อคือคำนวณนานพอควร แต่โชคดีมี GPU ให้รัน ทำให้งานเร็วขึ้น ทดลองไปราวๆ 1000 ภาพ ผลที่ได้ ประมาณนี้ ไม่สมบูรณ์มากนัก แต่ก็ถือว่าปรับปรุงสร้าง Clarify image ได้ระดับหนึ่ง ตรงนี้จะไปช่วยในงาน object detection พวกจำแนกถนน แม่น้ำ พื้นที่เกษตรและเมืองต่อได้เยอะ

7-26-2018 9-32-05 PM

 

Advertisements

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out /  เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out /  เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out /  เปลี่ยนแปลง )

Connecting to %s

บลอกที่ WordPress.com .

Up ↑

%d bloggers like this: