Google ใช้อัลกอริทึมสำหรับไซต์ "ค้นหาภาพ" อย่างไร


45

อะไรคือสิ่งที่คุณคาดเดาได้ดีว่า Google Image Search ทำงานอย่างไร ฉันสามารถอัปโหลดภาพถ่ายและสามารถค้นหาภาพที่คล้ายกันได้ อัลกอริทึมใดที่ใช้ระบุรูปภาพที่คล้ายกัน


พวกเขาอาจเก็บฮิสโตแกรมของภาพ สิ่งนี้ใช้ได้กับสเกลที่แตกต่างกันของภาพเดียวกันและความแตกต่างเล็กน้อยเนื่องจากสิ่งประดิษฐ์การบีบอัดหรืออะไรก็ตาม
ฮีเลียม

1
ฮิสโทแกรมจะไม่บันทึกข้อมูลเชิงพื้นที่ คุณจะได้รับการแข่งขันที่ผิดพลาด
เอ็ม

เครือข่ายประสาท: research.googleblog.com/2015/06/…
endolith

คำตอบ:


29

ฉันไม่รู้ว่าอัลกอริทึมใดที่ Google ใช้ แต่เนื่องจากคุณอยากเดาที่ดีที่สุดให้ฉันให้ความคิดบางอย่างเกี่ยวกับวิธีการที่ระบบที่คล้ายกันจะสร้าง

ที่เกี่ยวข้องทั้งสนามด้วยการค้นหาภาพฐานโดยภาพที่เรียกว่าเนื้อหาตามภาพที่ดึง (CBIR) ความคิดคือการอย่างใดสร้างการแสดงภาพ (ไม่จำเป็นต้องเข้าใจโดยมนุษย์) ที่มีข้อมูลเกี่ยวกับเนื้อหาภาพ

มีวิธีพื้นฐานสองประการ:

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

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

ในงานที่ใหม่กว่าตัวบอกพื้นที่จะถูกจัดกลุ่มก่อนแล้วจึงจัดกลุ่มให้เป็นคำที่มองเห็น - เทคนิคนั้นคล้ายกับการค้นหาเอกสารของ Google แต่ใช้คำที่มองเห็นแทนคำที่เป็นตัวอักษร

คุณสามารถนึกถึงคำที่มองเห็นได้ว่าเทียบเท่ากับรูตคำในภาษา: ตัวอย่างเช่นคำว่างานที่ทำงานและที่ทำงานอยู่ทั้งหมดเป็นของรูตคำเดียวกัน

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

ฉันได้รับคำตอบแล้วและเห็นคำตอบมากมายเกี่ยวกับวิธีการเหล่านี้ดังนั้นฉันจะให้ลิงก์ไปยังคำตอบเหล่านั้น:

  • CBIR: 1 , 2
  • การแยก / คำอธิบายคุณลักษณะ: 1 , 2 , 3 , 4

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

ขณะนี้ฉันกำลังอยู่ระหว่างการค้นคว้าวิธีการเหล่านี้ฉันไม่สามารถหาข้อสรุปใด ๆ ได้ ตอนนี้ที่กล่าวว่าฉันอธิบายความคิดทั่วไปที่อยู่เบื้องหลังเทคนิคเหล่านี้ในคำตอบนี้

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

นี่คือการอ้างอิงบางส่วนสำหรับการแสดงต้นไม้ที่แตกต่างกัน ฉันไม่ได้อ่านทั้งหมดและบางคนใช้การเป็นตัวแทนประเภทนี้เพื่อแบ่งกลุ่มแทน CBIR แต่ถึงอย่างนั้นพวกเขาก็คือ:


22

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

การรับรู้การคร่ำครวญ

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

ในรูปแบบพื้นฐานที่สุดคุณสามารถใช้สิ่งต่อไปนี้:

  1. แปลงภาพเป็นโทนสีเทา

  2. ทำให้ภาพของคุณเป็นศูนย์หมายความว่า

  3. บดขยี้รูปภาพของคุณให้มีขนาดเล็กลงให้พูด [32x32]
  4. เรียกใช้การแปลงโคไซน์ไม่ต่อเนื่องสองมิติ
  5. รักษามุมซ้ายบน [8 x 8] ซึ่งเป็นส่วนประกอบความถี่ต่ำที่สำคัญที่สุด
  6. สร้างบล็อกขึ้นอยู่กับเครื่องหมายของส่วนประกอบ

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

hashing การรับรู้จะดำเนินการโดยตัวอย่างเช่นphash

รูปแบบของคำถุง

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

ในรูปแบบที่ง่ายที่สุดส่วนใหญ่สามารถทำได้ด้วยภาพดังต่อไปนี้:

  1. ปรับใช้คุณสมบัติ SIFT ที่เรียกว่าตัวอย่างเช่นการใช้ไลบรารี่ vlfeat ที่ยอดเยี่ยมซึ่งจะตรวจจับจุดฟีเจอร์ SIFT และ SIFT descriptor ต่อจุด ตัวอธิบายนี้นั้นเป็นเทมเพลตที่สร้างขึ้นอย่างชาญฉลาดของแพทช์ภาพโดยรอบจุดคุณลักษณะ คำอธิบายเหล่านี้เป็นคำที่คุณพูดถึง
  2. รวบรวมคำอธิบาย SIFT สำหรับรูปภาพที่เกี่ยวข้องทั้งหมด

ตอนนี้คุณมีชุดคำอธิบาย SIFT จำนวนมาก ปัญหาคือว่าแม้จากภาพที่เหมือนกันเกือบจะมีความไม่ตรงกันระหว่าง descriptors คุณต้องการจัดกลุ่มคำที่เหมือนกันให้มากขึ้นหรือน้อยลงเช่นปฏิบัติกับคำบางคำเช่น "dog" และ "Dogs" เหมือนกันและคุณต้องชดเชยข้อผิดพลาด นี่คือที่มากลุ่มในการเล่น

  1. ใช้คำอธิบาย SIFT ทั้งหมดและทำคลัสเตอร์ตัวอย่างเช่นด้วยอัลกอริทึมเช่น k-mean นี่จะหาจำนวนคลัสเตอร์ที่กำหนดไว้ล่วงหน้าที่มีเซนทรอยด์ในข้อมูลตัวอธิบายของคุณ เซนทรอยด์เหล่านี้เป็นคำศัพท์ใหม่ของคุณ
  2. ทีนี้ต่อภาพและตัวอธิบายต้นฉบับที่ค้นพบแล้วคุณสามารถดูกระจุกของคำอธิบายเหล่านี้ได้รับมอบหมาย จากนี้คุณจะรู้ว่าเซนทรอยด์หรือคำว่า 'อยู่' ในภาพของคุณ เซนทรอยด์หรือคำที่มองเห็นเหล่านี้กลายเป็นตัวบ่งชี้ความหมายแบบใหม่ของภาพของคุณซึ่งสามารถเก็บไว้ในไฟล์กลับด้าน

แบบสอบถามรูปภาพเช่นหาฉันภาพที่คล้ายกับแบบสอบถามภาพได้รับการแก้ไขแล้วดังนี้

  1. ค้นหาคะแนน SIFT และ descriptors ในรูปภาพแบบสอบถาม
  2. กำหนด descriptor แบบสอบถามให้กับ centroids ที่คุณพบก่อนหน้านี้ในขั้นตอนการลงทะเบียน ตอนนี้คุณมีชุดเซนทรอยด์หรือคำที่เป็นภาพที่เกี่ยวข้องกับภาพคิวรีของคุณ
  3. จับคู่คำที่มองเห็นได้กับคำที่มองเห็นในไฟล์ inverted ของคุณและส่งคืนรูปภาพที่ตรงกัน

1
วิธีถุงของคำพูดของคุณนั้นเป็นสิ่งที่เชื่อมโยงของฉันสำหรับวิธีการ "ท้องถิ่น" นำไปสู่ :) แม้ว่ามันจะไม่ได้จริงๆความหมายในธรรมชาติ: คุณจะไม่เป็นตัวแทนของสุนัขที่เดียวที่มีคุณสมบัติอย่างใดอย่างหนึ่งหรือมันจะเป็นที่ง่ายต่อการระบุ เครื่องเทศสุนัขที่แตกต่างกันเช่นสุนัข แต่การรับรู้การรับรู้เป็นสิ่งที่ดีไม่รู้เกี่ยวกับสิ่งนั้น คำอธิบายที่ดี สิ่งใดที่ทำให้ฉันคิดว่า ... คุณจะมีข้อเสนอแนะใด ๆ วิธีการใช้เทคนิคนั้นกับพื้นที่ที่ไม่ใช่รูปสี่เหลี่ยมผืนผ้า? หรืออาจอ้างอิงบทความบางบทความฉันสามารถอ่านได้เล็กน้อยและหากคำถามมีเหตุผลให้เปิดเป็นคำถามแยกต่างหาก
Penelope

1
@ penelope ฉันอ่านบทความจริงมาหลายปีแล้วที่ผู้เขียนแบ่งภาพเป็นรูปสามเหลี่ยมโดยพลการ และมีการแปลงรอยซึ่งใช้เป็นพื้นฐานสำหรับการรับรู้แบบแฮช ฉันจะกลับไปหาคุณ.
Maurits

ทุกสิ่งที่ฉันต้องการถามคุณเกี่ยวกับเรื่องนี้อยู่นอกเหนือขอบเขตของคำถามนี้ดังนั้นฉันจึงเปิดใหม่ข้อมูลเพิ่มเติมใด ๆ / การอ้างอิงเกี่ยวกับเทคนิคพื้นฐานจะยังคงดีเช่นกันไม่ว่าจะอยู่ในคำตอบนี้หรืออย่างใดอย่างหนึ่ง มองไปข้างหน้า :)
penelope

2

วิธีการที่น่าสนใจอื่น ๆ ซึ่งดูเหมือนว่าจะไม่สนใจคำตอบข้างต้นคือ Deep Convolutional Neural Networks ดูเหมือนว่า Google กำลังใช้งานเครื่องมือค้นหารูปภาพและบริการแปลภาษาอยู่ในขณะนี้ ซีเอ็นเอ็นนั้นมีพลังอย่างมากในงานด้านการเรียนรู้เช่นการค้นหาความคล้ายคลึงกันดูเหมือนว่าซีเอ็นเอ็นจะดำเนินการตามขั้นตอนที่คล้ายคลึงกันของ Bag-of-worlds ซึ่งฝังอยู่ในเลเยอร์เครือข่าย ข้อเสียของเทคนิคนี้คือไม่สามารถเรียนรู้และต้องการชุดข้อมูลขนาดใหญ่สำหรับการฝึกอบรมและค่าใช้จ่ายในการคำนวณที่หนักหน่วงในขั้นตอนการฝึกอบรม

ข้อเสนอแนะเกี่ยวกับเรื่องนี้:

และการใช้งานการดึงภาพการเรียนรู้ลึกโอเพนซอร์ซ (รายงานฉบับหลัง): https://github.com/paucarre/tiefvision

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.