DEV Community

Jidapa Klinsanga
Jidapa Klinsanga

Posted on

การค้นหาภาพด้วยโมเดล Contrastive Language-Image Pre-Training (CLIP)

OpenAI ได้เปิดตัวโมเดลที่ใช้การเทรนจากรูปภาพและข้อความควบคู่กันไปซึ่งจะแตกต่างจากโมเดลตัวอื่นๆ ที่CLIP สามารถหาสิ่งที่ผู้ใช้ต้องการได้แม้ผู้ใช้งานจะไม่ได้ใช้คำที่หมายถึงสิ่งนั้นๆ โดยตรง เพราะการทำงานของมันคือการแปลงข้อมูลทั้งสองที่ใช้เทรนนั้นทั้งรูปและข้อความนั้นมาแปลงให้กลายเป็น shared embedding space ในส่วนที่มีคอนเซ็ปร่วมหรือเหมือนกัน

บทความนี้จะมาแสดงตัวอย่าในการค้นหารูปภาพที่มีค่า Vector ตรงหรือใกล้เคียงกับข้อความที่มอบคำสั่งไว้ด้วยวิธี Sentence Transformer ผ่านตัวโมเดล CLIP ใน Python ผ่านการทำงานทุกขั้นตอนใน Google Colab แหล่ง dataset ที่ใช้นั้นนำมาจาก Unsplash Dataset Lite โดยมีdataset ทั้งหมดถึง 25k

โดย Sentence Transformer คือ โครงสร้างการทำงานของ Python ที่ใช้ในการแปลงข้อความ ประโยคและรูปภาพให้เป็นตัวเลขและอยู่ในรูปแบบของ Vector


ขั้นตอนการทำ

ขั้นที่ 1: ทำการติดตั้ง Sentence Transformer

Image description

ขั้นที่ 2: นำเข้า libraries ที่ต้องใช้พร้อมกับโหลด CLIP โมเดลเข้ามาโดยใช้ Sentence Transformer
ในขั้นตอนนี้โมเดลจะถูกดาวน์โหลดโดยอัตโนมัติ โมเดล CLIP ที่ใช้ในงานนี้คือ ViT-B-32 สามารถใช้คำสั่ง clip.available_models() เพื่อดูโมเดลตัวอื่นๆ ของ CLIP ที่สามารถใช้งานได้เช่นกัน

Image description

ขั้นที่ 3: โหลดข้อมูลชุดรูปภาพลง Google Colab
ใน Code นี้จะมีคำสั่งนำเข้าข้อมูลเข้ามาอัตโนมัติหากไม่ได้ดาวน์โหลดไว้มาตั้งแต่แรก
สามารถดูหรือดาวน์โหลดชุด dataset ได้ที่ HERE

Image description
เมื่อนำเข้าเสร็จสิ้นจะแสดงให้เห็นจำนวนชุด dataset ทั้งหมดดังนี้

Image description

ขั้นที่4: ทำการคำนวณค่า Embeddings
ในขั้นตอนนี้ได้ใช้วิธี Destribute pre-computed เพื่อให้การคำนวณรวดเร็วยิ่งขึ้น

Image description

เลขที่ได้จะเป็นชุดข้อมูลทั้งหมดหลังจากทำ Embeddings

Image description

ขั้นที่5: ทำการสร้าง Function สำหรับ Search

Image description

ขั้นที่6: ทดสอบการใช้งานและความแม่นยำของโมเดลด้วยคำสั่ง search
search("...")

ตัวอย่างการใช้งานและผลลัพธ์ที่ได้ :

Image description

Image description

Image description

Image description

สรุปผล

การค้นหาภาพด้วยโมเดล Contrastive Language-Image Pre-Training (CLIP) นั้นสามารถคำนวณและให้ผลลัพธ์ที่แม่นยำและมีประสิทธิภาพ ใช้เวลาในการคำนวณน้อยแม้จะไม่ได้ Prompt คำสั่งกับสิ่งที่ต้องการค้นหาโดยตรงดังตัวอย่างแรก CLIP จึงเป็นเหมือนแนวทางการสร้างโมเดลเพื่อการค้นหาและจำแนกประเภทข้อความ ประโยคและรูปภาพให้มีประสิทธิภาพและความแม่นยำมากยิ่งขึ้นด้วยวิธีการที่ตัวของโมเดลนั้นใช้ข้อความและรูปภาพในการเทรนไปควบคู่กัน

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

ข้อมูลจาก/Dataset

https://openai.com/research/clip
https://github.com/openai/CLIP
https://unsplash.com/data

Top comments (0)