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

ระบบประสาทเทียม Classification of the input pattern


ระบบประสาทเทียม

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

1.โทนสีของวัตถุ ในครั้งนี้ผมจะเลือกปริภูมิ HSV มาใช้ในการบ่งบอกวัตถุ

2.ลายเส้น (Texture) ในครั้งนี้ผมจะเลือกใช้ข้อมูลลายเส้นจากขอบภาพนะครับ เพราะจะได้ช่วยลดปริมาณข้อมูลลง

เอาละ! มาลองพิจารณาขั้นตอนง่ายๆ กันดีกว่า

กลุ่มภาพนำเข้า ผมเลือกใช้ดอกไม้หลากสีจำนวน 5 ดอก ดังรูปที่ 1



รูปที่ 1 ภาพดอกไม้สำหรับเป็นตัวอย่างของข้อมูลนำเข้า


จะเห็นว่าดอกไม้ทั้ง 5 มีโทนสีที่ต่างกัน ในการสกัดสีเพื่อนำมาเป็นข้อมูลนำเข้า จะแปลงสีจากปริภูมิ RGB ไปเป็นองค์ประกอบฮิสโตแกรมแบบรวมองค์ประกอบโดยใช้ปริภูมิ HSV จำนวน 8 ถังสี (color bin) โดยจะรวมค่าความมืด (สีดำ) กับความสว่าง (สีขาว) ไปใน 8 ถังสีนี้ด้วย โดย HSV histogram ที่ได้จะเป็นดังภาพที่ 2 ครับ

รูปที่ 2 ตัวอย่างฮิสโตแกรมของภาพแรก


และมีข้อมูลคือ [0.0833    0.8333         0         0         0         0    0.0833         0]

หาข้อมูลของทุกภาพได้ดังนี้


ต่อมาคือการหา texture ของขอบภาพ เพื่อความรวดเร็วของการนำเสนอผมจึงไม่ขอแยกพื้นหลังออกก่อนแล้วกันครับ คือจะเอามาหาขอบกับไปดิบๆ เลย ด้วยคำสั่ง ของ MATLAB 

Iedge=edge(I,'sobel'); 

เลือก sobel เนื่องด้วยภาพจะดูดีกว่ากรณีอื่น เพราะผมต้องการเฉพาะขอบนอกเท่านั้น ได้ดังภาพที่ 3


รูปที่ 3 ขอบภาพจากฟังก์ชัน canny sobel และ prawit


จากคำสั่งตัดขอบเราจะได้ข้อมูลเป็นตัวเลข ‘0’ กับ ‘1’ เท่านั้น (logic) และมีขนาดเมตริกเท่ากับความกว้างและยาวของรูปต้นแบบ เราจะมาหาทิศทาง texture ของขอบภาพ ครั้งนี้จะเสนอวิธี co-occurrence เพื่อหาจำนวนสมาชิกในเมตริกที่มีตำแหน่งเดียวกัน โดยผมจะขอทำเพียงทิศ 0 และ 90 องศาเท่านั้น (เอาไว) แต่ถ้าจะเอาละเอียดมักจะทำกันทั้ง 4 ทิศทาง ได้แก่ 0,45,90 และ 135 องศา ครับ (แต่ผมเดาว่า 2 ทิศทางก็น่าจะพอที่จะได้ผลการเปรียบเทียบภาพแรกที่ตรงกัน)

ด้วยคำสั่งที่ MATLAB มีมาให้แล้ว คือ graycomatrix จากตัวอย่างนี้ ได้คำตอบคือ

glcm0 = [94919      1220; 1221      688];

glcm90 = [ 94557       1477; 1455   431];


นำมาจัดเรียงเป็นแถวให้ได้สมาชิก 8 ตัว ซึ่งมีสมาชิกเท่ากันกับกระบวนการหา color feature ที่ผ่านมา

[94919        1220        1221         688 94557        1477        1455         431]

ทำแบบเดียวกันกับภาพที่เหลือได้ออกมาเป็นเมตริกขนาด 5x8 โดยให้ normalize ทุกตัวก่อนนำมาจัดเรียง


ต่อมาเราก็จะจัดกลุ่มข้อมูลใหม่อีกครั้งเพื่อให้ง่ายต่อการกำหนด output โดยจะเรียงใหม่เป็น column ของชุดข้อมูลเดียวกัน โดยผมจะเรียงเป็น color1 texture1 color2 texture2......... ไปจนครบ

input = 


จะเห็นว่า input ซึ่งจะใช้เป็นตัวแปรนำเข้า มีขนาด 8x10 ดังนั้นการกำหนด output จึงต้องกำหนดไปตามกัน สำคัญที่ column ที่ต้องมีขนาดเท่ากัน ในที่นี้คือ 10 column ครับ โดยผมจะกำหนด output ดังนี้

out =  [1 1 0 0 1 1 1 1 1 1 ;

           1 1 1 1 1 1 0 0 0 0 ;

           1 1 1 1 0 0 1 1 0 0];


นำเข้าไปเรียนรู้ใน NN backpropagation function  โดย output layer จะต้องมีขนาดเดียวกับจำนวน row ของ out ที่กำหนด สำหรับในตัวอย่างนี้ก็คือ ตัวเลข 3 ท้ายสุดนั่นเอง ใช้คำสั่ง blackprop ประมาณนี้ครับ (ผมใช้ 3 ชั้น)

net=newff(minmax(input),[8 5 3],{'tansig','logsig', 'purelin'},'traingda');

.........................

[net,tr]=train(net,input,out);


รูปที่ 4 ผลการเรียนรู้

จากนี้เราก็จะได้แบบจำลองสมองน้อยๆ ไว้ใช้แล้ว หากเรามีข้อมูลที่ต้องการทดสอบก็จักต้องหา feature ในลักษณะเดียวกัน แต่ไม่ต้อง train แล้ว ให้นำไป sim ได้เลย จากตัวอย่างที่ทำมาผมสร้างเป็น GUI ลองทดสอบได้ผลพอใช้ แสดงให้เห็นบางตัวดังรูปที่ 5



รูปที่ 5 ผลการทดลองบางตัวอย่าง

หากจะเอาผลที่ดีมากยิ่งขึ้น ก็ลองเพิ่มจำนวนข้อมูลอินพุต เช่น เพิ่มจำนวน  Color bin และ เพิ่มองศาของ co-occurrence รวมทั้งอาจเอาพื้นหลังออกไปก่อนก็ดีครับ ในงานวิจัยอาจจะต้องใช้ feature ต่างๆ แล้วแต่ใจปราถนาเพื่อเป็นการทดสอบของนักวิจัยเอง รวมทั้งการใช้เทคนิคอื่นๆ เข้ารวมกับการใช้ NN

จากตัวอย่างที่แสดงไว้ น่าจะพอเป็นแนวทางให้เกิดความสุขในการพัฒนา เพื่อประโยชน์แก่ผู้สนใจนะครับ สำหรับตัวอย่างโปรแกรมผมลงให้ดาวน์โหลดไปเล่นแก้ง่วงกัน ดูที่ 4share ตามลิงค์ด้านล่างครับ


http://www.4shared.com/rar/bGGQ1Yd1/gotoknow2.html?

หมายเลขบันทึก: 544301เขียนเมื่อ 1 สิงหาคม 2013 10:12 น. ()แก้ไขเมื่อ 1 สิงหาคม 2013 13:58 น. ()สัญญาอนุญาต: ครีเอทีฟคอมมอนส์แบบ แสดงที่มา-ไม่ใช้เพื่อการค้า-ไม่ดัดแปลงจำนวนที่อ่านจำนวนที่อ่าน:


ความเห็น (5)

 

 

        .... ขอบคุณความรู้ใหม่ๆ นี้นะคะ .... ขอบคุณค่ะ....

ยินดีครับ ขอบคุณที่อ่านเช่นกัน

ขอบคุณครับที่เขียนบล๊อคดีๆให้อ่านสรุปได้ง่ายมากครับ

รบกวนเขียนอีกนะครับ

ครับ...ขอผมเรียบเรียงเนื้อหาใหม่ๆ สักแป๊ป ขอบคุณที่ได้รับประโยชน์เช่นกัน

ขอขอบคุณมากๆ ครับ อ่านแล้วเข้าใจง่ายดีครับ มาเขียนต่ออีกเยอะๆ นะครับ :)) 

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