Object Detection มาลองเป็น นัมโดซานแบบในซีรี่ส์เกาหลี ภายใน 2 สัปดาห์กัน! (Try being Nam Dosan in 2weeks) [EP.1]

BotnoiCV_Fun06
Mar 27 · 4 min read

ตอนที่ 1 ความฝันล่มสลาย : การพัฒนาระบบตรวจจับและรับรู้วัตถุประเภทตัวเขียนภาษาไทย ผ่านภาพวิดิโอบนโทรศัพท์มือถือแบบเรียลไทม์

ถ้าใครได้เคยตามกระแสซีรีส์เกาหลีสุดฮิตอย่าง Start-Up ก็คงจะไม่พลาดฉากสำคัญตอนหนึ่งของเรื่องในช่วงที่ทีม ซัมซานเทค ของพระเอก(นัมโดซาน)และ นางเอก (ซอดัลมี) ในเรื่อง ได้ลงแข่งขัน Hackathon โดยทางซัมซานเทค ได้เลือกที่จะใช้ชุดข้อมูลลายมือลูกค้าของธนาคารมาเพื่อพัฒนาระบบตรวจจับลายมือในเอกสารสัญญาที่ลงนาม ว่ามีลายมือส่วนใดที่เป็นของปลอมหรือไม่ และผลก็คือการได้รับการยอมรับจากกรรรมการ และผ่านเข้ารอบอันเป็นจุดเริ่มต้นของการเข้าสู่ Sandbox ที่พวกเค้าฝันถึงนั่นเอง และจะว่าไป ด้วยความอินในซีรีส์ส่วนนึง รวมไปถึงเล็งเห็นว่าถ้าเราสามารถให้ระบบตรวจจับวัตถุสามารถแยกแยะตัวอักษรภาษาไทยในภาพหรือวิดีโอได้น่าจะมีประโยชน์และสามารถต่อยอดไปสู่การใช้ประโยชน์ได้อย่างหลากหลายในอนาคต ไม่ว่าจะเป็นแบบนุนกิลในแบบซีรี่ส์ ไปจนถึงการช่วยให้คุณย่า (ยังอินไม่หยุด 555) ไม่สิ ช่วยให้คนที่มีข้อจำกัดในการมองเห็น สามารถอ่านข้อความในหน้าจอที่กล้องถ่ายไปได้ ก็สามารถทำได้เช่นกัน ทางทีม CV6 ของเราจึงเลือกจะพัฒนาระบบตรวจจับลายมือตัวหนังสือภาษาไทยด้วยความเชื่อว่าจะมีคุณค่าและประโยชน์เป็นอันมาก โดยมีความคาดหวังว่าโครงการนี้จะเป็นเรื่องสบายๆสำหรับทีมเรา และจบงานกันได้ไม่ยากนัก แต่ความจริงนั้นมันโหดร้ายกว่าที่คุณคิด สิ่งต่างๆไม่ใช่อย่างที่คิดและทำให้การเดินทางของโครงการนี้ยืดเยื้อแต่เต็มไปด้วยประสบการณ์ที่น่าสนใจมากมายและเราพร้อมจะนำมาถ่ายทอดให้ผู้สนใจได้เรียนรู้และร่วมเดินทางไปด้วยกันผ่านบทความทั้ง 3 ตอนในโครงการนี้

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

0. เริ่มต้นหาโครงการกันก่อน

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

  1. แนวคิด

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

https://medium.com/equinox-blog/%E0%B8%A5%E0%B8%AD%E0%B8%87%E0%B8%97%E0%B8%B3-thai-handwrittern-recognition-%E0%B8%97%E0%B8%B2%E0%B8%A2%E0%B8%95%E0%B8%B1%E0%B8%A7%E0%B8%AD%E0%B8%B1%E0%B8%81%E0%B8%A9%E0%B8%A3%E0%B8%A0%E0%B8%B2%E0%B8%A9%E0%B8%B2%E0%B9%84%E0%B8%97%E0%B8%A2-%E0%B8%81%E0%B8%B1%E0%B8%99-4d1dbefedf55

2. หาแหล่งข้อมูลเพิ่มเติม

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

  • ชุดข้อมูลตัวอักษรภาษาไทยจากงานวิจัยเรื่อง “Engineering Applications of Artificial Intelligence” โดยคณะวิจัย “Olarik Surinta and Mahir F. Karaaba and Lambert R.B. Schomaker and Marco A. Wiering” https://www.ai.rug.nl/~mrolarik/ALICE-THI/
  • ชุดข้อมูลตัวอักษรภาษาไทยจากศูนย์เทคโนโลยีอิเล็กทรอนิกส์และคอมพิวเตอร์แห่งชาติ https://thailang.nectec.or.th/best/best2019-handwrittenrecognition-trainingset/

3. การทดสอบรอบแรกและปัญหา

เราเริ่มต้นการทดสอบรอบแรกด้วยชุดข้อมูลจาก NECTEC ซึ่งเป็นแบบฟอร์มลายมือเขียนของบุคคลต่างๆ บนกระดาษ A4 โดยมีขั้นตอนดังนี้

ขั้นแรก ทำการ crop ภาพจาก Dataset ของ NECTEC เพื่อเลือกเฉพาะส่วนของลายมือเขียนตัวอักษรและสระ ดังรูป

ขั้นที่สอง คือกระบวนการทำ label ซึ่งจำเป็นต้องทำให้กับ ตัวอักษร และ สระ รวมถึงวรรณยุกต์ทุกตัว กับทุกๆภาพที่ได้เตรียมไว้ ซึ่งในกระบวนการนี้เราใช้เครื่องมือการสร้างกรอบบนภาพ ที่ชื่อว่า Label Image https://github.com/tzutalin/labelImg ซึ่งเรามีรูปที่ต้องทำ label จำนวน 320 รูป ซึ่งถ้าจะมานั่งลากทุกรูป น่าจะเอ็นข้อมืออักเสบแน่นอน ซึ่งพอทางเราศึกษาผลลัพธ์ที่ได้จากโปรแกรม Label นั้นพบว่าผลลัพธ์ที่เราลากจะได้เป็นไฟล์ XML ที่มีโครงสร้างค่อนข้างที่จะตายตัว โดยมี position xMin , xMax,yMin,yMax ดังนี้

ซึ่งจะเห็นว่ามีส่วนที่เปลี่ยนคือตรง Tag FileName และ Path เท่านั้น เราเลยทำการโกง ด้วยการเขียน โค้ดทำ master xml ไฟล์เดียว จากนั้นก็ทำการ copy พร้อมทั้งแก้ค่าข้างในแบบ auto ซะก็เรียบร้อยย!!!

ขั้นที่สาม หลังจากทำการสร้าง label ในขั้นที่สองครบทุกภาพ ทางทีมงานเลือกที่จะไปใช้ Roboflow.com ในการทำงานต่อ เพื่อช่วยให้เราสามารถสร้าง Data Augmentation ได้อย่างสะดวกรวดเร็ว ผู้ใช้สามารถเลือกบิด หมุน หรือซูมภาพตัวอักษรให้แตกต่างไปจากภาพต้นฉบับ วัตถุประสงค์คือเพิ่มชุดข้อมูลลายมือที่มีความแตกต่างกันมากขึ้น เพื่อให้ระบบที่ผ่านการเทรนมีความแม่นยำมากขึ้นในที่สุด

โดยขั้นแรก เราให้ทุกคนในทีม ( ทีม Dev ว่างงานจึงมาทำด้วย) มาทำการตรวจสอบว่า Label ที่เราเขียน โปรแกรมให้ copy นั้น ตรงตำแหน่งหรือไม่ ซึ่งผลลัพธ์ เป็นที่น่าพอใจคือ มีแก้ไข label โดยการลากให้ตรงตำแหน่ง แค่ประมาณ 10 % เท่านั้น ทำให้การตรวจสอบเสร็จในเวลาไม่นาน ซึ่งปัญหาที่ไม่ตรง เนื่องจากข้อมูลจากลายมือคนนั้น เขียนไม่ตรงตำแหน่งนั่นเอง

หลังจากนั้นเราก็ได้ปรับ Augmentation โดยใช้ feature ใน Roboflow เอง

ซึ่งในขั้นตอนนี้ ทำให้เราได้พบเรื่องไม่คาดฝันว่า ระบบของ Roboflow จะ generate dataset จาก label ที่เป็นภาษาไทย (ก, ข, ค, … ) ออกมาเป็นค่าว่าง นั่นหมายถึง หาก Object ที่เราต้องการตรวจจับ เป็นลายมือเขียนตัวหนังสือ “ก” ระบบก็จะไม่สามารถแสดง Label ว่า “ก” ได้ เราจึงต้องทำการเปลี่ยน Label ทุกตัวเป็นคำทับศัพท์ภาษาอังกฤษแทนเช่น “KO-KAI” เป็น Label ของตัวหนังสือ “ก” เป็นต้น

น่ารู้! สำหรับบัญชีผู้ใช้ชนิดไม่เสียเงิน Roboflow จะอนุญาตให้เราสามารถอัพโหลดได้เพียง 1,000 รูปและสามารถสร้างภาพที่ผ่านการปรับปรุงในกระบวนการ Data Augmentation ได้เพียง 5,000 รูปเท่านั้นจึงต้องทดลองและวางแผนการทำงานให้ดี

ตั้งใจทำอย่างสวยงาม

เมื่อทำการ export ออกมาจาก roboflow ( T____T)

น่ารู้ !! เราสามารถมาแก้ไขข้อมูลตรงนี้เป็น ภาษาไทย ก็ได้นะครับ

ขั้นที่สี่ เมื่ออัพโหลดรูปและทำการสร้าง Dataset เพิ่มด้วย Roboflow เป็นที่น่าพอใจแล้ว ต่อไปก็ถึงเวลาที่เราจะนำ dataset ชนิด tfrecord และ COCO ซึ่งถูกสร้างขึ้นจากไฟล์รูป และไฟล์ label ใน Roboflow ไปใช้กันผ่านการ Export Link เพื่อนำไปใส่ใน Colab ที่เตรียมไว้กันซะที

ขั้นที่ห้า กระบวนการเทรนโมเดลของเราประกอบด้วย…. ตามตัวอย่างของ Code ในภาพนี้

แต่น แต๊นนน และแล้วก็มาถึงเวลาแห่งความจริง (อันแสนเจ็บปวด) ของทีมเรา หลังจากได้ใช้เวลากว่า 3 ชั่วโมงและรอบการเทรนถึง 50,000 รอบ สิ่งที่ไม่คาดคิดก็เกิดขึ้นซะแล้ว จากการ Validate พบว่าโมเดลระบบตรวจจับลายมือ ไม่สามารถทำงานได้อย่างที่คิด หลังจากที่พยายามแล้วพยายามอีกและตรวจสอบกระบวนการต่างๆ ครบถ้วน ทีมงานจึงช่วยกันหาสมมุติฐาน และเชื่อว่า เกิดจากขนาด Pixel ของแต่ละ Object ที่ทำการ Label มีขนาดเล็กเกินไป เมื่อย้อนกลับไปดู และตรวจสอบต้นฉบับภาพที่ใช้ ก็พบว่ามีขนาดเพียง 416 x 416 pixels เท่านั้นและ Selection Area ก็มีขนาดเพียง 16 x 64 pixels เท่านั้น (เล็กไปหน่อยเนอะ) ตอนแรกทีมก็คิดกันว่าจะเพิ่มขนาดของภาพให้ใหญ่ขึ้นไปสัก 5 เท่า เพื่อเพิ่มขนาดของ Selection Area แต่ แต่ แต่ครับ เมื่อทดลองทำแล้ว ก็พบว่า ไม่ได้ผล >____<

ค้นลงไปอีก จึงได้พบว่า แม้เราจะพยายามเพิ่มขนาดภาพต้นฉบับไปจนใหญ๋โต (แต่ก็ใหญ๋เกินระบบรับไม่ได้นะครับ) ก็ไม่มีประโยชน์ เพราะในกระบวนการเทรนโมเดล ภาพต้นฉบับที่ว่าเล็กขนาด 416 x 416 pixels ก็จะถูกย่อขนาดลงไปอีกให้เหลือเพียง 300 x 300 pixels เท่านั้นเองจ้า

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

ติดตามการแก้ปัญหาใน EP.2 https://link.bsru.ac.th/ec

botnoi-classroom

This publication consists of articles related to Data…

Medium is an open platform where 170 million readers come to find insightful and dynamic thinking. Here, expert and undiscovered voices alike dive into the heart of any topic and bring new ideas to the surface. Learn more

Follow the writers, publications, and topics that matter to you, and you’ll see them on your homepage and in your inbox. Explore

If you have a story to tell, knowledge to share, or a perspective to offer — welcome home. It’s easy and free to post your thinking on any topic. Write on Medium

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store