Tiefes Ranking für den Vergleich zweier Bilder

Hallo Habr! Ich präsentiere Ihnen die Übersetzung des Artikels Bildähnlichkeit mit Deep Ranking“ von Akarsh Zingade.

Deep-Ranking-Algorithmus


Das Konzept der " Ähnlichkeit der beiden Bilder " wurde nicht eingeführt, daher wollen wir dieses Konzept zumindest im Rahmen des Artikels einführen.

Die Ähnlichkeit zweier Bilder ergibt sich aus dem Vergleich zweier Bilder nach bestimmten Kriterien. Sein quantitatives Maß bestimmt den Ähnlichkeitsgrad zwischen den Intensitätsdiagrammen zweier Bilder. Unter Verwendung eines Ähnlichkeitsmaßes werden einige Merkmale, die die Bilder beschreiben, verglichen. Als Maß für die Ähnlichkeit die Hamming-Distanz, die euklidische Distanz, die Manhattan-Distanz usw.

Deep Ranking - Untersucht die feinkörnige Bildähnlichkeit und charakterisiert das feinteilige Bildähnlichkeitsverhältnis mithilfe eines Satzes von Tripletts.

Was ist ein Triplett?


Das Triplett enthält das Anforderungsbild, das positive und das negative Bild. Wo ein positives Bild eher einem Anforderungsbild als einem negativen ähnelt.

Ein Beispiel für eine Reihe von Drillingen:

Bild

Die erste, zweite und dritte Zeile entspricht dem Bild der Anfrage. Die zweite Zeile (positive Bilder) ähnelt eher Anforderungsbildern als die dritte (negative Bilder).

Deep Ranking Netzwerkarchitektur


Das Netzwerk besteht aus 3 Teilen: Triplett-Abtastung, ConvNet und einer Rangfolge.
Das Netzwerk akzeptiert Tripletts von Bildern als Eingabe. Ein Bildtriplett enthält ein Anforderungsbild $ inline $ p_i $ inline $ positives Bild $ inline $ p_i ^ + $ inline $ und negatives Bild $ inline $ p_i ^ - $ inline $ die unabhängig voneinander an drei identische tiefe neuronale Netze übertragen werden.

Die oberste Rangschicht - bewertet die Triplettverlustfunktion. Dieser Fehler wird in den unteren Schichten korrigiert, um die Verlustfunktion zu minimieren.
Bild

Schauen wir uns nun die mittlere Schicht genauer an:

Bild

ConvNet kann ein beliebiges tiefes neuronales Netzwerk sein (in diesem Artikel wird eine der Implementierungen des Faltungs-neuronalen Netzwerks VGG16 erläutert). ConvNet enthält Faltungsschichten, eine maximale Poolschicht, lokale Normalisierungsschichten und vollständig verbundene Schichten.
Die anderen beiden Teile empfangen Bilder mit einer reduzierten Abtastrate und führen die Faltungsstufe und das maximale Pooling durch. Dann findet die Normalisierungsstufe der drei Teile statt und am Ende werden sie mit einer linearen Schicht mit anschließender Normalisierung kombiniert.

Triplettbildung


Es gibt verschiedene Möglichkeiten, eine Triplett-Datei zu erstellen, z. B. eine Expertenbewertung. In diesem Artikel wird jedoch der folgende Algorithmus verwendet:

  1. Jedes Bild in der Klasse bildet ein Anforderungsbild.
  2. Jedes Bild mit Ausnahme des Anforderungsbildes bildet ein positives Bild. Sie können jedoch die Anzahl der positiven Bilder für jede Bildanforderung begrenzen
  3. Ein negatives Bild wird zufällig aus einer Klasse ausgewählt, die keine Anforderungsbildklasse ist

Triplettverlustfunktion


Ziel ist es, eine Funktion zu trainieren, die den ähnlichsten Bildern einen kleinen und den verschiedenen Bildern einen großen Abstand zuweist. Dies kann ausgedrückt werden als:
Bild
Wobei l der Verlustkoeffizient für Tripletts ist, ist g der Spaltkoeffizient zwischen dem Abstand zwischen zwei Bildpaaren: $ inline $ p_i $ inline $ , $ inline $ p_i ^ + $ inline $ ) und ( $ inline $ p_i $ inline $ , $ inline $ p_i ^ - $ inline $ ), f - Einbettungsfunktion, die das Bild in einem Vektor anzeigt, $ inline $ p_i $ inline $ Ist das Bild der Anfrage, $ inline $ p_i ^ + $ inline $ Ist ein positives Bild, $ inline $ p_i ^ - $ inline $ Ist ein negatives Bild und D ist der euklidische Abstand zwischen zwei euklidischen Punkten.

Implementierung eines Deep Ranking-Algorithmus


Implementierung mit Keras.

Drei parallele Netzwerke werden für Abfragen, positive und negative Bilder verwendet.

Die Implementierung besteht aus drei Hauptteilen:

  1. Implementierung von drei parallelen mehrskaligen neuronalen Netzen
  2. Implementierung der Verlustfunktion
  3. Triplett-Erzeugung

Das Erlernen von drei parallelen tiefen Netzwerken verbraucht viel Speicher. Anstelle von drei parallelen tiefen Netzwerken, die ein Anforderungsbild, ein positives und ein negatives Bild empfangen, werden diese Bilder nacheinander einem tiefen neuronalen Netzwerk am Eingang eines neuronalen Netzwerks zugeführt. Der auf die Verlustschicht übertragene Tensor enthält in jeder Zeile einen Bildanhang. Jede Zeile entspricht jedem Eingabebild in einem Paket. Da das Anforderungsbild, das positive Bild und das negative Bild nacheinander übertragen werden, entspricht die erste Zeile dem Anforderungsbild, die zweite dem positiven Bild und die dritte dem negativen Bild und wird dann bis zum Ende des Pakets wiederholt. Somit erhält die Rangfolge eine Einbettung aller Bilder. Danach wird die Verlustfunktion berechnet.

Um die Rangfolge zu implementieren, müssen wir unsere eigene Verlustfunktion schreiben, die den euklidischen Abstand zwischen dem Anforderungsbild und dem positiven Bild sowie den euklidischen Abstand zwischen dem Anforderungsbild und dem negativen Bild berechnet.

Implementierung der Verlustberechnungsfunktion
_EPSILON = K.epsilon() def _loss_tensor(y_true, y_pred): y_pred = K.clip(y_pred, _EPSILON, 1.0-_EPSILON) loss = tf.convert_to_tensor(0,dtype=tf.float32) # initialise the loss variable to zero g = tf.constant(1.0, shape=[1], dtype=tf.float32) # set the value for constant 'g' for i in range(0,batch_size,3): try: q_embedding = y_pred[i+0] # procure the embedding for query image p_embedding = y_pred[i+1] # procure the embedding for positive image n_embedding = y_pred[i+2] # procure the embedding for negative image D_q_p = K.sqrt(K.sum((q_embedding - p_embedding)**2)) # calculate the euclidean distance between query image and positive image D_q_n = K.sqrt(K.sum((q_embedding - n_embedding)**2)) # calculate the euclidean distance between query image and negative image loss = (loss + g + D_q_p - D_q_n ) # accumulate the loss for each triplet except: continue loss = loss/(batch_size/3) # Average out the loss zero = tf.constant(0.0, shape=[1], dtype=tf.float32) return tf.maximum(loss,zero) 


Die Paketgröße sollte immer ein Vielfaches von 3 sein. Da ein Triplett 3 Bilder enthält und Triplettbilder nacheinander übertragen werden (wir senden jedes Bild nacheinander an ein tiefes neuronales Netzwerk).

Der Rest des Codes ist hier

Referenzliste
[1] Objekterkennung aus lokalen skalierungsinvarianten Merkmalen - www.cs.ubc.ca/~lowe/papers/iccv99.pdf

[2] Histogramme orientierter Gradienten für die menschliche Erkennung - Kurse.engr.illinois.edu/ece420/fa2017/hog_for_human_detection.pdf

[3] Lernen feinkörniger Bildähnlichkeit mit Deep Ranking- static.googleusercontent.com/media/research.google.com/de//pubs/archive/42945.pdf

[4] ImageNet-Klassifizierung mit Deep Convolutional Neural Networks- Papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf

[5] Ausfall: Ein einfacher Weg, um eine Überanpassung neuronaler Netze zu verhindern - www.cs.toronto.edu/~hinton/absps/JMLRdropout.pdf

[6] ImageNet: Eine umfangreiche hierarchische Bilddatenbank - www.image-net.org/papers/imagenet_cvpr09.pdf

[7] Fast Multiresolution Image Querying-grail.cs.washington.edu/projects/query/mrquery.pdf

[8] Abrufen von Bildern in großem Maßstab mit komprimierten Fisher-Vektoren - citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.401.9140&rep=rep1&type=pdf

[9] Jenseits zahlreicher Funktionen: Raumpyramiden- Matching zur Erkennung von Kategorien natürlicher Szenen - ieeexplore.ieee.org/document/1641019

[10] Verbesserte konsistente Stichprobe, gewichteter Minhash und L1-Skizze - static.googleusercontent.com/media/research.google.com/de//pubs/archive/36928.pdf

[11] Online-Lernen der Bildähnlichkeit in großem Maßstab durch Ranking- jmlr.csail.mit.edu/papers/volume11/chechik10a/chechik10a.pdf

[12] Lernen feinkörniger Bildähnlichkeit mit Deep Ranking- users.eecs.northwestern.edu/~jwa368/pdfs/deep_ranking.pdf

[13] Bildähnlichkeit mit Deep Ranking- medium.com/@akarshzingade/image-similarity-using-deep-ranking-c1bd83855978

Source: https://habr.com/ru/post/de457928/


All Articles