https://journal.uinjkt.ac.id/files/ https://desaininterior.darmajaya.ac.id/wallpaper/ https://cbtspmb1.unesa.ac.id/sikat/ https://bpsdm.pu.go.id/phpmyadmin/terbang/ https://asset.inaba.ac.id/pacarzeus/ http://webuildapps.comvigo.com/
Image Captioning บน Kaggle TPU และ Keras-TF2 ! – ชมรม Kaggle ประเทศไทย – ThAI Keras Forum
Notifications
Clear all

Image Captioning บน Kaggle TPU และ Keras-TF2 !

1 ข้อความ
1 Users
0 Likes
15.8 K Views
The Neural Engineer
(@neural-engineer)
Honorable Member Admin
เข้าร่วมเมื่อ: 7 years ago
ข้อความ: 403
Topic starter  

Image Captioning บน Kaggle TPU และ Keras-TF2!!

ThaiKeras 22 พค. 2563

 

สวัสดีครับเพื่อนๆ โมเดล “Image Captioning” หรือโมเดลที่ทำหน้าที่เรียนรู้ความหมายจากรูปภาพและถ่ายทอดออกมาเป็นประโยคในภาษามนุษย์ (เรียกว่า captions) เป็นโมเดลที่ผมชอบมากๆ ตั้งแต่ตอนเริ่มศึกษา Deep Learning

 

ที่ชอบมากๆ เนื่องจากเป็นโมเดล Deep Learning แรกๆ ในกลุ่มที่เรียกว่า “Visio-Linguistic” ที่ต้องรวมพลังของ Computer Vision และ NLP เข้าไว้ด้วยกัน เพราะต้องเข้าใจทั้งความหมายต่างๆ ของรูปภาพ รวมทั้งยังต้องเข้าใจโครงสร้างภาษาในคราวเดียวกันเพื่อสร้างข้อความขึ้นมาอธิบายรูป

 

Encoder-Decoder Model

ไอเดียของ Image Captioning โมเดลนั้นอยู่ในกลุ่มที่เรียกว่า Encoder-Decoder นั่นคือจะประกอบไปด้วยโมเดลย่อยสองส่วน โดยใน Image Captioning นี้โมเดลแรก “encoder” จะทำหน้าที่แปลความหมายของรูปภาพให้อยู่ในรูปเวกเตอร์ทางคณิตศาสตร์ ในขณะที่โมเดล “decoder” นั้นจะทำหน้าที่ถอดความหมายที่ซ่อนอยู่ในเวกเตอร์ทางคณิตศาสตร์ ให้ออกมาในรูปคำบรรยายบนตัวหนังสือในภาษาอังกฤษครับ

 

ใน image captioning โมเดล Encoder นั้นคือ CNN (Convolution Neural Networks) ส่วน Decoder นั้นคือ RNN (Recurrent Neural Networks) ซึ่งสามารถศึกษาเพิ่มเติมได้จาก workshops บน ThaiKeras ที่ผ่านมาครับ : http://bit.ly/thaikeras-workshops

 

 เกร็ดเล็กเกร็ดน้อยโมเดล Encoder-Decoder นั้น general มากๆ ประยุกต์ใช้งานที่สำคัญได้อีกมาก เช่น งานด้าน แปลภาษา(machine translation) ได้ก็เป็นอีกตัวอย่างของโมเดลนี้ โดยเราเพียงปรับ image captioning ให้ Encoder ทำหน้าที่เข้าใจภาษาต้นฉบับเป็นเวกเตอร์ทางคณิตศาสตร์แทนที่จะเป็นรูปภาพ เท่านี้เราก็จะได้โมเดลใหม่ทันที

 

เนื่องจากการสร้างโมเดล Encoder-Decoder นั้นมีการเตรียมข้อมูลสอนที่ค่อนข้างซับซ้อนพอสมควร ตอนที่เริ่มเข้ามาฝึกใช้ Kaggle ใหม่ๆ ผมพยายามหาตัวอย่าง Image Captioning ดีดี แต่ก็ไม่มีตัวอย่างที่ผลลัพธ์ได้มาตรฐานเลย จนกระทั่งเพิ่งมาพบกับตัวอย่าง Official ของ Tensorflow  เมื่อปีก่อน (อ้างอิง 1) ที่เราสามารถรันบน Colab หรือ Kaggle ได้

 

โดย tutorial บน tensorflow นี้ดีมากๆ เนื่องจากเพิ่มความสามารถของ Encoder-Decoder model ขึ้นไปอีกขั้นด้วยเทคนิกสำคัญมากๆ ของ Deep Learning ที่เรียกว่า Attention (ดูอ้างอิง 2)

 

อย่างไรก็ดีเนื่องจากงาน image captioning นั้นต้องใช้ computational resources ในการฝึกสอนมหาศาล ทำให้ด้วย resources บน colab หรือ kaggle นั้น เราสามารถใช้ training examples ได้เพียงราวๆ 1-2หมื่น คู่ image-captions เท่านั้น และยังต้องใช้เวลาฝึกสอนหลายชั่วโมง นอกจากนี้ผลลัพธ์ที่ได้ ก็แค่พอใช้ (บรรยายภาพ ผิดๆ แบบไร้วี่แววถูกหลายจุด) ทั้งนี้เป็นเพราะจำนวน training data น้อยเกินไปนั่นเอง

 

เกมส์เปลี่ยนด้วยพลังของ TF2 + TPU

ไม่นานมานี้ มีข่าวดีมากๆ ถึงสองข่าว โดยข่าวแรกก็คือ Kaggle นั้นอนุญาตให้พวกเราสามารถใช้ TPU (Tensor-Processing Units) ได้ฟรีถึง 30 ชม. ต่อสัปดาห์โดยเจ้า TPU รุ่นใหม่ล่าสุดตัวนี้แรงกว่า GPU P100 ตัวเก่า (ที่ก็ดีมากอยู่แล้ว) ราว 10-20 เท่า!!! นั่นทำให้คนธรรมดาอย่างเราๆ สามารถรันงานขนาดใหญ่ได้ภายในเวลาอันรวดเร็วบน Kaggle ครับ และนั่นก็ทำให้ผมลองกลับมาสนใจเจ้าโมเดล Image Captioning อีกครั้ง

 

อย่างไรก็ดี เดิมทีนั้นการเขียนโปรแกรมบน TPU นั้นค่อนข้างยากและมีรายละเอียดที่ต่างจาก GPU เยอะมากๆ แต่ข่าวดีที่สองก็คือ Tensorflow เวอร์ชั่น 2 (เรียกว่า TF2) ที่สนับสนุน Keras อย่างเป็นทางการนั้น ได้ทำให้การเขียนโปรแกรมด้วย TPU นั้นง่ายขึ้นมากๆ  โดยเฉพาะถ้าเราสร้างโมเดลด้วย Keras ด้วย API ปกติแล้วนั้น โค้ดแทบจะไม่ต่างอะไรจากโค้ดบน CPU/GPU เลยครับ

 

ดังนั้นผมจึงนำ Tutorial Image Captioning ของ Tensorflow มาปรับปรุงใหม่ให้ใช้งาน TPU ได้ ปรับปรุง Input Pipeline ใหม่ให้รองรับ input มากกว่าเวอร์ชั่นเดิมเกือบ 10 เท่า (ราวๆ 150,000 คู่ภาพ-คำบรรยาย) รวมทั้งเพิ่ม data augmentation เข้าไปด้วย นอกจากนี้เรายังปรับใช้โมเดลฝั่ง image ที่ดีที่สุดคือ EfficientNet ใน Encoder และเพิ่ม Glove pretrained word-vectors เข้าไปในฝั่ง Decoder เพื่อเพิ่มคุณภาพของ Captions ไปอีกขั้นครับ

ซึ่งทั้งหมดนี้ด้วยพลังของ TPU ทำให้เราสามารถสอนโมเดลได้เสร็จในเวลาเพียง 1-2 ชม. เท่านั้น!

 

ใน tutorial นี้เราจะสอนโมเดลด้วย Custom training loop ซึ่งจะซับซ้อนกว่าการใช้ Keras model.fit หนึ่งขั้น และต้องปรับโค้ดจาก GPU มาเป็น TPU ขึ้นอีกสเต็ปครับ

 

ถ้าเพื่อนๆ อยากลองเล่นงาน Image Captioning สามารถเข้ามาทดลองเล่นได้ฟรีทันทีที่ Kaggle ที่นี่ครับ ในโน้ตบุ้คนี้เป็นฉบับภาษาอังกฤษ อย่างไรก็ดีถ้าเพื่อนๆ มีจุดไหนอยากสอบถามเพิ่มเติมสามารถสอบถามได้ครับ

https://www.kaggle.com/ratthachat/flickr-image-captioning-tpu-tf2-glove

 

ถ้าใครยังไม่คุ้นเคยกับ Kaggel ทำความรู้จักได้ที่นี่ครับ

http://bit.ly/thaikeras-kaggle-setup

 

อ้างอิง

  1. Official TF2 image captioning tutorial ปรับโค้ดเพื่อรันบน Kaggle : https://www.kaggle.com/ratthachat/image-captioning-by-effnet-attention-in-tf2-1
  2. รู้จัก attention และ transformers : http://bit.ly/thaikeras-medium-transformer
This topic was modified 5 years ago 3 times by The Neural Engineer

   
อ้างอิง
Share: