Implementasi Pytorch dari jaringan Siam dan triplet untuk belajar embeddings.
Jaringan Siam dan Triplet berguna untuk mempelajari pemetaan dari gambar ke ruang Euclidean yang ringkas di mana jarak sesuai dengan ukuran kesamaan [2]. Embeddings yang dilatih dengan cara seperti itu dapat digunakan sebagai fitur vektor untuk klasifikasi atau tugas pembelajaran beberapa tembakan.
Membutuhkan Pytorch 0.4 dengan TorchVision 0.2.1
Untuk pytorch 0.3 Kompatibilitas Checkout Tag Torch-0.3.1
Kami akan melatih embeddings pada dataset MNIST. Eksperimen dijalankan di Jupyter Notebook.
Kami akan melalui pembelajaran embeddings fitur yang diawasi menggunakan berbagai fungsi kerugian pada dataset MNIST. Ini hanya untuk tujuan visualisasi, jadi kami akan menggunakan embeddings 2-dimensi yang bukan pilihan terbaik dalam praktiknya.
Untuk setiap percobaan, jaringan embedding yang sama digunakan (32 CONV 5x5 -> prelu -> maxpool 2x2 -> 64 CONV 5x5 -> prelu -> maxpool 2x2 -> padat 256 -> prelu -> padat 256 -> prelu -> padat 2) dan kami tidak melakukan pencarian hiperparameter apa pun.
Kami menambahkan lapisan yang terhubung sepenuhnya dengan jumlah kelas dan melatih jaringan untuk klasifikasi dengan softmax dan cross-entropy. Jaringan berlatih ~ 99% akurasi. Kami mengekstrak 2 dimensi embedding dari lapisan kedua dari belakang:
Set kereta:

Set Tes:

Sementara embeddings terlihat terpisah (yang kami latih untuk mereka), mereka tidak memiliki sifat metrik yang baik. Mereka mungkin bukan pilihan terbaik sebagai deskriptor untuk kelas baru.
Sekarang kita akan melatih jaringan Siam yang mengambil sepasang gambar dan melatih embeddings sehingga jarak di antara mereka diminimalkan jika mereka dari kelas yang sama dan lebih besar dari nilai margin jika mereka mewakili kelas yang berbeda. Kami akan meminimalkan fungsi kerugian kontras [1]:

Sampel kelas Siamesemnist acak pasangan positif dan negatif yang kemudian diumpankan ke jaringan Siam.
Setelah 20 zaman pelatihan di sini adalah embeddings yang kami dapatkan untuk pelatihan set:

Set Tes:

Embeddings yang dipelajari dikelompokkan jauh lebih baik di dalam kelas.
Kami akan melatih jaringan triplet, yang mengambil jangkar, contoh positif (dari kelas yang sama dengan jangkar) dan negatif (dari kelas yang berbeda dari jangkar). Tujuannya adalah untuk mempelajari embedding sehingga jangkar lebih dekat dengan contoh positif daripada contoh negatif dengan nilai margin.
Sumber: Schroff, Florian, Dmitry Kalenichenko, dan James Philbin. FACENET: Embedding terpadu untuk pengenalan wajah dan pengelompokan. CVPR 2015.
Kehilangan triplet : 
Kelas tripletmnist sampel contoh positif dan negatif untuk setiap jangkar yang mungkin.
Setelah 20 zaman pelatihan di sini adalah embeddings yang kami dapatkan untuk pelatihan set:

Set Tes:

Embeddings yang terpelajar tidak sedekat satu sama lain di dalam kelas seperti dalam kasus jaringan Siam, tetapi bukan itu yang kami optimalkan. Kami ingin embeddings lebih dekat dengan embeddings lain dari kelas yang sama daripada dari kelas lain dan kami dapat melihat di situlah pelatihan akan pergi.
Ada beberapa masalah dengan jaringan Siam dan triplet:
Untuk menangani masalah ini secara efisien, kami akan memberi makan jaringan dengan mini-batch standar seperti yang kami lakukan untuk klasifikasi. Fungsi kerugian akan bertanggung jawab untuk pemilihan pasangan keras dan kembar tiga dalam mini-batch. Jika kami memberi makan jaringan dengan 16 gambar per 10 kelas, kami dapat memproses hingga 159*160/2 = 12720 pasang dan 10*16*15/2*(9*16) = 172800 triplet, dibandingkan dengan 80 pasangan dan 53 kembar tiga dalam implementasi sebelumnya.
Biasanya itu bukan ide terbaik untuk memproses semua pasangan atau kembar tiga yang mungkin dalam mini-batch. Kita dapat menemukan beberapa strategi tentang cara memilih kembar tiga di [2] dan [3].
Kami akan memberi makan jaringan dengan mini-batch, seperti yang kami lakukan untuk jaringan klasifikasi. Kali ini kami akan menggunakan BatchSampler khusus yang akan mencicipi N_Classes dan N_Samples di dalam setiap kelas, menghasilkan batch mini ukuran N_Classes*n_samples .
Untuk setiap pasangan mini Batch positif dan negatif akan dipilih menggunakan label yang disediakan.
MNIST adalah dataset yang agak mudah dan embeddings dari pasangan yang dipilih secara acak sudah cukup bagus, kami tidak melihat banyak peningkatan di sini.
Embeddings kereta:

Tes Embeddings:

Kami akan memberi makan jaringan dengan mini-batch seperti dengan pilihan pasangan online. Ada beberapa strategi yang dapat kita gunakan untuk pemilihan triplet yang diberikan label dan prediksi embeddings:
Strategi untuk pemilihan triplet harus dipilih dengan cermat. Strategi yang buruk dapat menyebabkan pelatihan yang tidak efisien atau, lebih buruk lagi, untuk memodelkan runtuh (semua embeddings berakhir memiliki nilai yang sama).
Inilah yang kami dapatkan dengan negatif keras acak untuk setiap pasangan positif.
Set Pelatihan:

Set Tes:

Eksperimen serupa dilakukan untuk dataset FashionMnist di mana keunggulan penambangan negatif online sedikit lebih terlihat. Arsitektur jaringan yang sama persis dengan hanya embeddings 2 dimensi yang digunakan, yang mungkin tidak cukup kompleks untuk mempelajari embeddings yang baik. Dataset yang lebih kompleks dengan kelas angka yang lebih tinggi harus mendapat manfaat lebih dari penambangan online.

Jaringan siam dengan pasangan yang dipilih secara acak

Kerugian kontras online dengan penambangan negatif

Jaringan kembar tiga dengan kembar tiga acak

Kehilangan triplet online dengan penambangan negatif

[1] Raia Hadsell, Sumit Chopra, Yann Lecun, Pengurangan Dimensi Dengan Mempelajari Pemetaan Invarian, CVPR 2006
[2] Schroff, Florian, Dmitry Kalenichenko, dan James Philbin. FACENET: Embedding terpadu untuk pengenalan wajah dan pengelompokan. CVPR 2015
[3] Alexander Hermans, Lucas Beyer, Bastian Leibe, membela kerugian triplet untuk identifikasi ulang orang, 2017
[4] Brandon Amos, Bartosz Ludwiczuk, Mahadev Satyanarayanan, OpenFace: Perpustakaan Pengenalan Wajah General-Purpose dengan Aplikasi Seluler, 2016
[5] Yi Sun, Xiaogang Wang, Xiaoou Tang, Representasi wajah pembelajaran yang mendalam dengan verifikasi identifikasi bersama, NIPS 2014