CNN Note 1: การดำเนินการหมุน

Jan 03 2023
สวัสดีทุกๆคน! ในขณะที่การทำงานกับความเชี่ยวชาญพิเศษของ MLOps กำลังดำเนินไป ฉันยังวางแผนที่จะเรียกคืนบันทึกเก่าๆ ของฉันเกี่ยวกับ CNN และ RNN จากความเชี่ยวชาญพิเศษของ Deep Learning บทความชุดนี้มุ่งเน้นไปที่หลักสูตร 4 ของความเชี่ยวชาญพิเศษที่ชื่อว่า Convolutional Neural Networks

สวัสดีทุกๆคน! ในขณะที่การทำงานกับความเชี่ยวชาญพิเศษของ MLOps กำลังดำเนินไป ฉันยังวางแผนที่จะเรียกคืนบันทึกเก่าๆ ของฉันเกี่ยวกับ CNN และ RNN จากความเชี่ยวชาญพิเศษของ Deep Learning บทความชุดนี้มุ่งเน้นไปที่หลักสูตร 4 ของความเชี่ยวชาญพิเศษที่ชื่อว่าConvolutional Neural Networks หวังว่าคุณจะสนุกกับบันทึกเหล่านี้ และแสดงความคิดเห็นในด้านที่ต้องปรับปรุง!

แหล่งที่มาของรูปภาพ: การสร้าง Convolutional Neural Network, TheClickReader

เมื่อสร้างแบบจำลองการรู้จำภาพโดยใช้ NN มาตรฐาน จนถึงตอนนี้ เราใช้ภาพที่มีขนาดเล็กเท่านั้น เช่น (64X64, 24X24 เป็นต้น) แต่ในชีวิตจริง ขนาดของรูปภาพที่เราต้องการใช้โดยทั่วไปจะเป็น (~1000 x ~1000) คือ แต่ละภาพจะเป็นเวกเตอร์ (~3 ล้าน , 1) และขนาดของน้ำหนักจะมากขึ้น ด้วยพารามิเตอร์มิติสูงเหล่านี้ เราต้องการข้อมูลขนาดใหญ่เพียงพอเพื่อป้องกันการใช้งานมากเกินไปพร้อมกับข้อกำหนดด้านการคำนวณที่สูงมาก สิ่งนี้ไม่มีประสิทธิภาพอย่างมาก

เพื่อจัดการกับปัญหานี้ เราใช้ การดำเนินการแบบ หมุนวนซึ่งเป็นหนึ่งในองค์ประกอบพื้นฐานของ CNN และเราจะแสดงภาพแบบหมุนโดยใช้ตัวอย่างการตรวจจับขอบ

การดำเนินการหมุน:

เราใช้การดำเนินการนี้เพื่อให้แน่ใจว่าความสัมพันธ์เชิงพื้นที่ระหว่างพิกเซลโดยการเรียนรู้คุณสมบัติของภาพโดยใช้ข้อมูลอินพุตสี่เหลี่ยมจัตุรัสขนาดเล็กกล่าวคือ เรานำชุดพิกเซลหนึ่งชุด เรียนรู้ความสัมพันธ์ที่กำหนดโดยตัวกรอง และจัดเก็บเอาต์พุตที่ระบุความสัมพันธ์เชิงพื้นที่ระหว่าง พิกเซล

ทีนี้ 'ความสัมพันธ์เชิงพื้นที่' คืออะไร?

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

ในทำนองเดียวกัน ในการมองเห็นด้วยคอมพิวเตอร์ ก่อนอื่นเราต้องแยกความแตกต่างของวัตถุจากสิ่งรอบข้าง ซึ่งทำได้โดยการเปรียบเทียบพิกเซลกับสิ่งรอบข้าง ใน NN มาตรฐาน สิ่งที่เราทำคือศึกษาแต่ละพิกเซลและพยายามจับคู่พิกเซลทั้งชุดกับเอาต์พุตโดยใช้ฟังก์ชัน ตอนนี้ ใน CNN เราศึกษาความแตกต่างระหว่างพิกเซลกับสภาพแวดล้อมเพื่อแยกคุณลักษณะต่างๆ นี่ไม่ใช่อื่นใดนอกจาก "ความสัมพันธ์เชิงพื้นที่" ที่กล่าวมาข้างต้น

การดำเนินการที่เราทำเรียกว่าความสัมพันธ์ข้ามในทางคณิตศาสตร์ แต่ในวรรณคดี DL เราเรียกว่าการดำเนินการบิด

เพื่อให้เข้าใจกระบวนการบิดเบี้ยวมากขึ้น ให้เรายกตัวอย่างง่ายๆ ของเมทริกซ์ขนาด 5x5 (ในกรณีนี้คือรูปภาพ) และตัวกรองขนาด 3x3:

ในภาพ GIF ด้านบน เราจะเห็นว่าเมทริกซ์ขนาด 5x5 ทั้งหมดถูกแปลงเป็นเมทริกซ์ขนาด 3x3 ด้วยความช่วยเหลือของฟิลเตอร์ 3x3 เอาต์พุต 3x3 นี้ประกอบด้วยความสัมพันธ์เชิงพื้นที่ของพิกเซลที่อยู่ตรงกลางของเมทริกซ์ 5x5 [กล่าวคือ เริ่มจากค่าในตำแหน่ง (2,2) ถึง (4,4)] ซึ่งทำให้เราสูญเสียข้อมูลบนเส้นขอบของเมทริกซ์ เราจะเห็นขั้นตอนในการจัดการกับการสูญหายของข้อมูลนี้ในภายหลังเมื่อเราหารือเกี่ยวกับช่องว่างภายใน

ตัวอย่าง: การตรวจจับขอบ

การตรวจจับขอบเป็นแอปพลิเคชันที่ง่ายที่สุดโดยใช้การดำเนินการบิด เนื่องจากค่าพิกเซลแตกต่างกันอย่างมากที่ขอบ เมื่อเราสังเกตพิกเซลที่ขอบหรือขอบเขตระหว่างวัตถุ 2 ชิ้น เช่น ใบหน้าและพื้นหลัง ขอบของใบหน้าจะล้อมรอบด้วยพิกเซลใบหน้าซึ่งระบุสีผิวด้านหนึ่ง และสีของพื้นหลังบน ด้านอื่น ๆ.

นอกจากนี้เรายังสามารถย้อนกลับไปดูหนังสือก่อนหน้าในตัวอย่างตารางและดูว่าพื้นผิว สีของหนังสือแตกต่างจากตารางที่วางอยู่

ทีนี้ มาดูตัวอย่างที่ง่ายกว่ามากเพื่อทำความเข้าใจสาระสำคัญของสิ่งที่เราเพิ่งอ่านไป

การดำเนินการตรวจจับขอบอย่างง่าย ที่มา: DeepLearning.ai ได้รับอนุญาตภายใต้ใบอนุญาต Creative Commons Attribution-ShareAlike 2.0

ในตัวอย่างนี้ คุณจะเห็นว่าเส้นขอบอยู่ที่คอลัมน์ที่ 3 และ 4 โดยที่ด้านหนึ่งสว่าง และอีกด้านหนึ่งมืด ซึ่งเมื่อผ่านตัวกรองเราจะได้คอลัมน์สว่างตรงกลางแสดงว่าขอบอยู่ตรงกลางของพิกเซลที่พิจารณา ตอนนี้ หากภาพอินพุตถูกพลิกในแนวนอน เราจะได้ผลลัพธ์ที่ตรงกันข้ามดังที่เห็นด้านล่าง

การตรวจจับขอบหลังจากพลิกภาพ ที่มา: DeepLearning.ai ได้รับอนุญาตภายใต้ใบอนุญาต Creative Commons Attribution-ShareAlike 2.0

-30 แสดงว่าการเปลี่ยนจากซ้ายไปขวาอยู่ระหว่างบริเวณที่มืดกว่าในภาพไปยังบริเวณที่สว่างกว่าในขณะที่ +30 แสดงว่าเปลี่ยนจากบริเวณที่สว่างไปยังบริเวณที่มืดกว่า

สังเกตได้ว่าตัวกรองที่เราใช้เป็นตัวกรองแนวตั้ง ซึ่งพยายามตรวจจับขอบโดยเริ่มจากด้านซ้ายของหน้าจอ ถ้าเราต้องการฟิลเตอร์สำหรับการตรวจจับขอบแนวนอน เราก็แค่เปลี่ยนตำแหน่งของฟิลเตอร์ที่เราใช้อยู่ ข้อมูลที่เราได้รับโดยใช้ตัวกรองด้านบนนั้นน้อยมาก เพื่อให้ได้ข้อมูลเพิ่มเติม เราใช้ตัวกรองที่ซับซ้อนมากมาย มีตัวกรองที่กำหนดไว้ล่วงหน้ามากมายที่เป็นตัวกรองที่มีชื่อเสียงสำหรับการตรวจจับขอบ เช่น ตัวกรอง Sobel หรือตัวกรอง Scharr เป็นต้น

ตัวกรอง Sobel หรือ Sobel-Feldman Operator และตัวกรอง Scharr ซึ่งโดยทั่วไปจะใช้สำหรับการตรวจจับขอบ

แม้ว่าตัวกรองเหล่านี้จะใช้งานได้ แต่ก็ยังมีวิธีที่ดีกว่า ซึ่งก็คือการใช้การเผยแพร่ย้อนกลับเพื่อสอนตัวกรองว่าจะตรวจจับอะไร เราจะพูดถึงเรื่องนี้เร็วๆ นี้ในซีรีส์ ดังนั้น คอยติดตามเพจของฉันและอย่าลังเลที่จะตรวจสอบบทความอื่น ๆ ของฉันในระหว่างนี้!

ขอบคุณที่แวะมา! ฉันจะตรวจสอบให้แน่ใจว่าบทความถัดไปออกมาตามแผนที่วางไว้พร้อมกับกำหนดการเฉพาะ ดังนั้นจับตาดูให้ดี! ในระหว่างนี้ คุณสามารถอ่านบทความของฉันเกี่ยวกับโปรเจกต์การวิเคราะห์ข้อมูลของฉัน หรือเกี่ยวกับการเปรียบเทียบ Deep Learning Specialization ที่เป็นที่นิยมกับ Deep Learning Nanodegree ของ Udacity หรือคุณสามารถติดตามบันทึกล่าสุดของฉันเกี่ยวกับ MLOps Specialization ได้ที่นี่

Mlearning.ai ส่งข้อเสนอแนะ