True Lab Startup Sandbox Ep.1

Hackathon , Naive Solution and Labeling

Pawut Jingjit
Super AI Engineer
4 min readJul 30, 2021

--

ภาพประกอบสวยๆจาก Mr.Kim สมาชิกทีม Deepsec

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 นาที หรือทุกๆครึ่งชั่วโมง เพื่อตรวจสอบสินค้าว่ามีเพียงพอสำหรับการจำหน่ายแก่ลูกค้าหรือไม่
  • จะเป็นไปได้หรือไม่ ถ้าจะมีระบบช่วยแจ้งเตือนจำนวนสินค้าที่ใกล้จะหมด ให้กับพนักงานในร้านค้า
  • แข่งขันเพื่อสร้างและพัฒนาระบบปัญญาประดิษฐ์สำหรับระบุจำนวนสินค้าบนชั้นวางของ
ภาพตัวอย่าง เป็นตู้แช่ของ 7/11 (เอ้ะ หรือ BIG-C)
รายละเอียดของ Shelf & Product

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 อย่างแน่นอน

ใครยังไม่ทราบความแตกต่างระหว่าง Image Classification vs. Object Detection vs. Image Segmentation ต้องไปอ่าน Medium นี้ก่อน

แต่สังเกตว่า เราไม่สามารถนับว่ามีสินค้าเท่าไหร่ได้ตรงๆ เนื่องจากสินค้าวางซ้อนกัน บางครั้งอาจจะเห็นแค่สินค้าที่วางข้างหน้าสุดเท่านั้น

เมื่อจินตนาการไปถึงเวลาที่เราเข้าไปใน 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 ชิ้น อย่างไรก็ดี ก็มีบางภาพที่หายไปเป็น 10–20ชิ้น แต่ยังถือเป็นส่วนน้อยของภาพทั้งหมด และอย่างที่บอกข้างต้น จำนวนแถวในแต่ละ supermarket อาจจะไม่เท่ากันได้

โดยการที่สินค้าหายไป 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 ที่สนใจ”

ตัวอย่าง YOLO format : ชนิดของ <object-class> , <x> ,<y> <width> <height> สังเกตว่า อาจจะไม่ใช่ 4 มุมตรงๆ แต่เป็นค่าที่แสดงถึง 4 มุมของ Object นั้นๆได้

ถ้าคำตอบของ Image Classification เรียกว่า “Label” เราจะเรียกคำตอบของ Object Detection ว่า “Annotations”

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

เพื่อป้องกันความยุ่งยาก เมื่อมีการ Labeling มากกว่า 1 คน ทั้งเรื่องการแจกจ่ายงาน การรวมไฟล์ที่ Label แล้ว ทางทีมจึงตัดสินใจที่จะใช้ CVAT ซึ่งเป็น Online Annotations Tools

ใช้ CVAT เพราะเซิร์ซ google ขึ้นชื่อแรก // จริงๆคือเป็น Tools ที่เขาแนะนำใน Super AI แต่จริงๆ Tools ไหนก็ทำงานได้ใกล้เคียงกันนะ

ปัญหาของการ Labeling Data

Tips for Best Training Results จาก YOLOV5 ต้องใช้มากกว่า 1500 Images per class , 10000 instances per class

เนื่องจาก สมาชิกมี 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 ลงครึ่งนึง จึงดูเป็นเหตุผลที่รับได้

ซิซีฟัส (Sisyphus) ผู้ถูกฮาเดสลงโทษ ให้กลิ้งก้อนหินก้อนใหญ่ขึ้นไปบนยอดเขาทาร์ทารัส แล้วกลิ้งลงมาทับเขาอีก และยังถูกบังคับให้กลิ้งหินขึ้นไปอีกเป็นอย่างนี้ไม่มีที่สิ้นสุด

อย่างไรก็ดี การ Label อย่างต่อเนื่อง 2.5 ชั่วโมง ก็ยังเป็นงานที่ค่อนข้างหนัก โชคดี CVAT มีเครื่องมือที่ชื่อ “Propagate” ที่สามารถ “ส่งต่อ” Annotations ของภาพหนึ่งๆ ไปภาพอื่นได้

แทนที่จะ Annotations 30 ขวด ในภาพขวามือ เราสามารถ ใช้ Annotations ของภาพ ซ้าย แล้วแก้ขวดในวงแดง แค่ 3–4 ขวดแทนได้

ด้วยวิธีดังกล่าว สามารถลดเวลา 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

เพื่อนๆคนใด มีแผนธุรกิจในใจอยู่แล้ว สามารถจับมือกับสหาย Data Analyst แล้วสมัครโครงการนี้ได้เลย เจ้าของบทความมองว่า ได้มีโอกาสทดสอบว่าแผนธุรกิจของตัวเองเจ๋งพอไหม เอาแผนมาให้ผู้เชี่ยวชาญสับเล่นๆก็คุ้มแล้ว ได้ทำโจทย์สนุกๆ นอกจากนี้ยังได้ Connection ดีๆในงานอีกด้วย

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

https://www.facebook.com/TrueDigitalPark

https://medium.com/analytics-vidhya/image-classification-vs-object-detection-vs-image-segmentation-f36db85fe81

--

--