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:
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.

Sekarang mari kita lihat lebih dekat lapisan tengah:

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:
- Setiap gambar di kelas membentuk gambar permintaan.
- Setiap gambar, kecuali untuk gambar permintaan, akan membentuk gambar positif. Tetapi Anda dapat membatasi jumlah gambar positif untuk setiap permintaan gambar
- 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:

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:
- Implementasi tiga jaringan saraf multiskala paralel
- Implementasi fungsi kerugian
- 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)
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