โครงข่ายประสาท - ค้นหาภาพที่คล้ายกันมากที่สุด


11

ฉันกำลังทำงานกับ Python, scikit-learn และ keras ฉันมี 3000 พันภาพของนาฬิกาหน้าต้องเผชิญเช่นคนต่อไปนี้: Watch_1 , Watch_2 , Watch_3

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

อัลกอริทึมการเรียนรู้ของเครื่องที่มีประสิทธิภาพที่สุดในการทำเช่นนี้คืออะไร?

ตัวอย่างเช่นโดยไปที่ลิงค์นี้ฉันมีสองโซลูชั่นที่แตกต่างกันในใจของฉัน:

1) ใช้ CNN เป็นตัวแยกคุณลักษณะและเปรียบเทียบระยะห่างระหว่างคุณลักษณะเหล่านี้สำหรับทุกคู่ของรูปภาพที่อ้างอิงถึงภาพอินพุต

2) ใช้ CNN สองตัวในเครือข่ายประสาทสยามเพื่อเปรียบเทียบภาพ

ตัวเลือกทั้งสองนี้เป็นตัวเลือกที่ดีที่สุดสำหรับงานนี้หรือคุณจะแนะนำอย่างอื่นหรือไม่?

คุณรู้จักโครงข่ายประสาทเทียมที่ได้รับการฝึกอบรมมาก่อน (พร้อมพารามิเตอร์ไฮเปอร์พารามิเตอร์) สำหรับงานนี้หรือไม่?

ฉันได้พบโพสต์ที่น่าสนใจบางใน StackOverflow เกี่ยวกับเรื่องนี้ แต่พวกเขามีความเก่าแก่สวย: Post_1 , Post_2 , Post_3


ยินดีต้อนรับสู่เว็บไซต์! เรียนรู้การฝัง (ฉันขอแนะนำแฮ็กไบนารีสำหรับการดึงข้อมูลอย่างรวดเร็วตามลำดับของหนึ่งพันบิต) จากนั้นทำการค้นหาที่คล้ายคลึงกัน
เอ็ม

มันเป็นความสุขของฉันที่จะอยู่ที่นี่ ... ฮ่าฮ่า! ... ใช่นี่เป็นความคิดที่ดีและฉันได้อ่านบทความนี้แล้ว ...
Outcast

คำตอบ:


4

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

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

งานนี้เป็นจำนวนมากเมื่อเร็ว ๆ นี้ (2016/17) กว่าสิ่งที่คุณโพสต์และมาพร้อมกับชุดเครื่องมือที่ดีและรายละเอียดเพิ่มเติมกระดาษ

ทำไมต้องใช้ triplets aka Deep Ranking

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

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

ทั้งหมดนี้เป็นวิธีการที่ค่อนข้างซับซ้อน มันอาจจะถูก overengineered แต่คุณขอวิธีที่ดีที่สุดในการทำเช่นนี้และ Deep Ranking จะได้รับค่าความแม่นยำสูงมาก


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

@Universalis ขอบคุณสำหรับคำใบ้ (และ upvote) ฉันอัพเดตคำตอบของฉันพร้อมรายละเอียดเพิ่มเติมเกี่ยวกับทริปเปิลและการให้เหตุผล กระดาษเขียนได้ดีมากดังนั้นจึงต้องดูรายละเอียดทั้งหมด อาจมีวิธีแฟนซีใหม่ในการทำเช่นนี้ตั้งแต่ TiefVision และ DeepRanking ขึ้นมา
Gegenwind

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

บางทีฉันอาจเข้าใจผิดวิธีการของคุณ triplet ให้ข้อมูลเปรียบเทียบว่าภาพ 1 ใกล้เคียงกับภาพ 2 มากกว่าภาพ 3 มีเพียง 2 ภาพและระบุว่า "ทั้งสองนี้คล้ายกัน" ไม่มีปัจจัยเปรียบเทียบ "คล้ายกันในแง่ใด" เพราะในวิธีนี้คุณถือว่าระยะทางธรรมดา ของคุณลักษณะเวกเตอร์ไม่ได้บอกคุณเพียงพอ ในคำอื่น ๆ : คุณเรียนรู้ความคล้ายคลึงกันตามคำสั่งและคุณขาดสิ่งนั้นโดยไม่ต้องมีอย่างน้อย 2 รายการที่จะสั่ง
Gegenwind

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

2

ฉันจะเลือกลักษณนามเช่น VGG-16 ที่ใช้งานได้ดีกับคลาส imagenet จากนั้นเรียกใช้ภาพการรับชมของคุณผ่านมัน แน่นอนคุณสามารถคาดหวังได้ว่าผลผลิตจะ "เฝ้าดู" ส่วนใหญ่ที่มีความน่าจะเป็นสูง

อย่างไรก็ตามคุณจะได้รับคุณสมบัติพิเศษ: ระดับการเปิดใช้งานของหมวดหมู่อื่น ๆ ทั้งหมด นั่นให้เวกเตอร์หนึ่งพันค่าระหว่าง 0 ถึง 1

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


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

2

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

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

ตัวอย่างเช่นสมมติว่าคุณเรียกใช้ตัวจําแนกด้วยภาพและรับผลลัพธ์นี้:

Watch1: 0.51

Watch2: 0.30

Watch3: 0.25

CNN บอกว่ามีความมั่นใจ 51% ว่า Watch1 เป็นนาฬิกาในภาพอินพุต แต่สิ่งที่เป็นจริงก็คือมันเป็นสิ่งที่คิดว่ามีลักษณะคล้ายกันมากขึ้น Watch2 จะเป็นรุ่นถัดไปที่คล้ายกันมากขึ้นเรื่อย ๆ

หากคุณไม่ได้ผลลัพธ์ที่ดีให้ทำตามปกติ ทดลองกับพารามิเตอร์และ / หรือเพิ่มเลเยอร์เพิ่มเติม ลองค้นหาว่ามันล้มเหลวที่ไหน หลังจากที่คุณมีความเข้าใจอย่างถ่องแท้แล้วคุณสามารถใช้มันเพื่อเลือกเครือข่าย convolutional ประเภทพิเศษสำหรับปัญหาเฉพาะของคุณ การค้นหาสิ่งนั้นโดยปราศจากความรู้ล่วงหน้าว่ามันจะทำงานได้อย่างไรไม่ใช่แนวทางที่ถูกต้อง ฉันขอแนะนำให้คุณเริ่มต้นด้วยรูปแบบการสนทนาพื้นฐานแล้วทำงานจากที่นั่น


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

มันเป็นข้อเสนอแนะในอดีตฉันคิดว่าคุณมีวิธีที่สะดวกในการติดป้ายทั้งหมดของพวกเขา นี่เป็นวิธีพื้นฐานที่สุดดังนั้นจึงไม่มีประสิทธิภาพ ข้อเสนอแนะของฉันคือรูปแบบพื้นฐานอาจให้ข้อมูลที่เพียงพอแก่คุณในการไล่ล่าแบบเฉพาะทางมากขึ้น การมองอันดับที่ลึกดูเหมือนสัญญามาก @Gegenwind พูด ฉันได้อัปเดตคำตอบเพื่อให้ชัดเจนขึ้น
zimio

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