Begitu ya, artinya saya ada: ulasan Deep Learning in Computer Vision (bagian 1)

Visi komputer. Sekarang mereka banyak bicara tentang itu, di mana itu diterapkan dan banyak diimplementasikan. Dan entah bagaimana beberapa waktu yang lalu tidak ada artikel ulasan tentang Habrรฉ di CV, dengan contoh-contoh arsitektur dan tugas-tugas modern. Tetapi ada banyak dari mereka, dan mereka sangat keren! Jika Anda tertarik dengan apa yang terjadi di Computer Vision sekarang, tidak hanya dari sudut pandang penelitian dan artikel , tetapi juga dari sudut pandang masalah yang diterapkan, maka Anda dipersilakan untuk melakukannya. Juga, artikel itu bisa menjadi pengantar yang baik bagi mereka yang sudah lama ingin mulai memahami semua ini, tetapi ada sesuatu yang menghalangi;)

gambar

Hari ini di PhysTech ada kolaborasi aktif dari "Akademi" dan mitra industri. Secara khusus, ada banyak laboratorium menarik dari perusahaan seperti Sberbank, Biocad, 1C, Tinkoff, MTS, Huawei di Sekolah Matematika Terapan dan Ilmu Komputer PhysTech .

Saya terinspirasi untuk menulis artikel ini dengan bekerja di Laboratorium Sistem Cerdas Hibrida , dibuka oleh VkusVill . Laboratorium memiliki tugas ambisius - untuk membangun toko yang berfungsi tanpa meja kas, terutama dengan bantuan visi komputer. Selama hampir satu tahun bekerja, saya memiliki kesempatan untuk mengerjakan banyak tugas penglihatan, yang akan dibahas dalam dua bagian ini.

Berbelanja tanpa meja kas? Di suatu tempat saya sudah mendengarnya ..
Mungkin, pembaca yang budiman, Anda berpikir tentang Amazon Go . Dalam arti tertentu, tugasnya adalah mengulang kesuksesan mereka, tetapi keputusan kami lebih pada implementasi daripada membangun toko seperti itu dari awal untuk banyak uang .

Kami akan bergerak sesuai rencana:

  1. Motivasi dan apa yang terjadi
  2. Klasifikasi sebagai gaya hidup
  3. Arsitektur jaringan saraf convolutional: 1000 cara untuk mencapai satu tujuan
  4. Visualisasi jaringan saraf convolutional: tunjukkan semangat
  5. Saya sendiri adalah semacam ahli bedah: kami mengekstrak fitur dari jaringan saraf
  6. Tetap dekat: pembelajaran representasi untuk orang dan individu
  7. Bagian 2: mendeteksi, mengevaluasi postur dan mengenali tindakan tanpa spoiler

Motivasi dan apa yang terjadi


Untuk siapa artikel itu?
Artikel ini lebih berfokus pada orang yang sudah terbiasa dengan pembelajaran mesin dan jaringan saraf. Namun, saya menyarankan Anda untuk membaca setidaknya dua bagian pertama - tiba-tiba semuanya akan menjadi jelas :)

Pada 2019, semua orang berbicara tentang kecerdasan buatan, revolusi industri keempat dan pendekatan umat manusia terhadap singularitas . Keren, keren, tapi saya ingin spesifik. Bagaimanapun, kami adalah teknisi yang ingin tahu yang tidak percaya pada dongeng tentang AI, kami percaya pada pengaturan formal tugas, matematika dan pemrograman. Dalam artikel ini, kita akan berbicara tentang kasus-kasus spesifik menggunakan AI sangat modern - penggunaan pembelajaran yang mendalam (yaitu, jaringan saraf convolutional) dalam berbagai tugas penglihatan komputer.

Ya, kami akan berbicara secara khusus tentang kisi-kisi, kadang-kadang menyebutkan beberapa ide dari pandangan "klasik" (kami akan memanggil seperangkat metode dalam visi yang digunakan sebelum jaringan saraf, tetapi ini sama sekali tidak berarti bahwa mereka tidak digunakan sekarang).

Saya ingin belajar visi komputer dari awal
Saya merekomendasikan kursus Anton Konushin "Pengantar Visi Komputer" . Secara pribadi, saya melalui rekannya di SHAD, yang meletakkan dasar yang kuat dalam memahami pemrosesan gambar dan video.

gambar

Menurut pendapat saya, aplikasi pertama yang sangat menarik dari jaringan saraf dalam penglihatan, yang diliput di media pada tahun 1993, adalah pengenalan tulisan tangan oleh Jan LeCun . Sekarang dia adalah salah satu AI utama di Facebook AI Research , tim mereka telah merilis banyak hal-hal Open Source yang bermanfaat .

Saat ini, visi digunakan di banyak bidang. Saya akan memberikan beberapa contoh menarik:

gambar
gambar


Tesla dan Yandex kendaraan tak berawak

gambar


Analisis pencitraan medis dan prediksi kanker

gambar


Konsol gim: Kinect 2.0 (meskipun juga menggunakan informasi mendalam, yaitu gambar RGB-D)

gambar



Pengenalan Wajah: Apple FaceID (menggunakan beberapa sensor)

gambar


Peringkat Titik Wajah: topeng Snapchat

gambar


Biometri gerakan wajah dan mata (contoh dari proyek FPMI MIPT )

gambar


Cari berdasarkan gambar: Yandex dan Google

gambar


Pengakuan teks dalam gambar ( Pengenalan Karakter Optik )

gambar

gambar


Drone dan robot: menerima dan memproses informasi melalui visi

gambar

Odometri : membangun peta dan perencanaan saat memindahkan robot

gambar


Memperbaiki grafik dan tekstur dalam gim video

gambar


Terjemahan gambar: Yandex dan Google

gambar

gambar


Augmented Reality: Leap Motion (Project North Star) dan Microsoft Hololens

gambar



Transfer Gaya dan Tekstur: Prisma , PicsArt

Belum lagi banyaknya aplikasi dalam berbagai tugas internal perusahaan. Facebook, misalnya, juga menggunakan visi untuk memfilter konten media. Metode visi komputer juga digunakan dalam pengujian kualitas / kerusakan di industri .

Kenyataan augmented di sini harus, pada kenyataannya, diberi perhatian khusus, karena ia tidak bekerja dalam waktu dekat, ini mungkin menjadi salah satu area utama dari penerapan visi.

Termotivasi Dibebankan biaya. Ayo pergi:

Klasifikasi sebagai gaya hidup



gambar

Seperti yang saya katakan, di tahun 90-an, jala ditembakkan di depan mata. Dan mereka memotret dalam tugas khusus - tugas mengklasifikasikan gambar angka tulisan tangan ( dataset MNIST yang terkenal). Secara historis, itu adalah tugas mengklasifikasikan gambar yang menjadi dasar untuk menyelesaikan hampir semua tugas berikutnya dalam penglihatan. Pertimbangkan contoh spesifik:

Tugas : Folder dengan foto diberikan di pintu masuk, setiap foto memiliki objek tertentu: baik kucing, anjing, atau seseorang (bahkan jika tidak ada foto "sampah", itu adalah tugas yang sangat vital, tetapi Anda harus mulai dari suatu tempat). Anda perlu menguraikan gambar menjadi tiga folder: /cats , /dogs dan /leather_bags /humans , menempatkan hanya foto dengan objek yang sesuai di setiap folder.

Apa itu gambar / foto?
gambar
Hampir di semua tempat dalam penglihatan, biasanya digunakan untuk bekerja dengan gambar dalam format RGB. Setiap gambar memiliki tinggi (H), lebar (W), dan kedalaman 3 (warna). Dengan demikian, satu gambar dapat direpresentasikan sebagai tensor dimensi HxWx3 (setiap piksel adalah satu set tiga angka - nilai intensitas dalam saluran).




Bayangkan kita belum terbiasa dengan visi komputer, tetapi kita tahu pembelajaran mesin. Gambar hanyalah tensor angka dalam memori komputer. Kami meresmikan tugas dalam hal pembelajaran mesin: objek adalah gambar, tanda-tandanya adalah nilai dalam piksel, jawaban untuk masing-masing objek adalah label kelas (kucing, anjing atau orang). Ini adalah tugas klasifikasi murni.

Jika sekarang sudah menjadi sulit ..
... maka lebih baik membaca terlebih dahulu 4 artikel pertama dari OpenDataScience ML Open Course dan membaca artikel yang lebih bersifat pengantar tentang visi, misalnya, kuliah yang bagus di Small ShAD .

Anda dapat mengambil beberapa metode dari tampilan "klasik" atau pembelajaran mesin "klasik", yaitu, bukan jaringan saraf. Pada dasarnya, metode-metode ini terdiri dari penyorotan pada gambar-gambar dari fitur-fitur tertentu (titik-titik khusus) atau daerah-daerah lokal yang akan mencirikan gambar tersebut (โ€œ sekumpulan kata visual โ€). Biasanya semuanya bermuara pada sesuatu seperti SVM lebih dari HOG / SIFT .

Tetapi kami berkumpul di sini untuk berbicara tentang jaringan saraf, jadi kami tidak ingin menggunakan tanda-tanda yang kami ciptakan, tetapi ingin jaringan melakukan segalanya untuk kami. Pengklasifikasi kami akan mengambil tanda-tanda objek sebagai input dan mengembalikan prediksi (label kelas). Di sini, nilai intensitas dalam piksel bertindak sebagai tanda (lihat model gambar di
spoiler di atas). Ingatlah bahwa gambar adalah tensor ukuran (Tinggi, Lebar, 3) (jika warnanya). Saat belajar memasuki kisi-kisi, semua ini biasanya disajikan bukan oleh satu gambar dan bukan oleh seluruh dataset, tetapi secara batch, yaitu dalam porsi kecil dari objek (misalnya, 64 gambar dalam kumpulan).

Dengan demikian, jaringan menerima tensor ukuran input (BATCH_SIZE, H, W, 3). Anda dapat "memperluas" setiap gambar menjadi garis vektor nomor H * W * 3 dan bekerja dengan nilai-nilai dalam piksel seperti halnya tanda-tanda dalam pembelajaran mesin, Multilayer Perceptron (MLP) biasa akan melakukan hal itu, tetapi terus terang, seperti itu garis dasar, karena bekerja dengan piksel sebagai baris vektor tidak memperhitungkan, misalnya, invariansi objek dalam gambar. Kucing yang sama bisa berada di tengah foto, dan di sudut, MLP tidak akan mempelajari pola ini.

Jadi, Anda memerlukan sesuatu yang lebih cerdas, misalnya operasi konvolusi. Dan ini tentang visi modern, tentang jaringan saraf convolutional :

Kode pelatihan jaringan konvolusi mungkin terlihat seperti ini (pada kerangka PyTorch)
 #    : # https://pytorch.org/tutorials/beginner/blitz/cifar10_tutorial.html import torch.nn as nn import torch.nn.functional as F import torch.optim as optim class Net(nn.Module): def __init__(self): super(Net, self).__init__() self.conv1 = nn.Conv2d(3, 6, 5) self.pool = nn.MaxPool2d(2, 2) self.conv2 = nn.Conv2d(6, 16, 5) self.fc1 = nn.Linear(16 * 5 * 5, 120) self.fc2 = nn.Linear(120, 84) self.fc3 = nn.Linear(84, 10) def forward(self, x): x = self.pool(F.relu(self.conv1(x))) x = self.pool(F.relu(self.conv2(x))) x = x.view(-1, 16 * 5 * 5) x = F.relu(self.fc1(x)) x = F.relu(self.fc2(x)) x = self.fc3(x) return x net = Net() criterion = nn.CrossEntropyLoss() optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9) for epoch in range(2): # loop over the dataset multiple times running_loss = 0.0 for i, data in enumerate(trainloader, 0): # get the inputs inputs, labels = data # zero the parameter gradients optimizer.zero_grad() # forward + backward + optimize outputs = net(inputs) loss = criterion(outputs, labels) loss.backward() optimizer.step() # print statistics running_loss += loss.item() if i % 2000 == 1999: # print every 2000 mini-batches print('[%d, %5d] loss: %.3f' % (epoch + 1, i + 1, running_loss / 2000)) running_loss = 0.0 print('Finished Training') 


Karena sekarang kita berbicara tentang pelatihan dengan seorang guru , kita memerlukan beberapa komponen untuk melatih jaringan saraf:

  • Data (sudah ada)
  • Arsitektur Jaringan (Sorotan)
  • Fungsi kerugian yang akan memberi tahu bagaimana jaringan saraf untuk belajar (ini akan lintas-entropi )
  • Metode optimasi (akan mengubah bobot jaringan ke arah yang benar)
  • Tetapkan arsitektur dan hyperparameter optimizer (misalnya, ukuran langkah optimizer, jumlah neuron dalam lapisan, koefisien regularisasi)

Inilah yang diimplementasikan dalam kode, jaringan saraf convolutional itu sendiri dijelaskan dalam kelas Net ().

Jika Anda ingin pelan-pelan dan sejak awal belajar tentang konvolusi dan jaringan konvolusi, saya merekomendasikan kuliah di Deep Learning School (MIPT MIPT) (dalam bahasa Rusia) tentang topik ini, dan, tentu saja, kursus Stanford cs231n (dalam bahasa Inggris) .

Deep Learning School - apa itu?
Deep Learning School di Laboratorium Inovasi FPMI MIPT adalah organisasi yang secara aktif terlibat dalam pengembangan kursus bahasa Rusia terbuka di jaringan saraf. Dalam artikel ini saya akan merujuk tutorial video ini beberapa kali.

gambar

Singkatnya, operasi konvolusi memungkinkan Anda menemukan pola pada gambar berdasarkan variabilitasnya. Ketika kami melatih jaringan saraf convolutional (ind: Convolutional Neural Networks), kami, pada kenyataannya, menemukan filter konvolusi (bobot neuron) yang menggambarkan gambar dengan baik, dan dengan baik sehingga Anda dapat secara akurat menentukan kelas dari mereka. Banyak cara telah ditemukan untuk membangun jaringan semacam itu. Lebih dari yang Anda pikirkan ...

Arsitektur jaringan saraf convolutional: 1000 cara untuk mencapai satu tujuan



gambar


Ya, ya, ulasan arsitektur lain . Tapi di sini saya akan mencoba membuatnya se relevan mungkin!

Pertama ada LeNet , itu membantu Jan LeCun mengenali angka pada tahun 1998. Ini adalah jaringan saraf convolutional pertama untuk klasifikasi. Fitur utamanya adalah dia pada dasarnya mulai menggunakan operasi konvolusi dan pengumpulan .

gambar

Kemudian ada jeda dalam pengembangan grid, tetapi perangkat keras tidak diam, perhitungan efektif pada GPU dan XLA dikembangkan . Pada 2012, AlexNet muncul, ia memotret dalam kompetisi ILSVRC ( ImageNet Large-Scale Visual Recognition Challenge ).

Penyimpangan kecil tentang ILSVRC
ImageNet dirakit pada 2012, dan ribuan gambar dan 1.000 kelas digunakan untuk kompetisi ILSVRC. ImageNet saat ini memiliki ~ 14 juta gambar dan 21.841 kelas (diambil dari situs resmi), tetapi untuk kompetisi mereka biasanya hanya memilih satu subset. ILSVRC kemudian menjadi kompetisi klasifikasi gambar tahunan terbesar. Ngomong-ngomong, kami baru-baru ini menemukan cara melatih di ImageNet dalam hitungan menit .

Di ImageNet (dalam ILSVRC) dari 2010 hingga 2018 mereka menerima jaringan SOTA dalam klasifikasi gambar. Benar, sejak 2016, kompetisi dalam pelokalan, pendeteksian dan pemahaman adegan, daripada klasifikasi, lebih relevan.

Biasanya, berbagai tinjauan arsitektur menjelaskan hal-hal yang pertama di ILSVRC dari 2010 hingga 2016, dan pada beberapa jaringan individu. Agar tidak mengacaukan cerita, saya menempatkannya di bawah spoiler di bawah, mencoba untuk menekankan ide-ide utama:

Arsitektur dari 2012 hingga 2015
TahunArtikelIde kunciBerat
2012Alexnetgunakan dua bundel berturut-turut; bagilah pelatihan jaringan menjadi dua cabang paralel240 MB
2013Zfnetukuran filter, jumlah filter dalam lapisan-
2013Makan berlebihansalah satu detektor jaringan saraf pertama-
2014Vggkedalaman jaringan (13-19 lapisan), penggunaan beberapa blok Conv-Conv-Pool dengan ukuran konvolusi yang lebih kecil (3x3)549MB (VGG-19)
2014Inception (v1) (alias GoogLeNet)Konvolusi 1x1 (ide dari Jaringan-dalam-Jaringan ), kerugian tambahan (atau pengawasan mendalam ), penumpukan output dari beberapa konvolusi (Inception-block)-
2015Resnetkoneksi residual , sangat dalam (152 lapisan ..)98 MB (ResNet-50), 232 MB (ResNet-152)




Ide-ide dari semua arsitektur ini (kecuali untuk ZFNet, biasanya disebutkan sedikit) pada suatu waktu adalah kata baru dalam jaringan saraf untuk penglihatan. Namun, setelah 2015 ada banyak perbaikan yang lebih penting, misalnya, Inception-ResNet, Xception, DenseNet, SENet. Di bawah ini saya mencoba mengumpulkannya di satu tempat.

Arsitektur dari 2015 hingga 2019
TahunArtikelIde kunciBerat
2015Inception v2 dan v3dekomposisi paket menjadi paket 1xN dan Nx192 MB
2016Inception v4 dan Inception-ResNetkombinasi Inception dan ResNet215 MB
2016-17Tulis ulangTempat kedua ILSVRC, penggunaan banyak cabang (blok Generalisasi "umum")-
2017Xceptionkonvolusi terpisah yang mendalam , beratnya kurang dengan akurasi sebanding dengan Inception88 MB
2017DensenetBlok padat ringan tapi akurat33 MB (DenseNet-121), 80 MB (DenseNet-201)
2018SenetBlok Squeeze-and-Excitation46 MB (SENet-Inception), 440 MB (SENet-154)


Sebagian besar model untuk PyTorch dapat ditemukan di sini , dan ada hal yang sangat keren .

Anda mungkin telah memperhatikan bahwa keseluruhan beratnya cukup banyak (saya ingin maksimum 20 MB, atau bahkan kurang), sementara saat ini mereka menggunakan perangkat seluler di mana-mana dan IoT semakin populer, yang berarti Anda juga ingin menggunakan kisi di sana.

Hubungan antara berat model dan kecepatan
Karena jaringan saraf dalam dirinya sendiri hanya mengalikan tensor, jumlah operasi perkalian (baca: jumlah bobot) secara langsung memengaruhi kecepatan kerja (jika pasca-pemrosesan atau pra-pemrosesan padat karya tidak digunakan). Kecepatan jaringan itu sendiri tergantung pada implementasi (kerangka kerja), perangkat keras yang menjalankannya, dan ukuran gambar input.

Para penulis banyak artikel mengambil jalan untuk menciptakan arsitektur cepat, saya mengumpulkan metode mereka di bawah spoiler di bawah ini:


Angka-angka di semua tabel diambil dari langit-langit dari repositori, dari tabel Aplikasi Keras dan dari artikel ini .

Anda bertanya: "Mengapa Anda menulis tentang seluruh" kebun binatang "model ini? Dan mengapa tugas klasifikasi? Tapi kami ingin mengajarkan mesin untuk melihat, dan klasifikasi hanyalah semacam tugas sempit .. ". Faktanya adalah bahwa jaringan saraf untuk mendeteksi objek, mengevaluasi postur / titik, mengidentifikasi kembali dan mencari dalam gambar menggunakan model klasifikasi untuk tulang punggung , dan 80% keberhasilan tergantung pada mereka.

Tapi saya ingin entah bagaimana lebih mempercayai CNN, atau mereka memikirkan kotak hitam, tetapi apa yang "dalam" tidak jelas. Untuk lebih memahami mekanisme fungsi jaringan konvolusional, peneliti menemukan penggunaan visualisasi.

Visualisasi jaringan saraf convolutional: tunjukkan semangat


Langkah penting untuk memahami apa yang terjadi di dalam jaringan konvolusional adalah artikel "Visualisasi dan Memahami Jaringan Konvolusional" . Di dalamnya, penulis mengusulkan beberapa cara untuk memvisualisasikan apa yang neuron (pada bagian gambar mana) merespon lapisan CNN yang berbeda (Saya juga merekomendasikan menonton kuliah Stanford tentang topik ini ). Hasilnya sangat mengesankan: penulis menunjukkan bahwa lapisan pertama dari jaringan konvolusional merespons beberapa "hal tingkat rendah" berdasarkan jenis tepi / sudut / garis, dan lapisan terakhir sudah merespons seluruh bagian gambar (lihat gambar di bawah), yaitu, mereka sudah menanggung dalam dirinya sendiri beberapa semantik.

gambar


Lebih jauh, proyek untuk visualisasi mendalam dari Cornell University dan perusahaan tersebut memajukan visualisasi lebih jauh, sementara DeepDream yang terkenal belajar untuk mengubah gaya yang adiktif (di bawah ini adalah gambar dari deepdreamgenerator.com ).

gambar


Pada tahun 2017, sebuah artikel yang sangat bagus diterbitkan di Distill , di mana mereka melakukan analisis terperinci tentang apa yang dilihat oleh setiap lapisan, dan yang terbaru (pada Maret 2019) Google menciptakan atlas aktivasi : peta unik yang dapat dibangun untuk setiap lapisan jaringan, yang membawa kita lebih dekat untuk memahami gambaran keseluruhan dari pekerjaan CNN.



Jika Anda ingin bermain dengan visualisasi sendiri, saya akan merekomendasikan Lucid dan TensorSpace .

Oke, CNN tampaknya benar sampai batas tertentu. Kita perlu belajar bagaimana menggunakan ini dalam tugas-tugas lain, dan bukan hanya dalam klasifikasi. Ini akan membantu kami mengekstrak gambar Embedding'ov dan Transfer Learning.

Saya sendiri adalah semacam ahli bedah: kami mengekstrak fitur dari jaringan saraf


Bayangkan ada gambar, dan kami ingin menemukan gambar yang terlihat seperti itu secara visual (ini, misalnya, pencarian dalam gambar di Yandex. Gambar). Sebelumnya (sebelum jaringan saraf), insinyur digunakan untuk mengekstraksi fitur secara manual, misalnya, menciptakan sesuatu yang menggambarkan gambar dengan baik dan memungkinkan untuk dibandingkan dengan yang lain. Pada dasarnya, metode ini ( HOG , SIFT ) beroperasi dengan gradien gambar , biasanya hal ini disebut deskriptor gambar "klasik". Yang menarik, saya merujuk ke artikel dan kursus Anton Konushin (ini bukan iklan, hanya kursus yang bagus :)

gambar


Dengan menggunakan jaringan saraf, kita tidak dapat menemukan fitur dan heuristik ini sendiri, tetapi melatih model dengan benar dan kemudian mengambil output dari satu atau lebih lapisan jaringan sebagai tanda-tanda gambar .

gambar

Melihat lebih dekat pada semua arsitektur memperjelas bahwa ada dua langkah untuk klasifikasi di CNN:
1). Lapisan ekstraktor fitur untuk mengekstraksi fitur informatif dari gambar menggunakan lapisan konvolusional
2). Belajar di atas fitur-fitur ini Fully Connected (FC) layers classifier

gambar


Menanamkan gambar (fitur) hanya tentang fakta bahwa Anda dapat mengambil tanda-tanda mereka setelah ekstraktor Fitur dari jaringan saraf convolutional (meskipun mereka dapat dikumpulkan dengan cara yang berbeda) sebagai deskripsi gambar yang informatif. Artinya, kami melatih jaringan untuk klasifikasi, dan kemudian mengambil jalan keluar di depan lapisan klasifikasi. Tanda-tanda ini disebut fitur , deskriptor jaringan saraf, atau embeddings gambar (meskipun embeddings biasanya diterima di NLP, karena ini adalah visi, saya akan sering berbicara fitur ). Biasanya ini adalah semacam vektor numerik, misalnya, 128 angka yang sudah dapat Anda gunakan.

Tetapi bagaimana dengan auto encoders?
Ya, pada kenyataannya, fitur dapat diperoleh oleh penyandi otomatis . Dalam praktik saya, mereka melakukannya dengan cara yang berbeda, tetapi, misalnya, dalam artikel tentang identifikasi ulang (yang akan dibahas nanti), lebih sering mereka masih mengambil fitur setelah extractor, daripada melatih auto-encoder untuk ini. Tampaknya bagi saya adalah layak untuk melakukan percobaan di kedua arah, jika pertanyaannya adalah apa yang lebih baik.

Dengan demikian, saluran untuk menyelesaikan masalah pencarian dengan gambar dapat diatur secara sederhana: kami menjalankan gambar melalui CNN, mengambil tanda dari lapisan yang diinginkan dan membandingkan fitur-fitur ini satu sama lain dari gambar yang berbeda. Sebagai contoh, kami hanya mempertimbangkan jarak Euclidean dari vektor-vektor ini.

gambar


Transfer Learning adalah teknik yang terkenal untuk pelatihan jaringan saraf yang efektif yang sudah dilatih pada dataset tertentu untuk tugas mereka. Seringkali mereka juga mengatakan Fine Tuning alih-alih Transfer Learning, dalam kursus Stanford mencatat cs231n konsep-konsep ini dibagikan, mereka mengatakan, Transfer Learning adalah ide umum, dan Fine Tuning adalah salah satu implementasi dari teknik ini. Ini tidak begitu penting bagi kita di masa depan, hal utama adalah memahami bahwa kita bisa melatih jaringan untuk memprediksi dengan baik pada dataset baru, mulai dari bukan dari bobot acak, tetapi dari mereka yang dilatih pada beberapa tipe ImageNet besar. Ini terutama benar ketika ada sedikit data, dan Anda ingin menyelesaikan masalah secara kualitatif.

Pelajari lebih lanjut tentang Transfer Belajar

Namun, hanya mengambil fitur yang diperlukan dan melakukan pelatihan tambahan dari dataset ke dataset mungkin tidak cukup, misalnya, untuk tugas mencari orang / orang / sesuatu yang serupa. Foto orang yang sama secara visual kadang-kadang bisa lebih berbeda daripada foto orang yang berbeda. Penting untuk membuat jaringan menyorot persis tanda-tanda yang melekat pada satu orang / objek, bahkan jika sulit bagi kita untuk melakukan ini dengan mata kita. Selamat datang di dunia pembelajaran representasi .

Tetap dekat: pembelajaran representasi untuk orang dan individu


Catatan Terminologi
Jika Anda membaca artikel ilmiah, kadang-kadang tampaknya beberapa penulis memahami frasa pembelajaran metrik secara berbeda, dan tidak ada konsensus tentang metode mana yang disebut pembelajaran metrik dan mana yang tidak. Itulah sebabnya dalam artikel ini saya memutuskan untuk menghindari ungkapan khusus ini dan menggunakan pembelajaran representasi yang lebih logis, beberapa pembaca mungkin tidak setuju dengan ini - saya akan senang untuk membahas dalam komentar.

Kami mengatur tugas:

  • Tugas 1 : ada galeri (set) foto-foto wajah orang, kami ingin jaringan dapat merespons sesuai dengan foto baru baik dengan nama seseorang dari galeri (seharusnya ini dia), atau mengatakan bahwa tidak ada orang seperti itu di galeri (dan, mungkin, kami tambahkan ke dalamnya orang baru)

  • Tugas 2 : hal yang sama, tetapi kami bekerja bukan dengan foto wajah, tetapi dengan potongan orang



Tugas pertama biasanya disebut pengenalan wajah , yang kedua - identifikasi ulang (disingkat Reid ). Saya menggabungkan mereka menjadi satu blok, karena solusi mereka menggunakan ide-ide yang sama hari ini: untuk mempelajari embeddings gambar yang efektif yang dapat mengatasi situasi yang agak sulit, hari ini mereka menggunakan berbagai jenis kerugian, seperti, misalnya, triplet loss , quadruplet loss , kehilangan pusat-kontras , kehilangan cosinus .



Masih ada jaringan Siam yang bagus, tapi jujur โ€‹โ€‹saya tidak menggunakannya sendiri. Omong-omong, tidak hanya kerugian itu sendiri "memutuskan", tetapi bagaimana sampel pasangan positif dan negatif untuk itu, penulis artikel Sampling masalah dalam pembelajaran embedding mendalam menekankan.

Inti dari semua kerugian ini dan jaringan Siam adalah sederhana - kami ingin gambar satu kelas (orang) di ruang laten fitur (embeddings) menjadi "dekat", dan dari berbagai kelas (orang) menjadi "jauh". Kedekatan biasanya diukur sebagai berikut: pengambilan gambar dari jaringan saraf diambil (misalnya, vektor 128 angka) dan kami juga mempertimbangkan jarak Euclidean biasa antara vektor-vektor ini atau kedekatan cosinus. Bagaimana mengukurnya, lebih baik memilih pada dataset / tugas Anda.

Representasi skematis dari pipa penyelesaian masalah pada pembelajaran representasi terlihat seperti ini:



Tapi lebih tepatnya, seperti ini
: (Softmax + CrossEntropy), (Triplet, Contrastive, etc.). positive' negative'

: - , โ€” . , โ€” - , (, ). .


: - ( MUST READ! ) , FaceNet , ArcFace , CosFace .

gambar


: dlib , OpenFace , FaceNet repo , . , ArcFace CosFace ( , - , - ).

, , ?


, - , , , - , - .



Reid : , , 10 , 5 ( ), 50 . (), , , ID. , : , , , , , , ( / ..).



, Reid โ€” . , - , - negative' positive'.

Reid 2016 . , , โ€” representation learning. , -, , Aligned Re-Id (, , ), Generative Adversarial Networks (GAN) .



gambar


, , -, . , - , , , . โ€” !


OpenReid TorchReid . โ€” , , . PyTorch, Readme Person Re-identification, .

face- reid- ( , ). ? โ€ฆ


, . , , ? ( ) :

  • : , ,
  • : ,
  • : ,

float64, , , float32 . low-precision training . , , Google MorphNet , ( ) .

?



gambar


DL CV: , , , . : , , . , , , . .

Stay tuned!

PS: - ?
(, , ), , , . . , , ( ).

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


All Articles