
Dengan munculnya ponsel dengan kamera berkualitas tinggi, kami mulai membuat lebih banyak dan lebih banyak gambar dan video momen yang cerah dan mengesankan dalam hidup kita. Banyak dari kita memiliki arsip foto yang terbentang selama puluhan tahun dan terdiri dari ribuan gambar yang membuatnya semakin sulit untuk dijelajahi. Hanya ingat berapa lama untuk menemukan gambar yang menarik hanya beberapa tahun yang lalu.
Salah satu tujuan Mail.ru Cloud adalah untuk menyediakan sarana paling mudah untuk mengakses dan mencari arsip foto dan video Anda sendiri. Untuk tujuan ini, kami di Mail.ru Computer Vision Team telah menciptakan dan menerapkan sistem untuk pemrosesan gambar cerdas: pencarian berdasarkan objek, berdasarkan adegan, berdasarkan wajah, dll. Teknologi spektakuler lainnya adalah pengenalan tengara. Hari ini, saya akan memberi tahu Anda bagaimana kami mewujudkan ini menggunakan Deep Learning.
Bayangkan situasinya: Anda kembali dari liburan dengan membawa banyak foto. Berbicara dengan teman-teman Anda, Anda diminta untuk menunjukkan gambar tempat yang layak dilihat, seperti istana, kastil, piramida, candi, danau, air terjun, gunung, dan sebagainya. Anda terburu-buru untuk menggulir folder galeri Anda mencoba menemukan yang benar-benar bagus. Kemungkinan besar, itu hilang di antara ratusan gambar, dan Anda mengatakan Anda akan menunjukkannya nanti.
Kami mengatasi masalah ini dengan mengelompokkan foto pengguna dalam album. Ini akan memungkinkan Anda menemukan gambar yang Anda butuhkan hanya dalam beberapa klik. Sekarang kami memiliki album yang disusun berdasarkan wajah, objek dan adegan, dan juga oleh tengara.
Foto dengan tengara sangat penting karena sering menangkap sorotan kehidupan kita (misalnya, perjalanan). Ini dapat berupa gambar dengan beberapa arsitektur atau hutan belantara di latar belakang. Inilah sebabnya kami mencari lokasi gambar tersebut dan membuatnya tersedia untuk pengguna.
Keunikan pengakuan tengara
Ada nuansa di sini: seseorang tidak hanya mengajarkan model dan membuatnya mengenali landmark segera - ada sejumlah tantangan.
Pertama, kita tidak bisa mengatakan dengan jelas apa sebenarnya "tengara" itu. Kita tidak bisa mengatakan mengapa bangunan adalah landmark, sedangkan bangunan lain di sampingnya tidak. Ini bukan konsep formal, yang membuatnya lebih rumit untuk menyatakan tugas pengenalan.
Kedua, landmark sangat beragam. Ini bisa berupa bangunan bernilai sejarah atau budaya, seperti kuil, istana, atau kastil. Atau, ini mungkin semua jenis monumen. Atau fitur alami: danau, ngarai, air terjun, dan sebagainya. Juga, ada model tunggal yang harus dapat menemukan semua landmark itu.
Ketiga, gambar dengan landmark sangat sedikit. Menurut perkiraan kami, mereka hanya menyumbang 1 hingga 3 persen dari foto pengguna. Itulah sebabnya kami tidak mampu membuat kesalahan dalam pengakuan karena jika kami menunjukkan foto tanpa tanda pada seseorang, itu akan sangat jelas dan akan menyebabkan reaksi yang merugikan. Atau, sebaliknya, bayangkan Anda menunjukkan gambar dengan tempat menarik di New York kepada orang yang belum pernah ke Amerika Serikat. Dengan demikian, model pengakuan harus memiliki FPR rendah (false positive rate).
Keempat, sekitar 50% pengguna atau bahkan lebih biasanya menonaktifkan penyimpanan data geografis. Kita perlu mempertimbangkan ini dan hanya menggunakan gambar itu sendiri untuk mengidentifikasi lokasi. Saat ini, sebagian besar layanan dapat menangani landmark dengan cara tertentu menggunakan geodata dari properti gambar. Namun, persyaratan awal kami lebih ketat.
Sekarang saya tunjukkan beberapa contoh.
Berikut adalah tiga benda yang mirip, tiga katedral Gotik di Prancis. Di sebelah kiri adalah katedral Amiens, yang di tengah adalah katedral Reims, dan Notre-Dame de Paris di sebelah kanan.

Bahkan manusia membutuhkan waktu untuk melihat dari dekat dan melihat bahwa ini adalah katedral yang berbeda, tetapi mesinnya harus dapat melakukan hal yang sama, dan bahkan lebih cepat daripada manusia.
Inilah tantangan lain: ketiga foto di sini menampilkan gambar Notre-Dame de Paris dari berbagai sudut. Foto-fotonya sangat berbeda, tetapi masih perlu dikenali dan diambil.

Fitur alami sama sekali berbeda dari arsitektur. Di sebelah kiri adalah Kaisarea di Israel, di sebelah kanan adalah Englischer Garten di Munich.

Foto-foto ini memberikan sedikit petunjuk pada model untuk ditebak.
Metode kami
Metode kami didasarkan sepenuhnya pada jaringan saraf convolutional yang mendalam. Strategi pelatihan yang kami pilih disebut pembelajaran kurikulum yang berarti belajar dalam beberapa langkah. Untuk mencapai efisiensi yang lebih besar baik dengan maupun tanpa data geografis, kami membuat kesimpulan khusus. Biarkan saya memberi tahu Anda tentang setiap langkah secara lebih rinci.
Kumpulan data
Data adalah bahan bakar pembelajaran mesin. Pertama-tama, kami harus mengumpulkan set data untuk mengajarkan model.
Kami membagi dunia menjadi 4 wilayah, masing-masing digunakan pada langkah tertentu dalam proses pembelajaran. Kemudian, kami memilih negara di setiap wilayah, memilih daftar kota untuk setiap negara, dan mengumpulkan bank foto. Berikut ini beberapa contohnya.

Pertama, kami berusaha membuat model kami belajar dari basis data yang diperoleh. Hasilnya buruk. Analisis kami menunjukkan bahwa data itu kotor. Terlalu banyak suara mengganggu pengakuan setiap tengara. Apa yang harus kita lakukan? Akan mahal, rumit, dan tidak terlalu bijak untuk meninjau semua data secara manual. Jadi, kami merancang proses pembersihan basis data otomatis di mana penanganan manual hanya digunakan pada satu langkah: kami memilih sendiri 3 hingga 5 foto referensi untuk setiap tengara yang pasti menunjukkan objek yang diinginkan pada sudut yang kurang lebih sesuai. Ini bekerja cukup cepat karena jumlah data referensi tersebut kecil dibandingkan dengan seluruh database. Kemudian pembersihan otomatis berdasarkan jaringan saraf convolutional yang mendalam dilakukan.
Selanjutnya, saya akan menggunakan istilah "embedding" yang saya maksudkan sebagai berikut. Kami memiliki jaringan saraf convolutional. Kami melatihnya untuk mengklasifikasikan objek, lalu kami memotong layer klasifikasi terakhir, mengambil beberapa gambar, menganalisisnya dengan jaringan, dan memperoleh vektor numerik pada output. Inilah yang akan saya sebut embedding.
Seperti yang saya katakan sebelumnya, kami mengatur proses pembelajaran kami dalam beberapa langkah yang sesuai dengan bagian-bagian dari basis data kami. Jadi, pertama, kami mengambil jaringan saraf dari langkah sebelumnya atau jaringan inisialisasi.
Kami memiliki foto referensi tengara, memprosesnya dengan jaringan dan mendapatkan beberapa embeddings. Sekarang kita bisa melanjutkan ke pembersihan data. Kami mengambil semua gambar dari kumpulan data untuk tengara dan masing-masing telah diproses oleh jaringan. Kami memperoleh beberapa embeddings dan menentukan jarak ke referensi embeddings untuk masing-masing. Kemudian, kami menentukan jarak rata-rata dan, jika melebihi beberapa ambang batas yang merupakan parameter algoritma, perlakukan objek tersebut sebagai non-landmark. Jika jarak rata-rata kurang dari ambang, kami menyimpan foto itu.

Sebagai hasilnya, kami memiliki database yang berisi lebih dari 11 ribu landmark dari lebih dari 500 kota di 70 negara, lebih dari 2,3 juta foto. Ingatlah bahwa sebagian besar foto tidak memiliki landmark sama sekali. Kita perlu menceritakannya kepada model kita. Karena alasan ini, kami menambahkan 900 ribu foto tanpa landmark ke basis data kami dan melatih model kami dengan kumpulan data yang dihasilkan.
Kami memperkenalkan tes offline untuk mengukur kualitas pembelajaran. Mengingat bahwa tengara hanya terjadi pada 1 hingga 3% dari semua foto, kami secara manual menyusun satu set 290 gambar yang memang menampilkan tengara. Foto-foto itu cukup beragam dan kompleks, dengan sejumlah besar objek ditembak dari sudut yang berbeda untuk membuat pengujian sesulit mungkin untuk model. Mengikuti pola yang sama, kami mengambil 11 ribu foto tanpa landmark, agak rumit juga, dan kami mencoba menemukan objek yang mirip landmark dalam database kami.
Untuk mengevaluasi kualitas pembelajaran, kami mengukur akurasi model kami menggunakan foto baik dengan dan tanpa landmark. Ini adalah dua metrik utama kami.
Pendekatan yang ada
Ada relatif sedikit informasi tentang pengakuan tengara dalam literatur. Sebagian besar solusi didasarkan pada fitur-fitur lokal. Gagasan utamanya adalah kami memiliki beberapa gambar permintaan dan gambar dari database. Fitur lokal - poin utama - ditemukan dan kemudian dicocokkan. Jika jumlah kecocokan cukup besar, kami menyimpulkan bahwa kami telah menemukan tengara.
Saat ini, metode terbaik adalah DELF (fitur lokal mendalam) yang ditawarkan oleh Google, yang menggabungkan fitur lokal yang sesuai dengan pembelajaran mendalam. Dengan meminta gambar input diproses oleh jaringan convolutional, kami memperoleh beberapa fitur DELF.

Bagaimana cara kerja pengenalan tengara? Kami memiliki bank foto dan gambar input, dan kami ingin tahu apakah itu menunjukkan tengara atau tidak. Dengan menjalankan jaringan DELF dari semua foto, fitur-fitur yang sesuai untuk database dan gambar input dapat diperoleh. Kemudian kami melakukan pencarian dengan metode tetangga terdekat dan memperoleh gambar kandidat dengan fitur di output. Kami menggunakan verifikasi geometris untuk mencocokkan fitur: jika berhasil, kami menyimpulkan bahwa gambar menunjukkan tengara.
Jaringan saraf convolutional
Pra-pelatihan sangat penting untuk Deep Learning. Jadi kami menggunakan basis data adegan untuk melatih jaringan saraf kami. Kenapa begini? Adegan adalah beberapa objek yang terdiri dari sejumlah besar objek lain. Landmark adalah contoh adegan. Dengan pra-pelatihan model dengan database seperti itu, kami dapat memberikan gambaran tentang beberapa fitur tingkat rendah yang kemudian dapat digeneralisasi untuk pengakuan landmark yang sukses.
Kami menggunakan jaringan saraf dari keluarga jaringan Residual sebagai model. Perbedaan kritis dari jaringan tersebut adalah mereka menggunakan blok residual yang mencakup koneksi skip yang memungkinkan sinyal melompati layer dengan bobot dan lewat dengan bebas. Arsitektur semacam itu memungkinkan untuk melatih jaringan yang dalam dengan kualitas tinggi dan mengontrol efek gradien yang hilang, yang penting untuk pelatihan.
Model kami adalah Wide ResNet-50-2, versi ResNet-50 di mana jumlah konvolusi dalam blok bottleneck internal digandakan.

Jaringan berkinerja sangat baik. Kami mengujinya dengan database adegan kami, dan berikut hasilnya:
Wide ResNet bekerja hampir dua kali lebih cepat dari ResNet-200. Bagaimanapun, ini adalah kecepatan lari yang sangat penting untuk produksi. Mengingat semua pertimbangan ini, kami memilih Wide ResNet-50-2 sebagai jaringan saraf utama kami.
Pelatihan
Kami membutuhkan fungsi kehilangan untuk melatih jaringan kami. Kami memutuskan untuk menggunakan pendekatan pembelajaran metrik untuk mengambilnya: jaringan saraf dilatih sehingga item-item dari kelas yang sama berbondong-bondong ke satu cluster, sementara cluster untuk kelas yang berbeda harus ditempatkan terpisah sejauh mungkin. Untuk landmark, kami menggunakan Center loss yang menarik elemen satu kelas ke arah beberapa center. Fitur penting dari pendekatan ini adalah bahwa ia tidak memerlukan pengambilan sampel negatif, yang menjadi hal yang agak sulit dilakukan di zaman kemudian.

Ingatlah bahwa kita memiliki n kelas landmark dan satu lagi kelas "non-landmark" yang tidak digunakan Center loss. Kami menyiratkan bahwa tengara adalah satu dan objek yang sama, dan memiliki struktur, jadi masuk akal untuk menentukan pusatnya. Adapun non-landmark, itu bisa merujuk pada apa pun, jadi tidak masuk akal untuk menentukan pusat untuk itu.
Kami kemudian menggabungkan semua ini, dan ada model kami untuk pelatihan. Ini terdiri dari tiga bagian utama:
- Wide NeNet 50-2 jaringan saraf convolutional yang sudah dilatih sebelumnya dengan basis data adegan;
- Bagian penyisipan yang terdiri dari lapisan yang terhubung sepenuhnya dan lapisan norma batch;
- Klasifikasi yang merupakan lapisan yang terhubung penuh, diikuti oleh pasangan yang terdiri dari kerugian Softmax dan kerugian Pusat.

Seperti yang Anda ingat, basis data kami dibagi menjadi 4 bagian berdasarkan wilayah. Kami menggunakan 4 bagian ini dalam paradigma pembelajaran kurikulum. Kami memiliki dataset saat ini, dan pada setiap tahap pembelajaran, kami menambahkan bagian lain dunia untuk mendapatkan dataset baru untuk pelatihan.
Model ini terdiri dari tiga bagian, dan kami menggunakan tingkat pembelajaran khusus untuk masing-masing bagian dalam proses pelatihan. Ini diperlukan agar jaringan dapat mempelajari tengara dari bagian dataset baru yang telah kami tambahkan dan mengingat data yang telah dipelajari. Banyak percobaan membuktikan pendekatan ini sebagai yang paling efisien.
Jadi, kami telah melatih model kami. Sekarang kita perlu menyadari cara kerjanya. Mari kita gunakan peta aktivasi kelas untuk menemukan bagian dari gambar yang paling mudah bereaksi jaringan saraf kita. Gambar di bawah ini menunjukkan gambar input di baris pertama, dan gambar yang sama dilapis dengan peta aktivasi kelas dari jaringan yang telah kami latih pada langkah sebelumnya ditunjukkan di baris kedua.

Peta panas menunjukkan bagian gambar mana yang lebih banyak dihadiri oleh jaringan. Seperti yang ditunjukkan oleh peta aktivasi kelas, jaringan saraf kami telah mempelajari konsep landmark dengan sukses.
Kesimpulan
Sekarang kita perlu menggunakan pengetahuan ini untuk menyelesaikan sesuatu. Karena kami telah menggunakan kehilangan Center untuk pelatihan, dalam kasus inferensi, tampaknya cukup logis untuk menentukan centroid untuk landmark juga.
Untuk melakukan ini, kami mengambil bagian dari gambar dari set pelatihan untuk beberapa tengara, katakanlah, Penunggang Kuda Perunggu di Saint Petersburg. Lalu kami minta mereka diproses oleh jaringan, mendapatkan embeddings, mengeluarkan rata-rata, dan mendapatkan centroid.

Namun, ini adalah sebuah pertanyaan: berapa banyak centroid per landmark yang masuk akal untuk diturunkan? Awalnya, tampak jelas dan logis untuk mengatakan: satu centroid. Tidak juga, ternyata. Kami awalnya memutuskan untuk membuat centroid tunggal juga, dan hasilnya tidak buruk. Jadi mengapa beberapa centroid?
Pertama, data yang kami miliki tidak begitu bersih. Meskipun kami telah membersihkan dataset, kami hanya menghapus data limbah yang jelas. Namun, mungkin masih ada gambar yang tidak sia-sia tetapi berdampak buruk pada hasilnya.
Misalnya, saya memiliki kelas Istana Musim Dingin di Saint Petersburg. Saya ingin mendapatkan centroid untuk itu. Namun, set datanya mencakup beberapa foto dengan Palace Square dan lengkungan Kantor Pusat Umum, karena objek-objek ini saling berdekatan. Jika centroid akan ditentukan untuk semua gambar, hasilnya tidak akan terlalu stabil. Yang perlu kita lakukan adalah mengelompokkan entah bagaimana embeddings mereka berasal dari jaringan saraf, hanya mengambil centroid yang berhubungan dengan Istana Musim Dingin, dan rata-rata menggunakan data yang dihasilkan.

Kedua, foto mungkin diambil dari berbagai sudut.
Berikut adalah contoh perilaku seperti yang diilustrasikan dengan Belfry of Bruges. Dua centroid telah diturunkan untuk itu. Di baris atas pada gambar, ada foto-foto yang lebih dekat ke centroid pertama, dan di baris kedua - yang lebih dekat ke centroid kedua.

Centroid pertama berkaitan dengan lebih banyak foto "besar" yang diambil di pasar di Bruges dalam jarak dekat. Penawaran centroid kedua dengan foto yang diambil dari jarak jauh di jalan-jalan tertentu.
Ternyata, dengan menurunkan beberapa centroid per kelas landmark, kita dapat merefleksikan inferensi sudut kamera yang berbeda untuk landmark tersebut.
Jadi, bagaimana kita mendapatkan set itu untuk mendapatkan centroid? Kami menerapkan pengelompokan hierarkis (tautan lengkap) ke kumpulan data untuk setiap tengara. Kami menggunakannya untuk menemukan kelompok yang valid dari mana centroid akan diturunkan. Yang kami maksud adalah kluster yang valid, yang terdiri dari setidaknya 50 foto sebagai hasil pengelompokan. Cluster lainnya ditolak. Hasilnya, kami memperoleh sekitar 20% landmark dengan lebih dari satu centroid.
Sekarang untuk menarik kesimpulan. Itu diperoleh dalam dua langkah: pertama, kami memberi makan gambar input ke jaringan saraf convolutional kami dan mendapatkan embedding, dan kemudian mencocokkan embedding dengan centroid menggunakan produk titik. Jika gambar memiliki data geo, kami membatasi pencarian untuk centroid, yang merujuk ke landmark yang terletak dalam 1x1 km persegi dari lokasi gambar. Ini memungkinkan pencarian yang lebih akurat dan ambang yang lebih rendah untuk pencocokan berikutnya. Jika jarak yang dihasilkan melebihi ambang batas yang merupakan parameter algoritma, maka kami menyimpulkan bahwa foto memiliki tengara dengan nilai produk titik maksimum. Jika kurang, maka foto tersebut bukan foto tengara.

Misalkan foto memiliki tengara. Jika kami memiliki data geo, maka kami menggunakannya dan memperoleh jawaban. Jika data geografis tidak tersedia, maka kami menjalankan pemeriksaan tambahan. Ketika kami sedang membersihkan dataset, kami membuat satu set gambar referensi untuk setiap kelas. Kami dapat menentukan embeddings untuk mereka, dan kemudian mendapatkan jarak rata-rata dari mereka ke embedding gambar permintaan. Jika melebihi beberapa ambang batas, maka verifikasi dilewati, dan kami membawa metadata dan memperoleh hasilnya. Penting untuk dicatat bahwa kita dapat menjalankan prosedur ini untuk beberapa landmark yang telah ditemukan dalam gambar.

Hasil tes
Kami membandingkan model kami dengan DELF, dan kami mengambil parameter yang akan menunjukkan kinerja terbaik dalam pengujian kami. Hasilnya hampir identik.
Kemudian kami mengklasifikasikan landmark menjadi dua jenis: sering (lebih dari 100 foto dalam database), yang merupakan 87% dari semua landmark dalam pengujian, dan langka. Model kami berfungsi baik dengan model yang sering: presisi 85,3%. Dengan landmark yang langka, kami memiliki 46% yang juga tidak buruk sama sekali, yang berarti bahwa pendekatan kami bekerja dengan cukup baik bahkan dengan sedikit data.
Kemudian kami menjalankan uji A / B dengan foto pengguna. Akibatnya, tingkat konversi pembelian ruang cloud tumbuh sebesar 10%, tingkat konversi penghapusan aplikasi seluler berkurang sebesar 3%, dan jumlah tampilan album meningkat sebesar 13%.
Mari kita bandingkan kecepatan kami dengan DELF. Dengan GPU, DELF membutuhkan 7 network run karena menggunakan 7 skala gambar, sementara pendekatan kami hanya menggunakan 1. Dengan CPU, DELF menggunakan pencarian yang lebih panjang dengan metode tetangga terdekat dan verifikasi geometris yang sangat panjang. Pada akhirnya, metode kami 15 kali lebih cepat dengan CPU. Pendekatan kami menunjukkan kecepatan yang lebih tinggi dalam kedua kasus, yang sangat penting untuk produksi.
Hasil: kenangan dari liburan
Di awal artikel ini, saya menyebutkan solusi untuk menggulir dan menemukan gambar tengara yang diinginkan. Ini dia.

Ini cloud saya di mana semua foto diklasifikasikan ke dalam album. Ada album "People", "Objects", dan "Attraction". Di album Atraksi, tengara diklasifikasikan ke dalam album yang dikelompokkan berdasarkan kota. Klik pada Dresdner Zwinger membuka album dengan foto-foto tengara ini saja.

Fitur praktis: Anda dapat pergi berlibur, mengambil beberapa foto dan menyimpannya di cloud Anda. Kemudian, ketika Anda ingin mengunggahnya ke Instagram atau berbagi dengan teman dan keluarga, Anda tidak perlu mencari dan memilih terlalu lama - foto yang diinginkan akan tersedia hanya dengan beberapa klik.
Kesimpulan
Biarkan saya mengingatkan Anda tentang fitur utama dari solusi kami.
- Pembersihan basis data semi-otomatis. Sedikit pekerjaan manual diperlukan untuk pemetaan awal, dan kemudian jaringan saraf akan melakukan sisanya. Ini memungkinkan untuk membersihkan data baru dengan cepat dan menggunakannya untuk melatih ulang model.
- Kami menggunakan jaringan saraf convolutional yang mendalam dan pembelajaran metrik mendalam yang memungkinkan kami mempelajari struktur di kelas secara efisien.
- Kami telah menggunakan pembelajaran kurikulum, yaitu pelatihan di bagian-bagian, sebagai paradigma pelatihan. Pendekatan ini sangat membantu kami. Kami menggunakan beberapa centroid pada inferensi, yang memungkinkan penggunaan data yang lebih bersih dan menemukan berbagai tampilan tengara.
Mungkin tampak bahwa pengenalan objek adalah tugas yang sepele. Namun, menjelajahi kebutuhan pengguna kehidupan nyata, kami menemukan tantangan baru seperti pengakuan tengara. Teknik ini memungkinkan untuk memberi tahu orang-orang sesuatu yang baru tentang dunia menggunakan jaringan saraf. Ini sangat menggembirakan dan memotivasi!