True Lab Startup Sandbox Ep.1
Hackathon , Naive Solution and Labeling
--
True Lab Startup Sandbox
For young startups in robotics and AI
ภายใต้ Startup Sandbox โครงการ True Lab Startup Sandbox จัดขึ้นเพื่อสตาร์ทอัปยุคใหม่และผู้มีหัวใจผู้ประกอบการที่สนใจด้าน Robotic และ AI เชิญมาร่วม hack idea และคัดเลือกสมาชิกทีมไปกับกลุ่มทรู ทีมที่ผ่านการคัดเลือกจะได้รับทุนพัฒนาต้นแบบและสิทธิในการใช้พื้นที่ทำงานที่ทรู ดิจิทัล พาร์คฟรี ตลอดระยะเวลาร่วมโครงการ และยังได้เป็นสมาชิก co-working space ต่อหลังจบโครงการอีก 3 เดือน รวมเงินรางวัลทั้งสิ้น 1.5 ล้านบาท
คัดเลือกเข้าร่วม Hackathon (2 วัน 1 คืน ที่ ทรู ดิจิทัล พาร์ค) ทั้งหมด 10 ทีม (ทีมละ 3–5 คน)
และจะรับเพียง 4 ทีมที่มีผลงานดีที่สุดเข้าร่วมโครงการ
Introduction
เนื่องด้วยโอกาสที่เจ้าของบทความ ทีม DeepSec ได้มีโอกาสได้รับคัดเลือกในโครงการ True Lab Startup Sandbox จึงอยากจะแชร์ประสบการณ์การแข่งขัน Hackathon ให้เพื่อนๆที่มีความสนใจใน Start Up เหมือนกัน
โดยการแข่งครั้งนี้จะมาใน Theme ของ Image Recognition และ Speech Recognition
โจทย์ของ True Lab Startup Sandbox Hackathon จะเป็นเช่นใด ? ทางทีม DeepSec จะมีวิธีการใดแก้ไขปัญหา ? เพื่อนๆสามารถติดตามชมได้พร้อมๆกันเลยครับ
Problem
- ถ้าคุณเป็นเจ้าของธุรกิจจำหน่ายสินค้า เคยไหม? ที่ต้องเดินเช็คของทุก 30 นาที หรือทุกๆครึ่งชั่วโมง เพื่อตรวจสอบสินค้าว่ามีเพียงพอสำหรับการจำหน่ายแก่ลูกค้าหรือไม่
- จะเป็นไปได้หรือไม่ ถ้าจะมีระบบช่วยแจ้งเตือนจำนวนสินค้าที่ใกล้จะหมด ให้กับพนักงานในร้านค้า
- แข่งขันเพื่อสร้างและพัฒนาระบบปัญญาประดิษฐ์สำหรับระบุจำนวนสินค้าบนชั้นวางของ
Data
Train Set เป็น Video ~ 15 File ; File ละ 45 ถึง 90 นาที โดยจะเป็นภาพจากกล้อง Video ที่ถ่ายไปยังตู้แช่เช่นเดียวกับภาพตัวอย่าง
ที่น่าสนใจคือ หลายๆ Video ตำแหน่งของกล้องเป็นคนละมุมกัน (น่าจะมาจากคนละร้าน ) และจำนวนแถวอาจจะไม่ตรงกัน เช่น Video A มีน้ำสิงห์ 3 แถว Video B อาจจะมี น้ำสิงห์ 6 แถวได้
Test Set เป็น File Image 50 ภาพ โดยจะให้มาในภายหลัง (กลัวว่ามีคนนั่งนับส่ง)
Naive Solution
ในเมื่อโจทย์ “ต้องการระบุจำนวนสินค้า” ที่วางบนชั้นวางของ เราสามารถมั่นใจได้ ว่า โจทย์นี้เป็น Object Detection อย่างแน่นอน
แต่สังเกตว่า เราไม่สามารถนับว่ามีสินค้าเท่าไหร่ได้ตรงๆ เนื่องจากสินค้าวางซ้อนกัน บางครั้งอาจจะเห็นแค่สินค้าที่วางข้างหน้าสุดเท่านั้น
เมื่อจินตนาการไปถึงเวลาที่เราเข้าไปใน Super Market หรือ 7/11 สังเกตได้ว่า สินค้ามักจะวางอยู่เต็ม(หรือเกือบเต็ม) เสมอ เนื่องจากมีพนักงานเติมอยู่ตลอด
เมื่อคิดอย่างไร้เดียงสา(Naive)ที่สุดแล้ว จาก Data ที่ให้ความลึกของ Shelf และ รัศมีของ Product เราสามารถคำนวณได้ว่า “Product A 1 แถว จะมี Product A nชิ้น ”
เมื่อเราทราบว่า มี Product A m แถว เราจะสามารถทราบได้ว่า มี Product A n*m ชิ้น
เมื่อลองตรวจ Data ดู พบว่า เมื่อสินค้าหายไปเพียง 4–5 ชิ้น ก็มักจะมีพนักงานมาเติมแล้ว ซึ่งถูกต้องตามสมมุติฐานข้างต้น
โดยการที่สินค้าหายไป 4–5 ชิ้น เทียบกับสินค้าที่นับถูกประมาณ 100–150 ชิ้น คิดเป็น Accuracy ประมาณ 95% ซึ่งถือว่าเป็น Accuracy ที่ดีมากสำหรับ Naive Solution
Pipeline แรก สำหรับโจทย์ข้อนี้จึงเป็น “Product A1 — A10 มีชนิดละกี่แถว?”
Labeling Policy
ปัญหา Labeling ที่มักจะเกิดขึ้นคือ เราไม่ได้วางนโยบาย(Policy) ที่ดีพอ ส่งผลให้ Data ที่แต่ละคน Label มา มีลักษณะไม่เหมือนกัน ซึ่งถ้า Model ไป Train อาจจะเกิดปัญหาได้ ( Garbage in , Garbage out )
ซึ่ง Policy ที่ทีมวางไว้คือ
- Label เฉพาะขวดที่เห็นเต็มๆ ข้างหน้าสุด
- ถ้าขวดแรกถูกหยิบไป ให้ Label ขวดที่ 2 ( ในกรณีนี้ จะเห็นแบบเต็มขวด เพราะไม่มีขวดที่วางข้างหน้า )
โดยไม่รู้ตัวเลยว่า Policy ที่วางไว้โดยไม่ละเอียดพอ จะทำให้เกิดปัญหาในภายหลัง
รู้จักกับ “เครื่องมือสร้าง Annotations” (Annotation tools)
เพราะ Object Detection เป็นการหาว่า “Object ที่สนใจ อยู่ส่วนไหนของภาพ” Label(คำตอบ) ของ Object Detection ย่อมเป็น “ตำแหน่ง X,Y ของมุมทั้ง 4 ของ Object ที่สนใจ”
ถ้าคำตอบของ Image Classification เรียกว่า “Label” เราจะเรียกคำตอบของ Object Detection ว่า “Annotations”
ปัจจุบัน เครื่องมือในการสร้าง Annotations มีอยู่หลายตัวเช่นกัน ที่ถูกพูดถึงมากที่สุด คงจะเป็น labelme ที่ เล็ก , ติดตั้งได้ง่าย , ทำงานได้หลายระบบปฏิบัติการ
เพื่อป้องกันความยุ่งยาก เมื่อมีการ Labeling มากกว่า 1 คน ทั้งเรื่องการแจกจ่ายงาน การรวมไฟล์ที่ Label แล้ว ทางทีมจึงตัดสินใจที่จะใช้ CVAT ซึ่งเป็น Online Annotations Tools
ปัญหาของการ Labeling Data
เนื่องจาก สมาชิกมี 5 คน แบ่งกันคนละ 300 Images , 1 Images มี 30 Instances+ (นับจากภาพตัวอย่าง) สรุป 1 คนทำ Annotations 9,000 Instances
1 Annotations ใช้เวลาไวที่สุดคือ 2 วินาที สมมุติว่าทำได้ด้วยความเร็วแบบไม่มีตกเลย ต้องใช้ 18,000 วินาที หรือ 5 ชั่วโมง/คน
นี่มัน Hackathon หรือคำสาปแห่งซิซีฟิส (Sisyphus) ทางทีมจึงเสนอ ลดงานเหลือ 1/2 (ราวๆ 750 Images ) ซึ่งแน่นอนว่า ทุกคนในทีมเห็นพ้องต้องกัน
ซึ่งกรณีนี้ แต่ละภาพใน Train Set มีหน้าตาใกล้เคียงกันมาก (มาจาก Video เพียง 15 File หมายความว่ามีอย่างมากที่สุด 15 มุมกล้อง ) การจะ Train ภาพที่ใกล้เคียงกันมากๆ อาจไม่มีความจำเป็นขนาดนั้น การลด Train Images ลงครึ่งนึง จึงดูเป็นเหตุผลที่รับได้
อย่างไรก็ดี การ Label อย่างต่อเนื่อง 2.5 ชั่วโมง ก็ยังเป็นงานที่ค่อนข้างหนัก โชคดี CVAT มีเครื่องมือที่ชื่อ “Propagate” ที่สามารถ “ส่งต่อ” Annotations ของภาพหนึ่งๆ ไปภาพอื่นได้
ด้วยวิธีดังกล่าว สามารถลดเวลา Label เหลือแค่ประมาณ 1 ชม. เท่านั้น (งานลดลง แต่ท้ายที่สุด ต้องใช้เวลาในการตรวจเช็คผลลัพท์ของการ Propagate)
บทส่งท้าย
ผ่านมาครึ่งทางแล้วกับบทความนี้ สังเกตว่ายังไม่มีการพูดถึง Model ที่ใช้เลย (ไม่มีแม้แต่การ Coding) ซึ่งจริงๆแล้ว การตั้งคำถาม , การคิดวิธีในการแก้ไขปัญหา , การจัดการ Data (Pre-process) นั้นสำคัญไม่แพ้การสร้าง Model หรือ Coding เลย
หลังจาก Naive Solution แล้ว ทีม Deep Sec จะใช้วิธีการใด , ใช้ Model ตัวใด สามารถติดตามได้ในบทความต่อไปนะครับ
ส่วนเพื่อนๆที่สนใจโครงการนี้ ในวันนี้(7/30/2021) ทางโครงการ True Lab Startup Sandbox ได้มีการรับสมัครรุ่นที่ 2 แล้ว ซึ่งคราวนี้ มีในธีม Business Analytics สามารถฟอร์มทีมแล้วเริ่มสมัครกันได้เลย สามารถอ่านรายละเอียดเพิ่มเติมได้ที่ https://bit.ly/3wUkPQW
หรือทาง Fanpage https://www.facebook.com/TrueDigitalPark
Ref
YOLO Format https://github.com/AlexeyAB/Yolo_mark/issues/60
LabelMe https://github.com/wkentaro/labelme
YOLOV5 ,Tips for Best Training Results https://github.com/ultralytics/yolov5/wiki/Tips-for-Best-Training-Results
Sisyphus https://en.wikipedia.org/wiki/Sisyphus