kikapo
เลิศพันธุ์ เพียรสร้างสรร

ระบบประสาทเทียม Neural Network Application 3 (ตัวอย่างการใช้งาน)


neural network

     สวัสดีครับ หายไปเกือบครึ่งปีที่ไม่ได้เขียนบทความ วันนี้มาต่อด้วยด้วยเรื่องของ Neural Network กันให้จบ คราวนี้จะขอยกตัวอย่างในงานจดจำใบหน้าแบบง่ายๆ ให้พอนำไปประยุกต์เพิ่มเติมได้ครับ

     จากที่เคยนำเสนอวิธีการใช้งานมาแล้วในคราวก่อน ซึ่งเป็นกรณีการจดจำฟังก์ชันแบบง่ายๆ จะเห็นว่าประสาทเทียมจะต้องมีข้อมูลนำเข้า (Input) เพื่อนำไปฝึกสอน โดยวัตถุประสงค์เพื่อให้ได้ผล (target/Output) ตามที่กำหนด เมื่อประสาทได้รับการฝึกสอนแล้วมันจะต้องจดจำได้ และหากเรามีข้อมูลอื่นๆ มาทดสอบความจำของมัน โดยถ้าเป็นข้อมูลเดียวกันกับที่เรียนรู้ไว้มันก็จะรู้จัก และคราวนี้เราจะมาลองสอนให้ระบบจดจำใบหน้าด้วยวิธีง่ายๆ กันตามลักษณะที่กล่าวไว้

     สมมุติว่าเราสร้างคอนโดฯ ไว้ให้เช่า 5 ชั้น แล้วทีนี้มีคนมาเช่า 5 คนประกอบด้วย คุณ A, B, C, D, และ E และเราต้องการสร้างระบบให้จดจำใบหน้าบุคคลเหล่านี้ไว้เพื่อสร้างเป็นระบบความปลอดภัยของคอนโดฯ

รูปที่ 1 ใบหน้าผู้เช่าคอนโดฯ

 

ดังนั้นสิ่งที่ต้องทำอย่างแรกคือการสร้างระบบประสาทเทียมให้จดจำใบหน้าผู้เช่าเสียก่อน และปัญหาก็เกิดขึ้นทันทีคือ ข้อมูลนำเข้าหล่ะจะทำอย่างไร? ซึ่งมันอาจจะเป็นไปได้ทั้งหมด เช่น สีผิวหน้า ตำแหน่งตา หู จมูก ปาก หรือโครงร่าง.(ขอบ) ใบหน้า และอื่นๆ เพราะการแยกแยะของระบบว่าหน้าใครเป็นของใครจะดีหรือไม่นั้น ส่วนหนึ่งขึ้นอยู่กับการเลือกข้อมูลนำเข้านี่แหล่ะครับ.(จะขอเรียกข้อมูลเหล่านี้ว่า vector support) แต่ในครั้งนี้ผมจะขอเลือกใช้วิธีการแยกแยะด้วยเวฟเลทครับ ใช้การจดจำด้วย pattern ของใบหน้า คล้ายๆ ลายบนผ้านั่นแหล่ะ แต่ด้วยข้อจำกัดในเรื่องเนื้อหาการนำเสนอเกรงว่ามันจะยืดยาว ผมจึงขอแสดงเป็นโฟว์ชาร์ตแทนนะครับ ส่วนโค๊ตมีไว้ให้โหลดไปทดลองกันครับ

รูปที่ 2 โฟว์ชาร์ตการสอน

 

หมดขั้นตอนนี้ เราก็จะได้ระบบประสาทเอาไว้ใช้แล้วครับ ในส่วนของการแยกใบหน้าผมใช้ kmean อัลกอรึทึมเพื่อแยกสีออกเป็น 2 กลุ่มคือส่วนหน้าและส่วนหลังซึ่งอาจจะแยกไม่ค่อยดีนักแต่ก็ใช้ได้ในระดับหนึ่ง.(อาจจะใช้เทคนิคอื่นๆ ได้ครับ เพราะจุดประสงค์คือต้องการแค่ใบหน้าเท่านั้น) ในส่วนของฟูเรียร์ผมเลือกแบบ ‘haar wavelet’ เนื่องด้วยสามารถแยกแยะชั้นขอบภาพได้ดีเพราะมีลักษณะเป็นสเต็ป.(แต่สามารถปรับเปลี่ยนได้ตามลักษณะข้อมูลที่ต้องการ) ในขั้นตอนการฝึกสอนผมกำหนดผลลัพธ์ (target) ไว้เพื่อเป็นตัวแทนของภาพทั้ง 5 ดังนี้ คือ

  1. ภาพแรกกำหนดให้มีผลลัพธ์เป็น 00011
  2. ภาพที่สองกำหนดให้มีผลลัพธ์เป็น 00110
  3. ภาพที่สามกำหนดให้มีผลลัพธ์เป็น 01100
  4. ภาพที่สี่กำหนดให้มีผลลัพธ์เป็น 11000
  5. ภาพที่ห้ากำหนดให้มีผลลัพธ์เป็น 10001

และภายหลังการเทรนระบบแล้ว ยังสามารถนำเฉพาะค่าน้ำหนักที่ได้จากการฝึกสอนไปใช้เป็นน้ำหนักคงที่ของโปแกรม.(นอกเหนือจากวิธีการที่ผมนำเสนอ) ซึ่งเหมาะสมกับระบบที่มีอินพุทมากๆ เช่น ถ้าคอนโดฯ เรามีคนเป็นพันคน เราอาจจะต้องเลือกวิธีการใช้น้ำหนักคงที่ เพราะสะดวกกว่าและส่งผลต่อความเร็วของการค้นหา ขั้นตอนในส่วนนี้ผมเขียนไว้ในไฟล์ Training.m ซึ่งมีการดึง function ร่วมเข้ามาใช้งาน ได้แก่ FaceOnly.m และ IPUTT2.m

รูปที่ 3 ตัวอย่างภาพที่ได้จากการใช้ kmean ตัดเอาเฉพาะใบหน้า

 

รูปที่ 4 ผลการสอนระบบ จะเห็นว่าเรากำหนด target ได้เหมาะสมดีมาก เพราะได้ค่า regression เกือบเป็น 1 

 

 ครับต่อไปเราก็ลองทดสอบระบบที่สร้างไว้แล้ว โดยใช้ใบหน้าอื่นๆ มาลองถามโปรแกรมดู แสดงด้วยโฟว์ชาร์ตดังนี้

รุปที่ 5 โฟว์ชาร์ตของการทดสอบ

รูปที่ 6 รูปใบหน้าสำหรับทดสอบ

 

ขั้นตอนส่วนนี้ ผมเขียนเป็นโปรแกรมชื่อ Testing.m เมื่อรันมาแล้วโปรแกรมจะถามหาภาพที่ต้องการทดสอบให้กดหมายเลขตั้งแต่ 1 ถึง 11 เนื่องมาจากภาพทดสอบเรามี 11 ภาพ และถ้าหมายเลขใบหน้าบุคคลที่เลือกเข้ามาเป็นผู้ที่เช่าคอนโดฯ ก็จะแสดงข้อความต้อนรับ เช่น “Welcome Mr.A” แต่หากไม่ใช่โปรแกรมจะแสดงข้อความ “Who are YOU!!!!!!!”

 

หมายเหตุ : ดาวน์โหลดโปรแกรมได้ที่ 

http://www.4shared.com/rar/jcRGhfX8/gotoknow.html

หมายเลขบันทึก: 487555เขียนเมื่อ 9 พฤษภาคม 2012 23:17 น. ()แก้ไขเมื่อ 16 ธันวาคม 2012 21:24 น. ()สัญญาอนุญาต: ครีเอทีฟคอมมอนส์แบบ แสดงที่มา-ไม่ใช้เพื่อการค้า-อนุญาตแบบเดียวกันจำนวนที่อ่านจำนวนที่อ่าน:


ความเห็น (1)

ขอบคุณนะค่ะที่แบ่งปัน

พบปัญหาการใช้งานกรุณาแจ้ง LINE ID @gotoknow
ClassStart
ระบบจัดการการเรียนการสอนผ่านอินเทอร์เน็ต
ทั้งเว็บทั้งแอปใช้งานฟรี
ClassStart Books
โครงการหนังสือจากคลาสสตาร์ท