- 10 ความคิดเห็น
Introduction
การเขียนโปรแกรมเพื่อ detect สิ่งของด้วยวิธี haar cascade ต้องมีการ train ข้อมูลเพื่อให้ได้ไฟล์ xml หลังจากนั้นเราจะนำไฟล์ xml ไปใช้ในการ detect ในลำดับต่อไป ซึ่งผมเคยได้นำเสนอการใช้ไฟล์ xml ในการ detect ใบหน้าคน มาแล้วในแล็บที่ 7 และในแล็บนี้ผมจะนำเสนอวิธีสร้างไฟล์ xml ขึ้นมาเอง โดยผมจะ detect ตุ๊กตา KUMA ครับ
Preparing data
ข้อมูลที่ใช้ในการเทรน แบ่งออกเป็น 2 ส่วน คือ positive และ negative
- Positive data คือ ภาพที่ประกอบไปด้วยวัตถุที่เราจะ detect โดยทั่วๆ ไปควรจะมีประมาณ 1,000 ภาพ แต่ในกรณีนี้ผมใช้แค่ 15 รูปครับ
- Negative data คือ ภาพที่ไม่มีส่วนของวัตถุที่จะ detect เช่นกันครับจำนวนภาพที่ต้องใช้ประมาณ 3,000
ภาพ เช่น
ภาพพื้นหลังของห้อง ภาพถนน สำหรับการ detect KUMA ผมจะใช้ภาพพื้นหลังภายในห้องครับอย่างเดียวครับ
เพราะผมต้องการ detect KUMA แค่ในห้องเท่านั้นครับ
Create sample
- Create negative sample
+ กลับไปที่ tools/temp/negative/ ก๊อปปี้รูป negative ทั้งหมดมาใส่ไว้ในนี้นะครับ
+ รันโปรแกรม create_list.bat และจะได้ output เป็น textfile เช่นกัน โปรดรักษามันไว้ดีๆ เช่นกันครับ
Training
- Create vector file
+ Create vec file command
- Training
- Convert to xml file
หลังจากใช้เวลาอันแสนนานในการเทรน ขั้นตอนนี้เราจะแปลงข้อมูลที่ได้จากการเทรนมาอยู่ในอยู่ของ xml file เพื่อที่จะนำไฟล์ xml ดังกล่าวไปใช้ในลำดับต่อไป
+ tools/temp/data/cascade/ ก๊อปปี้โฟลเดอร์ทั้งหมดไปไว้ที่ tools/cascade2xml/data
+ tools/temp/data/ ก๊อปปี้ไฟล์ vector.vec ไปไว้ที่ tools/cascade2xml/
+ รัน convert.bat จะได้ xml มาใน้ชื่อ output.xml นี้แหละครับคือสิ่งที่เราต้องการ
Testing
- tools/ test_recognition/ ก๊อปปี้ไฟล์ xml ที่เราได้มาไว้ในโฟลเดอร์นี้ และคลิกขวา edit ที่ start.bat
การเขียนโปรแกรมเพื่อ detect สิ่งของด้วยวิธี haar cascade ต้องมีการ train ข้อมูลเพื่อให้ได้ไฟล์ xml หลังจากนั้นเราจะนำไฟล์ xml ไปใช้ในการ detect ในลำดับต่อไป ซึ่งผมเคยได้นำเสนอการใช้ไฟล์ xml ในการ detect ใบหน้าคน มาแล้วในแล็บที่ 7 และในแล็บนี้ผมจะนำเสนอวิธีสร้างไฟล์ xml ขึ้นมาเอง โดยผมจะ detect ตุ๊กตา KUMA ครับ
Preparing data
ข้อมูลที่ใช้ในการเทรน แบ่งออกเป็น 2 ส่วน คือ positive และ negative
- Positive data คือ ภาพที่ประกอบไปด้วยวัตถุที่เราจะ detect โดยทั่วๆ ไปควรจะมีประมาณ 1,000 ภาพ แต่ในกรณีนี้ผมใช้แค่ 15 รูปครับ
Create sample
ก่อนอื่นต้องไปโหลด tool
เพื่อช่วยในการสร้าง positive และ negative
ก่อนนะครับ เมื่อโหลดมาเรียบร้อยแล้ว
แตกไฟล์และก๊อบปี้โฟลเดอร์ดังกล่าวไปไว้ที่ drive D: download tools
- Create positive sample
- +ในขั้นแรกให้เข้าไปที่ tools/temp/positive/rawdata
ครับ หลังจากนั้นให้ copy รูป positive
ที่เราเตรียมไว้ทั้งหมดมาไว้ที่โฟลเดอร์นี้ครับ
+ กลับไปที่ tools/temp/positive/ คลิกที่ objectmarker.exe
เพื่อใช้มาร์คตำแหน่งของวัตถุที่เราต้องการจะ detect โดยวิธีใช้คือ
ให้เรานำเมาส์ลากเพื่อสร้างกรอบดังภาพ และกด space bar เพื่อยืนยันกรอบนั้น
และเมื่อต้องการเปลี่ยนภาพเป็นภาพถัดไปให้กด Enter ทำเช่นนี้จนครบทุกภาพ เราจะได้ output เป็น textfile ดังภาพ ซึ่งภายใน textfile จะเก็บชื่อไฟล์ จำนวนวัตถุ และตำแหน่งของวัตถุของในภาพนั้นๆ เอาไว้
+คำเตือน โปรดรักษา output (info.txt) ที่ได้เยี่ยงชีวิตนะครับ ฮ่ะๆ
เดี๋ยวจะหาว่าไม่เตือน ^_^
+ กลับไปที่ tools/temp/negative/ ก๊อปปี้รูป negative ทั้งหมดมาใส่ไว้ในนี้นะครับ
+ รันโปรแกรม create_list.bat และจะได้ output เป็น textfile เช่นกัน โปรดรักษามันไว้ดีๆ เช่นกันครับ
- Create vector file
+ Create vec file command
D:\tools\temp\createsamples.exe
-info positive/info.txt -vec data/vector.vec -num 15 -w 20
-h 24
โดยมีพารามิเตอร์คร่าวๆ ดังนี้ครับ
-info ไฟล์ข้อมูลที่ได้จาก create positive sample
-vec
output
-num จำนวน positive sample
-w –h ความกว้างและความสูง
+ Start -> run -> D:\tools\temp\createsamples.exe -info positive/info.txt -vec
data/vector.vec -num 15 -w 20 -h 24
เมื่อเราได้ vec
file จากขั้นตอนที่แล้ว ขั้นตอนนี้เราจะมา train ข้อมูลกันครับ โดยใช้คำสั่งด้านล่างนี้ครับ
D:\tools\temp\haartraining.exe
-data data/cascade -vec data/vector.vec -bg negative/infofile.txt -npos 15 -nneg 20 -nstages 15 -mem 1000 -mode ALL -w 20 -h 24 –nonsym
โดยมีพารามิเตอร์คร่าวๆ ดังนี้ครับ
-data
output ที่จะได้
-vec vec
file ที่ได้จากขั้นตอนก่อนหน้า
-bg ไฟล์ข้อมูลที่ได้จาก
create negative sample
-npos จำนวน positive
-nneg จำนวน negative
-nstages จำนวน
stages จำนวน stage จะแปรผันตรงกับเวลาที่ใช้
train
-mem ขนาดของ memory
ที่กำหนดให้ใช้ในการ train ถ้าเรากำหนดขนาดของ
memory มากเวลาที่ใช้เทรน ก็จะน้อยลงด้วย
-w-h ความกว้าง และความสูง
หลังจากใช้เวลาอันแสนนานในการเทรน ขั้นตอนนี้เราจะแปลงข้อมูลที่ได้จากการเทรนมาอยู่ในอยู่ของ xml file เพื่อที่จะนำไฟล์ xml ดังกล่าวไปใช้ในลำดับต่อไป
+ tools/temp/data/cascade/ ก๊อปปี้โฟลเดอร์ทั้งหมดไปไว้ที่ tools/cascade2xml/data
+ tools/temp/data/ ก๊อปปี้ไฟล์ vector.vec ไปไว้ที่ tools/cascade2xml/
+ รัน convert.bat จะได้ xml มาใน้ชื่อ output.xml นี้แหละครับคือสิ่งที่เราต้องการ
- tools/ test_recognition/ ก๊อปปี้ไฟล์ xml ที่เราได้มาไว้ในโฟลเดอร์นี้ และคลิกขวา edit ที่ start.bat
--cascade=”dane.xml” คือชื่อไฟล์ xml
0
คือเป็นการรับ input มาจากกล้อง แต่ถ้าเราต้องการทดสอบกับรูปภาพให้เราเปลี่ยน
จากเลข 0 เป็นชื่อรูปภาพแทน
- - รัน start.bat
เพื่อทดสอบการ detect KUMA
- output
10 ความคิดเห็น
+ Create vec file command คืออะไรหรอครับพี่ผมไม่เข้าใจอ่าครับ รบกวนที
พิจารณา D:\tools\temp\createsamples.exe -info positive/info.txt -vec data/vector.vec -num 15 -w 20 -h 24
D:\tools\temp\createsamples.exe = คือที่อยู่ของโปรแกรม createsamples.exe ครับ
-info = ที่อยู่ของไฟล์ info.txt
-vec = output ที่เราจะได้
-num = จำนวนรูป positive
-w = ความกว้างเฉลี่ยของวัตถุ
-h = ความสูงเฉลี่ยของวัตถุ
พี่ครับ ผมลองทำแล้วมันได้ผลแบบนี้อ่าครับ ไม่รู้จะแก้ยังไงทำมาหลายครั้งแล้วอ่าครับ
http://upic.me/show/48381537
จากรูป จะ detect อะไรหรอครับ? คุณใช้จำนวน Pos และ Neg อย่างละเท่าไหร่อะครับ
จะ Detect หมวกกันน๊อคอ่ะครับ ใช้ Pos 161 ภาพ Neg 7 ภาพอ่ะครับ
ตอน test ภาพขึ้นแต่ไม่ detect เป็นเพราะอะไรคะ
คลิ๊ก objectmarker.exe แล้วไม่ขึ้นอะไรเลย ต้องลงอะไรเสริมหรือป่าวครับ หรือ รัน 64 bit ไม่ได้ต้องทำยังไงครับ
คลิ๊ก objectmarker.exe แล้วไม่ขึ้นอะไรเลย
objectmarker.exe ต้องมีไฟล์ที่เป็น .bmp อยู่ในโฟร์เดอร์ rawdata นะครับ
รบกวนทำเป็น VDO ได้ป่าว
Post a Comment