Pemeringkatan mendalam untuk membandingkan dua gambar

Halo, Habr! Saya mempersembahkan untuk Anda terjemahan dari artikel “Kesamaan Gambar dengan Peringkat Tinggi” oleh Akarsh Zingade.

Algoritma Peringkat Tinggi


Konsep " kesamaan dua gambar " tidak diperkenalkan, jadi mari kita perkenalkan konsep ini setidaknya dalam kerangka artikel.

Kesamaan dari dua gambar adalah hasil membandingkan dua gambar sesuai dengan kriteria tertentu. Ukuran kuantitatifnya menentukan tingkat kesamaan antara diagram intensitas dua gambar. Menggunakan ukuran kesamaan, beberapa fitur yang menggambarkan gambar dibandingkan. Sebagai ukuran kesamaan, jarak Hamming, jarak Euclidean, jarak Manhattan, dll.

Deep Ranking - mempelajari kesamaan gambar berbutir halus, mengkarakterisasi rasio kemiripan gambar yang terbagi halus menggunakan satu set triplet.

Apa itu triplet?


Triplet berisi gambar permintaan, gambar positif dan negatif. Di mana gambar positif lebih seperti gambar permintaan daripada negatif.

Contoh satu set kembar tiga:

gambar

Baris pertama, kedua dan ketiga sesuai dengan gambar permintaan. Baris kedua (gambar positif) lebih mirip gambar permintaan daripada baris ketiga (gambar negatif).

Arsitektur Jaringan Peringkat Tinggi


Jaringan ini terdiri dari 3 bagian: pengambilan sampel triplet, ConvNet dan lapisan peringkat.
Jaringan menerima kembar tiga gambar sebagai input. Satu gambar triplet berisi gambar permintaan $ inline $ p_i $ inline $ citra positif $ inline $ p_i ^ + $ inline $ dan citra negatif $ inline $ p_i ^ - $ inline $ yang secara independen ditransmisikan ke tiga jaringan saraf yang dalam identik.

Lapisan peringkat teratas - mengevaluasi fungsi triplet loss. Kesalahan ini diperbaiki di lapisan bawah untuk meminimalkan fungsi kerugian.
gambar

Sekarang mari kita lihat lebih dekat lapisan tengah:

gambar

ConvNet dapat berupa jaringan saraf dalam (artikel ini akan membahas salah satu penerapan jaringan saraf convolutional VGG16). ConvNet berisi lapisan konvolusional, lapisan kumpulan maksimum, lapisan normalisasi lokal, dan lapisan yang sepenuhnya terhubung.
Dua bagian lainnya menerima gambar dengan laju sampling berkurang dan melakukan tahap konvolusi dan penyatuan maks. Kemudian tahap normalisasi dari tiga bagian terjadi dan pada akhirnya mereka digabungkan dengan lapisan linier dengan normalisasi selanjutnya.

Formasi Triplet


Ada beberapa cara untuk membuat file triplet, misalnya, gunakan penilaian pakar. Tetapi artikel ini akan menggunakan algoritma berikut:

  1. Setiap gambar di kelas membentuk gambar permintaan.
  2. Setiap gambar, kecuali untuk gambar permintaan, akan membentuk gambar positif. Tetapi Anda dapat membatasi jumlah gambar positif untuk setiap permintaan gambar
  3. Gambar negatif dipilih secara acak dari kelas mana pun yang bukan kelas gambar permintaan

Fungsi kerugian triplet


Tujuannya adalah untuk melatih fungsi yang menetapkan jarak kecil untuk gambar yang paling mirip dan yang besar untuk yang berbeda. Ini dapat dinyatakan sebagai:
gambar
Di mana l adalah koefisien kehilangan untuk kembar tiga, g adalah koefisien kesenjangan antara jarak antara dua pasang gambar: ( $ inline $ p_i $ inline $ , $ inline $ p_i ^ + $ inline $ ) dan ( $ inline $ p_i $ inline $ , $ inline $ p_i ^ - $ inline $ ), fungsi f - embedding yang menampilkan gambar dalam vektor, $ inline $ p_i $ inline $ Apakah gambar permintaan, $ inline $ p_i ^ + $ inline $ Adalah citra positif, $ inline $ p_i ^ - $ inline $ Adalah gambar negatif, dan D adalah jarak Euclidean antara dua titik Euclidean.

Implementasi Algoritma Deep Ranking


Implementasi dengan Keras.

Tiga jaringan paralel digunakan untuk kueri, citra positif dan negatif.

Ada tiga bagian utama dalam implementasi, yaitu:

  1. Implementasi tiga jaringan saraf multiskala paralel
  2. Implementasi fungsi kerugian
  3. Generasi triplet

Mempelajari tiga jaringan paralel dalam akan menghabiskan banyak sumber daya memori. Alih-alih tiga jaringan paralel dalam yang menerima gambar permintaan, gambar positif dan negatif, gambar-gambar ini akan dimasukkan secara berurutan ke satu jaringan saraf yang dalam pada input dari jaringan saraf. Tensor yang ditransfer ke lapisan kehilangan akan berisi lampiran gambar di setiap baris. Setiap baris sesuai dengan setiap gambar input dalam suatu paket. Karena gambar permintaan, gambar positif dan gambar negatif secara berurutan ditransmisikan, baris pertama akan sesuai dengan gambar permintaan, yang kedua ke gambar positif, dan yang ketiga ke gambar negatif, dan kemudian diulang sampai akhir paket. Dengan demikian, layer peringkat menerima embedding semua gambar. Setelah itu, fungsi kerugian dihitung.

Untuk mengimplementasikan layer peringkat, kita perlu menulis fungsi kerugian kita sendiri, yang akan menghitung jarak Euclidean antara gambar permintaan dan gambar positif, serta jarak Euclidean antara gambar permintaan dan gambar negatif.

Implementasi fungsi perhitungan kerugian
_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) 


Ukuran paket harus selalu kelipatan 3. Karena triplet berisi 3 gambar dan gambar triplet ditransmisikan secara berurutan (kami mengirim setiap gambar ke jaringan saraf yang dalam secara berurutan)

Sisa kode ada di sini

Referensi
[1] Pengakuan Objek dari Fitur Invariant Skala Lokal- www.cs.ubc.ca/~lowe/papers/iccv99.pdf

[2] Histogram Gradien Berorientasi untuk Deteksi Manusia- courses.engr.illinois.edu/ece420/fa2017/hog_for_human_detection.pdf

[3] Mempelajari Kesamaan Gambar Butiran Halus dengan Ranking Tinggi- static.googleusercontent.com/media/research.google.com/en//pubs/archive/42945.pdf

[4] ImageNet Klasifikasi dengan Neural Networks Dalam convolutional- makalah.nips.cc/paper/4824-imagenet-klasifikasi-dengan-deep-convolutional-neural-networks.pdf

[5] Putus Sekolah: Cara Sederhana untuk Mencegah Jaringan Saraf Tiruan dari Overfitting- www.cs.toronto.edu/~hinton/absps/JMLRdropout.pdf

[6] ImageNet: Basis Data Gambar Hirarki Skala Besar- www.image-net.org/papers/imagenet_cvpr09.pdf

[7] Querying Gambar Fast Multiresolution.g.washington.edu/projects/query/mrquery.pdf

[8] Pengambilan Gambar Skala Besar dengan Vektor Fisher Terkompresi- citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.401.9140&rep=rep1&type=pdf

[9] Melampaui Kantung Fitur: Pencocokan Piramida Spasial untuk Mengenali Kategori Pemandangan Alam- ieeexplore.ieee.org/document/1641019

[10] Pengambilan Sampel yang Konsisten, Sketsa Tertimbang, dan L1- static.googleusercontent.com/media/research.google.com/id/pubs/archive/36928.pdf

[11] Pembelajaran online skala besar tentang kemiripan gambar melalui pemeringkatan- jmlr.csail.mit.edu/papers/volume11/chechik10a/chechik10a.pdf

[12] Mempelajari Kesamaan Gambar Butiran Halus dengan Ranking Tinggi- users.eecs.northwestern.edu/~jwa368/pdfs/deep_ranking.pdf

[13] Kesamaan Gambar menggunakan Deep Ranking- medium.com/@akarshzingade/image-similarity-using-deep-ranking-c1bd83855978

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


All Articles