การค้นหาภาพด้วยโมเดล Contrastive Language-Image Pre-Training (CLIP)
Tags: python, ai, machinelearning
Published: 2024-04-14 11:46:57

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

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

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

---




## ขั้นตอนการทำ
**<u>ขั้นที่ 1: ทำการติดตั้ง Sentence Transformer </u>**

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9w7ozrk2h35f5u6vauwz.png)

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

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7rlnb1gjqhd1j6da55xu.png)

<u>ขั้นที่ 3: โหลดข้อมูลชุดรูปภาพลง Google Colab</u>
ใน Code นี้จะมีคำสั่งนำเข้าข้อมูลเข้ามาอัตโนมัติหากไม่ได้ดาวน์โหลดไว้มาตั้งแต่แรก
สามารถดูหรือดาวน์โหลดชุด dataset ได้ที่ [HERE](https://unsplash.com/data)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6rf740u0d582r4yjqco4.png)
เมื่อนำเข้าเสร็จสิ้นจะแสดงให้เห็นจำนวนชุด dataset ทั้งหมดดังนี้

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jkgt16f76n7h7s1uorq5.png)

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

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ize3vjr0o3creiziu5i9.png)

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

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nslpbe0panuz2mk27r36.png)

**<u>ขั้นที่5: ทำการสร้าง Function สำหรับ Search</u>**

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fngyrexg5m6kmo15gwg9.png)

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

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

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2u88an0ijdaeti51jl20.png)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ozfa42cjp1c2zbhyug94.png)





![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c15caep0o7a0jds1udtn.png)



![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/aghrshihlecvy2c90a6l.png)






**สรุปผล**

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

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

**ข้อมูลจาก/Dataset**

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