Sinir ağları - En çok benzer görselleri bulun


11

Python, scikit-learn ve keras ile çalışıyorum. Aşağıdakiler gibi 3000 binlerce ön yüzlü saat resmim var: Watch_1 , Watch_2 , Watch_3 .

Yukarıdaki fotoğraflardan daha az ideal koşullarda (farklı arka plan rengi, daha koyu yıldırım vb.) Alınan gerçek bir saatin fotoğrafını girdi olarak alan bir program yazmak ve 3000 saat arasında en benzer saatleri bulmak istiyorum. Benzerlikle, bir girdi olarak ince dantelli yuvarlak, kahverengi bir saatin fotoğrafını verirsem, yuvarlak şekilli, koyu renkli ve ince dantelli bir çıkış saatleri olarak bekliyorum.

Bunu yapmak için en verimli makine öğrenme algoritması nedir?

Örneğin, bu bağlantıyı takip ederek aklımda iki farklı çözüm var:

1) Bir CNN'yi özellik çıkarıcı olarak kullanmak ve bu görüntüler arasındaki mesafeleri giriş görüntüsüne referansla her görüntü çifti için karşılaştırın.

2) Siyam Sinir Ağında iki CNN kullanarak görüntüleri karşılaştırmak.

Bu iki seçenek bu görev için en iyi seçenek mi yoksa başka bir şey önerir misiniz?

Bu görev için önceden eğitilmiş sinir ağı (önceden belirlenmiş hiperparametrelerle) biliyor musunuz?

Bu konuda StackOverflow üzerinde bazı ilginç mesajlar buldum ama oldukça eski: Post_1 , Post_2 , Post_3 .


Siteye Hoşgeldiniz! Gömme hakkında bilgi edinin ( bin bit hızında hızlı bir şekilde geri almak için ikili bir karma öneririm ) sonra benzerlik araması yapın.
Emre

Burada olmak benim için bir zevktir ... haha! ... Evet, bu iyi bir fikir ve bu makaleyi zaten okumuştum ...
Outcast

Yanıtlar:


4

Yüksek seviyeli bir mimarinin en uygun olduğunu düşünmüyorum, ancak birçok faktöre ve ayrıntıya bağlı. İlk yaklaşımın farkında olduğumdan özellikle TiefVision'da yapılan ek adımlarla genişletildiğinde umut vericidir :

  1. Görüntünün ilgili kısmını diğerlerinden ayırmak için ek bir sınırlama kutusu ağı kullanılır
  2. Özellik vektörleri doğrudan karşılaştırılmakla kalmaz, daha çok üçüzler kullanarak bir karşılaştırma ağını eğitmek için kullanılır (daha fazla benzer örnek için özellik vektörlerine ve örneklere dayalı benzerliği öğrenme).

Bu çalışma, yayınladığınızdan çok daha yeni (2016/17) ve güzel bir araç seti ve daha ayrıntılı bir kağıtla birlikte geliyor .

Neden Deeplets olarak üçüz kullanıyorsunuz?

Yorumlarda belirtildiği gibi: Neden özellik vektörlerini öğrenmek ve mesafelerini hesaplamak yerine görüntü benzerliği için üçüz kullanılmalıdır? Üçüzler, temel olarak benzerlikle ilgilenmeyen özellik vektörlerini öğrenmek yerine benzerlik sorusunu bir öğrenme problemi olarak formüle etmenin bir yoludur. Bu yaklaşım, özellikle makine algısından farklı olabilecek insan tarafından algılanan benzerliğin önemli olduğu durumlarda anlamlıdır.

Üçüzler şu şekilde çalışır: 3 görüntü sağlarsınız. Biri ile karşılaştırılacak, biri benzer (yakın) ve diğeri çok benzer (uzak) görüntü. Bu eğitim / test / doğrulama verilerinizdir. Ağınızı bu örnekler üzerinde eğitmek ve genel olarak doğru sırayı tahmin etmek (benzer olmayan görüntülerden benzer şekilde sınıflandırmak) ağın görüntüleri benzerliklerine göre nasıl sipariş vereceğini öğrenmesini sağlar.

Sonuç olarak bu yaklaşım nispeten karmaşıktır. Değişim gerektirmiş olabilir, ancak siz de bunu yapmanın en iyi yolunu istediniz ve Deep Ranking çok yüksek hassasiyet değerleri elde ediyor.


Cevabınız için teşekkürler. Bu ilginç bir tane (bunu iptal ettim). Üçüzle ilgili fikir, görüntü üçüzlerinin kullanılmasının neden görevim için görüntü çiftlerini kullanmaktan daha iyi olduğundan emin olmasam da iyi. Eğer isterseniz, yazınızda daha fazla açıklama yapabilirsiniz. Ayrıca TiefVision'a bir göz atacağım.
Dışarıda

@Universalis ipucu için teşekkürler (ve upvote). Cevabımı üçüz ve akıl yürütme hakkında daha fazla ayrıntıyla güncelledim. Kağıt da çok iyi yazılmış, bu yüzden tüm detaylara bir göz atın. Yine de TiefVision ve DeepRanking ortaya çıktığından bunu yapmanın yeni süslü yolları olabilir.
Gegenwind

Yanıtınız için tekrar teşekkürler. Evet, gazeteye bir göz attım ve cevabınıza neler eklediğiniz konusunda oldukça netti. Bu anlamda, cevabınızı neleri eklediğinizi zaten anlamıştım ve sorum daha açıktı: neden görüntüleri benzerliklerine göre sıralamak için 3 görüntü (üçlü) yerine 2 görüntü (bir çift) kullanmıyorsunuz? Çiftler yerine üçüz kullanmanın ek yararı nedir?
Outcast

Hmm belki yaklaşımını yanlış anladım. Üçlü, görüntü 1'in görüntü 2'ye görüntü 3'ten daha yakın olduğu hakkında karşılaştırmalı bilgi sağlar. Sadece 2 görüntüye sahip olmak ve "bu 2'nin benzer olduğunu" belirtmek "ne açıdan benzer" karşılaştırmalı bir faktörden yoksundur, çünkü bu yaklaşımda düz mesafenin özellik vektörü yeterli değil. diğer bir deyişle: Siparişe göre benzerliği öğrenirsiniz ve sipariş için en az 2 eşyaya sahip olmadan bunu yaparsınız.
Gegenwind

Yanıtınız için tekrar teşekkür ederim. Ancak, şimdi ve biraz daha dikkatli bir şekilde okuduktan sonra bile, bu denetimsiz yaklaşım için neden üçüze ve görüntü çiftine ihtiyacınız olduğu açık değildir. Etiketleri kullanırken, üçüzleri kullanarak, çiftlerle elde edemediğiniz görüntülerin tam benzerlik derecesine sahip olacağınız açıktır. Ancak bu (bir çeşit) denetimsiz yaklaşımda, o zaman neden her bir görüntü çifti için kayıp fonksiyonunun değerlerini (her zaman çiftin bir görüntüsü giriş görüntüsüdür) karşılaştırmak için neden karşılaştırmıyorsunuz? girdi resmi?
Dışarıda

2

Imagenet sınıflarında iyi çalışan VGG-16 gibi bir sınıflandırıcı seçerdim. Ardından saat görüntülerinizi içinden geçirin. Elbette, çıktının yüksek olasılıkla çoğunlukla "izlemesini" bekleyebilirsiniz.

Bununla birlikte, ekstra özellikler elde edersiniz: diğer tüm kategorilerin aktivasyon seviyesi. Bu, 0 ile 1 arasında bin değere sahip bir vektör verir.

Etkinleştirmeyi ağdaki çeşitli noktalardan da ayıklayabilirsiniz. Daha sonra bu aktivasyonların ve çıktıların benzerliği, ancak görüntüler benzer olduğunda iki durum arasında benzer olmalıdır.


Yanıtınız için teşekkür ederiz. Evet, bunu aklımda tuttum ve bir anlamda görevimde verdiğim ilk seçenekle ilgili. Ayrıca SURF gibi diğer dedektörler kullanılarak düşünüyordum Yani bunlar yeterince başarılı olup olmadığını ... Ben ... göreceksiniz
dışlanmış

2

Önce veri artırmaya odaklanırdım. Resimleriniz beyaz bir arka plana sahip olduğundan biraz daha kolay. Beyaz arka planı saydam bir arka plana dönüştürün, görüntüyü ölçeklendirin, döndürün ve hedef verilerinize benzer arka planlara yerleştirin.

Bunu farklı kombinasyonlarla birkaç kez yapın ve her saat için bir etiket bulundurun. O zaman sınıflandırma için düzenli bir evrişimli sinir ağı kullanmanızı öneririm. Her etiketin bir puanı olacak, en yüksek güvene sahip olanı seçin ve en benzer olanı seçin .

Örneğin, sınıflandırıcıyı bir resimle çalıştırdığınızı ve bu sonucu aldığınızı varsayalım:

Watch1: 0.51

Watch2: 0.30

Watch3: 0.25

CNN, Watch1'in giriş görüntüsündeki saat olduğuna% 51 güven duyduğunu söylüyor. Ama aynı zamanda doğru olan, daha benzer göründüğünü düşündüğü şeydir, Watch2 bir sonraki benzer ve benzeri olacaktır.

İyi sonuçlar alamıyorsanız, her zamanki gibi yapın. Parametreleri deneyin ve / veya daha fazla katman ekleyin. Nerede başarısız olduğunu bulmaya çalışın. Bu kavrayışa sahip olduktan sonra, probleminiz için daha özel bir evrişim ağı türü seçmek için kullanabilirsiniz. Bunu nasıl yapacağına dair önceden bilgi sahibi olmadan aramak doğru bir yaklaşım değildir. Temel bir evrişimsel modelle başlayıp oradan çalışmanızı öneririm.


1
Yanıtınız için teşekkür ederiz. Evet, zaten zihnimde veri artırımı yaptım. Bununla birlikte, yanıtınız oldukça belirsizdir. "Her saat için bir etikete sahip olmak" ne demek? Her bir saati, tek tek mi etiketlemeniz veya benzer olup olmamalarına bağlı olarak başka bir saatle eşleştirmek mi demek istediniz? (Bu eski ise bu verimli lütfen neden o zaman açıklamak)
dışlanmış

Bu eski öneri, zaten hepsini etiketlemek için kullanışlı bir yolun olduğunu varsayıyordum. Bu temelde en temel çözümdür, bu yüzden verimli olmayacaktır. Benim önerim, temel modelin belki de size daha uzmanlaşmış bir modeli kovalamanız için yeterli bilgi verebilmesiydi. @Gegenwind'in dediği gibi derin bir sıralamaya bakmak çok umut verici görünüyor. Cevabımı biraz daha açık hale getirmek için güncelledim.
zimio

Hm, evet şimdi ne demek istediğini daha açık .... Bu kesinlikle iyi bir genel öneri: temel bilgilerle başla ve daha karmaşık şeyler için adım adım ilerle ... Her durumda teşekkürler ...
Dışında
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.