BACK (Blind All Can Know) Action Captioning

CHOTIWAT TANGSATHAPHORN
5 min readJun 21, 2022

ในบทความนี้ เราจะมาพูดถึงว่า BACK — Action Captioning ทำงานอย่างไร และที่มาที่ไปคืออะไร?

แต่ก่อนอื่นสามารถดูรายละเอียดงานได้ที่

GitHub ไว้สำหรับดูตัวโค้ดฉบับเต็ม

ลองเล่นจริง

สไลด์ประกอบนำเสนองาน: PDF, Powerpoint

อย่างแรกเราต้องมารู้จักกับ Machine Learning กันก่อน

เปรียบเทียบ AI ML DL

Machine Learning หรือว่า ML เป็นสับเซตของ AI หรือ Artificial Intelligence (ปัญญาประดิษฐ์) อีกทีหนึ่ง

ซึ่ง ML เป็นส่วนของการเรียนรู้ เปรียบเสมือนเป็นสมองของ AI

โดย ML จะเรียนรู้สิ่งต่าง ๆ จากสิ่งที่กำหนดเข้าไปให้ อย่างเช่น เราจะรู้ว่า 1+1 เท่ากับเท่าไร เราก็ต้องเรียนรู้กฎว่า การบวกคืออะไรก่อนนั่นเอง

ส่วนของ DL จะเป็นสับเซตย่อยไปอีกทีหนึ่ง โดยก็คือ ML ที่เรียนรู้กฎด้วยตัวเอง อย่างเช่น การนำคำตัดสินของศาลมาสร้างเป็นกฎหมาย นั่นเอง

เรื่องของการทำ AI นั้น เรื่องของ “ข้อมูล” ถือว่าสำคัญมาก ๆ

ราคา Bitcoin ใน 1 วัน

จากภาพ คำถามคือ ทิศทางในอนาคตต่อไปของราคา Bitcoin จะเป็นอย่างไร

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

มาดูอีกที่ตัวอย่างกัน

ราคา Bitcoin ใน 1 ปี

จากภาพ คำถามคือ ทิศทางในอนาคตต่อไปของราคา Bitcoin จะเป็นอย่างไร

คำตอบคือ มีแนวโน้มที่จะลดต่ำลงไปอีก

ราคา Bitcoin ใน 1 ปี (ซูม)

เหตุผลที่คาดการณ์เช่นนั้นเพราะ กราฟ มีแน้วโน้มที่จะลดต่ำลงอย่างต่อเนื่อง

เปรียบเสมือนการทำ ML โดยโมเดลจะทำนายผลออกมาได้อย่างแม่นยำนั้น ก็จำเป็นจะต้องมีข้อมูลที่เยอะด้วย ถึงจะสามารถคาดการณ์ได้ใกล้เคียงความเป็นจริง เหมือนกับกราฟข้างต้น

แต่ ๆ ข้อมูลเยอะอย่างเดียวไม่ได้นะ แต่ต้องมีคุณภาพที่ดีด้วย!

ทำไมต้องมีคุณภาพที่ดี? เดี๋ยวเราจะค่อย ๆ อธิบายในหัวข้อถัดไป

ทีนี้ต่อไปเรามาดูกันที่ว่า เหตุใดถึงต้องทำโมเดลนี้ขึ้นมาด้วย?

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

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

ซึ่งเมื่อได้ยินเสียง ก็ต้องนำมาบวกกับจินตนาการเพื่อให้เข้าใจสิ่งนั้น ๆ ได้ แต่ว่าการแค่ฟังเสียงอย่่างเดียว อาจทำให้การจินตนาการภาพนั้น พิดเพี้ยนไปจากความเป็นจริงได้

เราจึงได้ทำการพัฒนา Model BACK นี้ขึ้นมา เพื่อช่วยเหลือผู้พิการทางสายตา ให้สามารถรับรู้ได้ว่า ภาพที่อยู่ตรงหน้ากำลังเกิดอะไรขึ้นบ้าง

ตอนนี้เราก็รู้ถึงความหมายของ AI ML DL และที่มาของโพรเจกต์นี้แล้ว เดี๋ยวเราไปเริ่มเนื้อหาจริงจังกันเลยดีกว่า

ข้อมูลที่เราจะใช้ในการทำโมเดลเป็นอย่างไรกันนะ?

เราเลือกที่จะใช้ Dataset Flickr 30k ในการเทรนโมเดล

ถามว่าเหตุใดจึงใช้ Dataset นี้ในการเทรน คำตอบก็คือ รูปและคำบรรยายของชุดข้อมูลนี้ เป็นไปตามวัตถุประสงค์ที่เราต้องการเลยนั่นเอง นั่นคือ การบรรยายท่าทางการกระทำ (Action Captioning)

ตัวอย่างรูปใน Dataset นี้

Two young African American boys sitting at a desk in a classroom .

พูดมาก็ดูเหมือนจะดี แต่เราก็ยังมีตัวเลือกให้ผู้ใช้ได้ใช้อีก 1 ตัว นั่นก็คือ COCO Dataset นั่นเอง

โดย COCO ข้อดีของมันคือ มีจำนวนรูปเยอะมาก ๆ ถึง 123K กันเลยทีเดียว (แซงหน้า Flickr ไปไกลเลย)

แต่ว่า COCO นั้น จะเน้นไปที่การทำนายว่ารูปนั้นคืออะไร มากกว่าการที่มาบอกว่า คนในรูปนั้นกำลังทำอะไร

เพราะรูปภาพของ COCO นั้น มีทั้งเป็น คน สัตว์ สิ่งของ แต่ว่า Flickr จะเน้นไปที่การกระทำของคนนั่นเอง

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

ทีนี้เรามาดูตารางเปรียบเทียบข้อดี — ข้อเสียของ Flickr Dataset กันบ้างดีกว่า

ตารางเปรียบเทียบข้อดีข้อเสียของ Flickr Dataset

ทีนี้ เราวิเคราะห์เองคนเดียวมันก็ยังไง ๆ อยู่ เรามาดูกันที่ Feedback กันดีกว่า

โดยเราได้ทำการเก็บข้อมูลสอบถามความเห็นของตัวโมเดลมาจำนวน 36 คน (เยอะมากเลยฮือ ส่งไปในกลุ่ม 300 กว่าคน ได้ข้อมูลมา 36 คน T^T)

สังเกตได้ว่า ส่วนใหญ่ในพาร์ตของการบรรยายการกระทำ คนจะชื่นชอบ Flickr มากกว่า

และในส่วนของการนำไปใช้จริง จะสังเกตเห็นได้ว่า คนส่วนใหญ่มองว่าสามารถนำไปใช้ได้จริง (1 คือ ใช้ไม่ได้เลย 5 คือ ใช้ได้จริง)

P.S. การเปรียบเทียบต่าง ๆ มีขึ้นเพื่อวัดผลประเมินโมเดล และเปรียบเทียบ โดยใช้ COCO Dataset (มีอยู่แล้ว) เป็นตัวตั้งต้น และวัดผลตัวโมเดลที่เราทำเอง (Flickr 30K)

จากคะแนนก็ยิ้มกรุ้มกริ่มได้อยู่ เพราะ Flickr ก็ได้คะแนนเยอะกว่า COCO (หมายความว่านำไปใช้ในการอธิบายท่าทางได้ค่อนข้างดีเลยทีเดียว เมื่อเทียบกับ COCO)

ทีนี้เราก็ทำความเข้าใจเกี่ยวกับชุดข้อมูลของเราแล้ว ทีนี้เรามาเริ่มทำการจัดการข้อมูลของเรา ให้มันดูสวยงามอลังปังปุกันดีกว่า (หมายถึง ให้มันใช้งานได้อ่ะนะ เหอะ ๆ)

เมื่อเราดาวน์โหลดชุดข้อมูล Flickr มาแล้ว พบว่า Folder ซ้ำกัน (จะใส่ซ้ำทำไม ง_ง)

เราก็แค่ลบมันออกไปซะ ก็สิ้นเรื่อง

เย้ สะอาดแล้ว!

แต่มันก็ยังไม่จบ เมื่อมาเปิดดูไฟล์ คำบรรยาย

ช็อกไปเลยสิ ยิ่งกว่าปลากระป๋องไปอีกนะเนี่ย! (พูดแล้วก็หิวแห้ะ 🤤)

เราก็นำไฟล์ csv นี้ ไปจัดการแบ่งเป็น column โดยใช้ | เป็นตัวคั่นซะ แค่นี้ก็สิ้นเรื่อง

เย้ สะอาดแล้ว!

แค่นี้ข้อมูลของเราก็สะอาดเอี่ยมอ่อง เหมือนทารกเกิดใหม่แล้ว เย้ 🥳

เราได้ข้อมูลแล้ว เราไปทำโมเดลกันดีกว่า ขั้นตอนจริงจังแล้วนะ เตรียมใจอ่านให้ดี ๆ เพราะเข้าใจง่ายมากกกกก (มั้ง 🙄)

การทำโมเดล

โดยโมเดลของเราจะใช้ตัวของ Pre-trained Model ที่มีชื่อว่า CLIP (Contrastive Language–Image Pre-training)

โดย CLIP จะเป็น Contrastive Learning หรือถ้าให้พูดง่าย ๆ คือการเรียนรู้แบบไม่ต้องกำหนด label นั่นเอง

กล่าวคือ เรียนรู้โดยพยายามใช้ตัวเองเป็น Model

อย่างเช่นรูปหมีนี้ แทนที่จะมีคำกำกับให้ว่านี่คือ “หมี” มันก็จะพยายามใช้รูปนี้เป็นบรรทัดฐานว่า สิ่งนี้คือสิ่งนี้ (หาความใกล้เคียงกันให้มากที่สุด)

ผลที่ได้จากการเรียนรู้โดยใช้ตัวเองเป็น label จะสังเกตได้ว่าได้ประสิทธิภาพสูงกว่าการกำหนด label

ป.ล. เลขด้านซ้ายคือการกำหนด label เลขด้านขวาคือไม่กำหนด label

ทีนี้ในส่วนของการทำนายผลคำบรรยายออกมา เราก็จะใช้ GPT2 เข้ามาช่วย (Pre-trained Model ที่เกี่ยวข้องกับการเรียบเรียงภาษา)

โดยเมื่อคาดเดาได้ 1 คำ และตัวมันเองมั่นใจแล้ว มันถึงจะอ้างอิงคำที่ได้แล้ว 1 คำ มาใช้ในการสร้างคำต่อไป

เช่น ได้คำว่า A มา มันก็จะค่อย ๆ เดาว่า dog หรือ cat ดี พอมันมั่นใจว่า cat มันก็จะยึดคำว่า cat มาสร้างต่อ โดยเดาต่อว่า sleep หรือ awake ดี และก็จะทำอย่่างนี้ไปเรื่อย ๆ

โอเค เข้าใจยากเหลือเกิน โอเอ็มจี กันเลยทีเดียว

ทีนี้เรารู้จักตัว Pre-trained Model ที่เราจะนำมาใช้งานกันแล้ว เรามาทำ Model ออกมากันเลยดีกว่า วู้ฮู้ว!

ขั้นตอนการทำโมเดล

เป็นแผนภาพที่เข้าใจง่ายจริม ๆ อัดแน่นเป็นปลากระป๋องเลย

ไฟล์ JSON มีไว้ทำอะไร: เราก็มีไว้อัดแน่น ชื่อไฟล์ กับ คำบรรยายไว้ (จับคู่กันไว้ จะได้ไม่พัดพรากจากกัน)

ไฟล์ PKL มีไว้ทำอะไร: มีการ CLIP Embedding ไปแล้ว หรือถ้าให้พูดง่าย ๆ คือ จัด format ตามที่ CLIP ต้องการแล้วนั่นเอง

ที่เหลือก็นำไฟล์ PKL ไปเทรน โดยเราทำไปทั้งหมด 10 epochs (กินเวลาไปตั้ง 17 ชั่วโมงแน่ะ) จนได้ไฟล์ pt ออกมาแล้ว!

ไฟล์ PT มีไว้ทำอะไร: ก็เป็นไฟล์ขั้นสุดท้ายในการใช้งานแล้วนั่นเอง Load ตัวนี้แล้วก็สร้างคำบรรยายได้เลย!

ป.ล. epoch คือจำนวนรอบในการเทรน โดยจากข้อมูลทั้งหมดที่เรามี มี 150K คำบรรยาย มันก็จะเรียนรู้จนครบ 150K คำบรรยาย นับเป็น 1 epoch และก็จะเรียนรู้เพิ่มเติมเรื่อย ๆ เพื่อให้ผิดพลาดน้อยลงนั่นเอง

นอกจากนี้ เรายังแปลภาษาให้ด้วยนะ

ภาษาไทยเราจะเน้นไปที่ PyThaiNLP เพราะมีความใกล้เคียงกับสิ่งที่เราพูดในชีวิตประจำวันมากกว่า Google Translate

การแปลภาษาโดย PyThaiNLP

แต่ก็ใช่ว่าจะทิ้ง Google Translate นะ เราก็ยังคงมันไว้ โดยสามารถพาน้องไปดัดแปลงเป็นภาษาอื่นได้ด้วย

การแปลภาษายูเครนโดย Google Translate

เลือกใช้งานกันให้เหมาะสม ชีวิตก็จะแฮปปี้!

ทีนี้แล้วใครเป็นคนตัดสินล่ะ ว่า PyThaiNLP หรือ Google Translate อันไหนดีกว่ากัน?

เราก็ต้องให้ผู้ชมทางบ้านร่วมตอบคำถามกันเข้ามานั่นเอง!!

แหม่ นิยม PyThaiNLP กับ Google Translate กันครึ่ง ๆ เลยนะ ก็ต้องบอกว่าทั้งคู่มีจุดแข็ง-จุดอ่อนต่างกัน น่ะนะ

โอเค เราทำโมเดลอะไรกันเสร็จเรียบร้อยแล้ว เราไปดูกันที่ผลลัพธ์กันดีกว่า!

ผลลัพธ์ที่ได้เป็นไปตามที่หวังไหมนะ?

ต้องบอกว่าการเทรนโมเดล เรื่องของความผิดพลาดในการทำนายเกิดขึ้นได้เป็นประจำ จาก cat เป็น dog อะไรอย่างนี้

แต่สิ่งที่เราเจอมัน เอิ่ม…. ให้ภาพเล่าเรื่องละกัน

5555 อะไรกันนี่ ซ้ำตั้งหลายรอบ

แนวทางการแก้ไขที่ 1 ใช้ beam search ตามบทความนี้

แต่เราใช้วิธีที่ 1 ไม่ได้ผล

ทีนี้เมื่อเรามาดูที่ข้อมูลที่ส่งกลับมา

มันอยู่ใน list เดียวจบเลย และก็เป็นประโยค ๆ ไป ซึ่งแต่ละประโยคก็จะตัดจบที่ มหัพภาค

ดังนั้น วิธีที่ 2 ใช้ประโยชน์จาก มหัพภาค!

โอเค คั่นด้วยมหัพภาคเรียบร้อย เอาแค่ประโยคแรกพอ ที่เหลือตัดทิ้งไป

มาดูผลลัพธ์กันดีกว่า

เยี่ยมยอด ดูเป็นคนปกติแล้ว!!

ตอนนี้สามารถไปลองเล่นกันได้นะ

เข้าไปดูได้ที่: 13.229.128.67

แต่ย้ำก่อนเลย ใจเย็น ๆ มันอาจจะรอนานนิดนึงนะ รอมันประมวลผลหน่อย😘

ขอขอบพระคุณทุกท่านที่ยอมอ่านจนจบครับ หวังว่าจะได้ความรู้กลับไปไม่เล็กก็น้อย🤗

SOURCE

Chris Velazco. (2022, May 19). Coming soon to a phone near you: A new wave of accessibility tools. Retrieved June 17, 2022, from https://www.washingtonpost.com/technology/2022/05/19/ios-16-android-13-accessibility-blind-deaf-features/

CLIP: Connecting Text and Images. (2021, Jan 5). Retrieved June 17, 2022, from https://openai.com/blog/clip/

Mark Smith. (2022, March 10). Bionic eyes: How tech is replacing lost vision. Retrieved June 17, 2022, from https://www.livescience.com/bionic-eye

Matana Wiboonyasake. (2022, Mar 15). Machine Learning คืออะไร?. Retrieved June 17, 2022, from https://www.aware.co.th/machine-learning-คืออะไร

--

--