Salah satu subtugas penting dari analisis video adalah melacak objek pada video. Ini tidak terlalu primitif bahwa saya harus turun ke tingkat pixel-by-pixel, tetapi tidak begitu rumit untuk secara jelas membutuhkan jaringan saraf multilayer untuk solusinya. Pelacakan dapat digunakan baik sebagai tujuan itu sendiri maupun sebagai bagian dari algoritma lainnya:
- Menghitung orang unik yang memasuki zona tertentu atau melintasi perbatasan dalam bingkai
- Identifikasi rute khas mobil di tempat parkir dan orang-orang di toko
- Rotasi otomatis kamera pengintai saat objek digeser
Tanpa melihat literatur, saya dapat mengatakan dengan keyakinan bahwa cara terbaik untuk menyelesaikan masalah adalah dengan menggunakan jaringan saraf. Secara umum, Anda tidak dapat menulis apa pun lebih lanjut, tetapi tidak selalu mungkin untuk terburu-buru melakukan tugas dengan sepasang GTX 1080Ti. Siapa yang peduli bagaimana melacak objek pada video dalam kasus seperti itu, silakan, di bawah kucing. Saya akan mencoba tidak hanya menjelaskan cara kerja pelacak ASEF dan MOSSE, tetapi untuk membawa Anda ke solusi sehingga rumusnya tampak jelas.
Untuk mulai dengan, kami akan menjawab pertanyaan pendahuluan: mengapa menemukan sesuatu ketika Anda bisa memberi makan setumpuk video yang lambat dan meninggalkan komputer selama beberapa minggu? Pendekatan jaringan saraf memiliki satu kelemahan serius: bahkan pada kartu video modern sulit untuk mencapai tingkat api yang baik dari jaringan. Ini bukan masalah jika kami menganalisis video yang direkam, tetapi memasukkan tongkat ke roda jika Anda ingin bekerja secara real time. Misalkan kita ingin memproses video dari lima kamera pada 10 FPS. Bahkan dengan kondisi yang relatif ringan seperti itu, jaringan saraf harus memiliki waktu inferensi kurang dari
frac10005 times10=$2 milidetik (dalam kondisi non-paralelisme lengkap). Sebagai perbandingan, YoloV3, jaringan classifier dengan arsitektur yang relatif sederhana, dapat memuntahkan gambar
50 milidetik. Selain itu, solusi berdasarkan kartu grafis yang kuat bisa jadi mahal.
Artikel ini mengasumsikan bahwa Anda telah berurusan dengan pemrosesan gambar mesin, terbiasa dengan operasi dasar aljabar linier (konvolusi, norma, inversi matriks) dan secara umum memahami transformasi Fourier.
Selanjutnya:
- A odotB singkatan dari perkalian matriks elemen A dan B
- A otimesB menunjukkan konvolusi matriks A dan B
- hatA( omega, nu)= mathcalF(A(x,y)) berarti itu hatA( omega, nu) - Matriks frekuensi dari transformasi Fourier cepat yang diterapkan pada gambar A .
- parallelA parallel2 - menunjukkan jumlah kuadrat elemen-elemen matriks A
Keputusan sepele
Sekilas, tugas melacak subjek tertentu tampaknya tidak begitu rumit.
Semoga kita punya
T frame video berurutan
It ukurannya
w pada
h piksel. Di bingkai awal video
I0 sebuah persegi panjang dilingkari di sekitar suatu objek
F0m pada
n . Diperlukan untuk menemukan lokasi tubuh ini di semua bingkai lainnya
It .
Kami menghilangkan noise pada gambar, lalu menormalkan masing-masing dalam kisaran dari -1 hingga 1 sehingga perubahan umum dalam kecerahan tidak memengaruhi deteksi. Ambil bingkai video pertama tanpa markup
I1 . Jika
I0 dan
I1 - frame video yang berdekatan dengan FPS yang bagus, kecil kemungkinan objek yang diinginkan jauh dari posisi semula. Manfaatkan ini. Hentikan
I1 persegi panjang
F1 dari tempat di mana tubuh yang diinginkan sebelumnya berada. "Seret"
F0 melalui
F1 dan pada setiap titik kita menghitung kuadrat dari jumlah perbedaan
GL2(i,j)= parallelF1(i,j)−F0 parallel2,i di[0,m],j di[0,n]
di mana menghitung perbedaan
GL2(i,j) harus menggabungkan pusat
F0 dengan elemen
(i,j) masuk
F1 , dan nilai yang hilang menjadi nol. Setelah itu di dalam matriks
GL2 minimum dicari; lokasinya minus koordinat pusat
F1 dan akan menjadi offset dari objek yang diinginkan oleh
I1 .
Agar transisi yang tajam ke nol tidak "berdering" selama deteksi, lebih baik mengambil persegi panjang sedikit lebih awal dari yang diperlukan dan dengan lancar mengurangi ke nol nilai lebih dekat ke batas
F0 dan
F1 . Untuk ini, masing-masing
F perlu dikalikan dengan topeng. Untuk objek persegi, peserta pameran lama yang baik akan melakukannya.
A= exp frac(x−i)2+(y−j)2 sigma2 (dimana
(x,y) Adalah pusat jendela), tetapi dalam kasus umum lebih baik mengambil jendela Hanning dua dimensi.
Untuk
I2 jendela
F2 diambil dari posisi yang diprediksi pada frame
I1 , dan seterusnya.
Sebaliknya
L2 norma bisa digunakan
L1 (
GL1(i,j)=|F1(i,j)−F0| ) dan minus korelasi silang dari matriks (
GnCC(i,j)=− sumklF1,kl(i,j)F0,kl,k dalam[0,m],l dalam[0,n] ) Keduanya dianggap sedikit lebih cepat daripada
L2 tetapi mereka memiliki karakteristik mereka sendiri.
L1 tidak dapat dibedakan dan kurang sensitif terhadap perbedaan besar dalam nilai piksel. Korelasi silang dapat menghasilkan positif palsu jika sampelnya kontras rendah dan gambar memiliki area yang sangat terang atau sangat gelap.
L2 -versi metrik tidak memiliki kelemahan seperti itu:
GL2= sum(F1,kl(i,j)−F0,kl)2
= jumlah(F1,kl(i,j))2−2F1,kl(i,j)F0,kl+(F0,kl)2
= jumlah(F1,kl(i,j))2− sum2F1,kl(i,j)F0,kl+ sum(F0,kl)2
=EF1(i,j)+2GnCC(i,j)+EF0
EF1(i,j) , "Energi" dari situs yang dipilih aktif
It bertindak sebagai faktor penyeimbang (
EF0 , jumlah kuadrat dari nilai piksel sampel adalah sama untuk semua posisi jendela dan tidak memiliki arti praktis di sini).
Bahkan algoritma primitif seperti itu dapat mengatasi dengan cukup baik dalam hal pergerakan linear objek (misalnya, kamera yang melihat ke arah conveyor). Namun, karena kesederhanaan model dan eksekusi, metode pelacakan ini memiliki beberapa kelemahan:
- Sebuah gerakan linear sederhana dari suatu objek tanpa perubahan di alam jarang terjadi. Sebagai aturan, badan di bidang pandang kamera dapat mengalami beberapa kelas perubahan. Dalam urutan meningkatnya kompleksitas: kenaikan / penurunan ukuran, belokan, transformasi affine, transformasi proyektif, transformasi nonlinier, perubahan dalam suatu objek. Bahkan jika kita menghilangkan perubahan objek dan transformasi nonlinier, kami ingin algoritma dapat pulih dari rotasi dan perubahan ukuran yang relatif sederhana. Jelas, prosedur di atas tidak memiliki properti ini. Mungkin F0 masih akan memberikan respons yang nyata pada objek, tetapi akan sulit untuk menentukan lokasi sampel yang tepat, dan trek akan terputus.
- Kami menunjukkan algoritma hanya satu sampel positif, sulit untuk mengatakan respons apa yang akan diberikan F0 jika benda serupa lainnya masuk ke jendela. Nah, jika objek yang diinginkan kontras dan memiliki struktur langka, tetapi bagaimana jika kita ingin memonitor sebuah mesin di aliran mesin lain? Pelacak dapat melompat secara tak terduga dari satu mobil ke mobil lain.
- Di setiap frame, kami membuang seluruh backstory. Mungkin, itu juga harus digunakan entah bagaimana.
- Selain itu, kita hanya belajar pada satu titik dalam gambar. Akan lebih baik jika, di dekat lokasi objek yang benar, pelacak juga akan memberikan respons yang baik. Agak berlawanan dengan intuisi, tetapi pikirkan: jika filter berada pada lokasi yang tepat dari objek dalam gambar (x,y) memberikan nilai terbaik, dan dalam (x+1,y+1) - Sesuatu yang acak, yang berarti bahwa dia terlalu sensitif terhadap detail kecil yang dapat dengan mudah berubah. Sebaliknya, jika dalam (x,y) dan masuk (x+1,y+1) kira-kira sama dengan nilai yang baik, filter "dikaitkan" pada tanda-tanda yang lebih besar dan, kami berharap, lebih permanen.
- Dengan penerapan prosedur pelacakan yang naif, untuk setiap piksel bingkai kami mengalikan seluruh jendela dengan item yang dipilih dengan bagian yang sesuai dari bingkai ini. Kompleksitas operasi ini adalah O(m2n2) . Dalam kasus seperti itu, tidak terlalu baik untuk melacak bahkan 50 hingga 50 objek piksel. Masalah ini sebagian diselesaikan dengan mengurangi ukuran video, tetapi ketika mengurangi gambar dengan lebar kurang dari 240 piksel, bahkan detail besar yang signifikan mulai hilang, yang membuat algoritma menjadi tidak berarti.
ASEF, MOSSE
Pendekatan sepele ++?
Gulung lengan baju kami dan coba pecahkan masalah di atas.
Menambah gambar asli. Kami menerapkan beberapa transformasi affine ringan. Anda juga dapat menambahkan noise atau mengubah gamma. Jadi, bukannya satu gambar, satu set mikrodata
P gambar. Ada banyak gambar, tetapi satu jendela tetap ada. Jadi sekarang kita tidak hanya memotong persegi panjang dari gambar, tetapi mencari beberapa filter
W yang akan memberi memberi respons yang baik untuk semua orang
Ip . Kami mengubah masalah menjadi masalah minimalisasi:
W: minW parallelFp−W parallel2,p in[1,P]
dimana
parallelFp−W parallel2 - jumlah kuadrat dari perbedaan piksel antara
W dan bagian yang sesuai dari lokasi yang tepat dari objek aktif
p gambar sintetis yang dibuat dari bingkai yang memiliki markup sejati.
Selain itu, Anda dapat mencicipi persegi panjang
jauh dari lokasi objek yang dilacak dan
memaksimalkan perbedaan yang ditunjukkan di atas.
Lebih sulit untuk menyarankan bahwa filter memberikan respons yang baik pada titik dekat lokasi objek yang tepat. Kita tahu itu di
(x,y) filter aplikasi dengan
L2 -metric harus memberikan 0, selanjutnya - lebih banyak, jauh - bahkan lebih. Selain itu, kami tidak memiliki arahan yang disukai, responsnya harus simetris terpusat
(x,y) . Sepertinya kita dapat secara matematis mengekspresikan seperti apa respons filter yang diterapkan pada gambar referensi! Penampilan yang tepat dapat bervariasi tergantung pada fungsi pelemahan respons spesifik, tetapi apakah semua orang menyukai orang Gaussians? Karena itu, kami menganggap itu
W diterapkan ke
Fp idealnya harus memberikan hasil
Gp=1− exp frac(x−i)2+(y−j)2 sigma2 . Oleh karena itu, masalah minimisasi berubah menjadi:
Dp(i,j)= parallelFp(i,j)−W parallel2
W: minW parallelDp(i,j)−Gp(i,j) parallel2,p dalam[1,P]
Sekarang kami tidak meminimalkan respons pada satu titik, tetapi meminimalkan penyimpangan respons dari yang diinginkan.
Tunggu sebentar ... Kita berhasil
P kalim kalin persamaan dengan
m kalin variabel untuk diminimalkan. Sepertinya kita overdid. Mari kita kembali sedikit.
Trik utama
Dari semua masalah, kesulitan terbesar adalah kompleksitas.
O(m2n2) . Mungkinkah memunculkan sesuatu selain pemecahan rumit dari satu kotak pencarian menjadi beberapa yang kecil atau mencari dalam gambar dalam resolusi kecil dan fine-tuning untuk presisi tinggi?
Ternyata kamu bisa! Matanalysis memberi tahu kita bahwa pelipatan fungsi dalam ruang biasa adalah kelipatan dari gambar Fourier mereka. Kami dapat menerapkan transformasi Fourier cepat ke gambar, mengalikan elemen frekuensinya dengan elemen, dan kemudian mengubah hasilnya kembali menjadi matriks untuk
O(mn logmn) , Yang jauh lebih cepat daripada meminimalkan matriks dengan jujur. Fourier! Siapa sangka! Di zaman tensorflow, dia masih bisa membantu kita dengan penglihatan komputer.
(Ini, omong-omong, menunjukkan prinsip matematika umum: jika Anda tidak ingin menyelesaikan masalah di ruang angkasa
X pindahkan ke luar angkasa
Y , putuskan di sana, dan transfer kembali keputusan itu. Solusinya seringkali lebih pendek daripada yang langsung.)
Seperti yang ditunjukkan di atas, kita dapat menggunakan korelasi silang untuk melokalisasi sampel dalam gambar. Tetapi korelasi silang adalah konvolusi dengan tercermin secara horizontal dan vertikal
W . Matanalisis menunjukkan bahwa dalam hal ini perlu untuk memperbanyak frekuensi
F pada matriks konjugat kompleks ke matriks frekuensi
W :
hatW( omega, nu)= mathcalF(W(x,y))
hatF( omega, nu)= mathcalF(F(x,y))
hatGconv( omega, nu)= mathcalF(Gconv(x,y))
Gconv=F otimesW rightarrow hatGconv= hatF odot hatW∗
dimana
Gconv= exp frac(x−i)2+(y−j)2 sigma2 - Fungsi respon sempurna pada gambar referensi. Harap perhatikan itu
L2 Kami meminimalkan metrik dan memaksimalkan metrik konvolusi, jadi sekarang, semakin besar responsnya, semakin baik.
Jika kami memiliki satu gambar, maka kami akan menemukan matriks frekuensi filter yang tepat:
hatW∗= frac hatGconv hatF
di mana sisi kanan mengacu pada pembagian elemen-bijaksana. Tapi sedikit lebih awal kami hasilkan
P gambar dari sumbernya. Kita bisa menerapkannya dengan pendekatan Fourier. Tidak ada filter dengan frekuensi seperti itu yang idealnya memuaskan semua gambar, tetapi Anda bisa mendapatkan sesuatu yang cukup baik. Ada dua cara untuk menyelesaikan masalah:
- Anda dapat menemukan satu set filter yang ideal, dan kemudian meratakannya menjadi satu. Ini adalah cara penulis rata-rata Filter Exact Sintetis (ASEF) pergi:
hatW∗= frac1P sumPp=1 hatW∗p= frac1P sumPp=1 frac hatGp hatFp
Di sini kita menggunakan properti linearitas dari gambar Fourier. Menambahkan frekuensi, seperti yang ditunjukkan di atas, kami tampaknya rata-rata beberapa bobot filter. - Anda dapat menemukan frekuensi filter yang memenuhi semua gambar rata-rata, kira-kira untuk L2 :
hatW∗: min hatW∗ sumPp=1 parallel hatFp odot hatW∗− hatGp parallel2
Untuk menemukan minimum, Anda harus mengambil turunan dari elemen filter: frac delta delta hatW∗ sumPp=1 parallel hatFp odot topiW∗− hatGp parallel2=0
Pengambilan jujur turunan ini dapat ditemukan dalam Pelacakan Objek Visual menggunakan Filter Korelasi Adaptif , yang menawarkan jumlah Output Minimum dari filter Kesalahan Kuadrat (filter MOSSE). Hasilnya adalah ini: hatW∗= frac sumPp=1 hatGp odot hatFp∗ sumPp=1 hatFp odot hatFp∗
Hmm, seolah-olah elemen serupa terlibat dalam formula. Di
P=1 rumus untuk ASEF dan MOSSE persis sama.
hatW∗ untuk satu gambar dapat direpresentasikan sebagai
hatW∗= frac hatGp hatFp= frac hatGp odot hatFp∗ hatFp odot hatFp∗
Pengganti dalam rumus untuk ASEF dan dapatkan
hatW∗= sumPp=1 frac hatGp odot hatFp∗ hatFp odot hatFp∗
Ya! Sekarang jauh lebih baik untuk melihat bahwa ASEF dan MOSSE hanya berbeda dalam metode rata-rata filter! Dikatakan bahwa MOSSE menghasilkan filter yang lebih baik daripada ASEF. Kedengarannya logis: menyesuaikan ke seluruh paket gambar secara keseluruhan lebih baik daripada rata-rata filter.
Setelah kami sampai
hatW∗ , kami menghitung respons di domain frekuensi
hatGconv= hatF odot hatW∗ , lalu kami menerjemahkannya ke domain spasial dan mencari maksimum di matriks yang dihasilkan
G . Di mana maksimumnya, ada posisi baru dari objek.
Poin tambahan
- Istilah dalam penyebut rumus memiliki makna fisik yang menarik. hatFp odot hatFp∗ Adalah spektrum energi persegi panjang dengan p gambar itu.
- Perhatikan simetri yang menarik. Itu perlu untuk melipatgandakan frekuensi filter dengan frekuensi gambar untuk mendapatkan respons. Sekarang Anda perlu mengalikan frekuensi respons dengan frekuensi gambar (dan menormalkan) untuk mendapatkan frekuensi filter.
- Dalam kehidupan nyata, pembagian elemen dapat menyebabkan pembagian dengan nol, sehingga konstanta regularisasi biasanya ditambahkan ke penyebut epsilon . Dikatakan bahwa pengaturan semacam itu menyebabkan filter untuk lebih memperhatikan frekuensi rendah, yang meningkatkan kemampuan generalisasi.
- Saat memproses video nyata, Anda biasanya ingin menyimpan informasi tentang objek yang dilacak yang diperoleh dari bingkai sebelumnya. Saat pindah ke bingkai berikutnya, Anda tidak bisa menghitung hatW dari awal, dan perbarui yang sebelumnya. Perbarui formula untuk ASEF:
hatW∗i= frac etaP sumPp=1 frac hatGp hatFp+(1− eta) hatW∗i−1
Untuk MOSSE, Anda harus mengakumulasikan pembilang dan penyebut secara terpisah:Ai= eta sumPp=1 hatGp odot hatFp∗+(1− eta)Ai−1
Bi= eta sumPp=1 hatFp odot hatFp∗+(1− eta)Bi−1
hatW∗i= fracAiBi
dimana eta - kecepatan belajar. - Penting untuk diingat bahwa transformasi Fourier tidak persis sama dengan perhitungan G jujur, seperti yang dijelaskan di awal artikel. Saat menghitung FFT, elemen yang hilang tidak hilang, tetapi diganti di sisi sebaliknya, seolah-olah gambar di-loop dari kanan ke kiri dan dari bawah ke atas. Tetapi pada awal artikel, kami sudah memutuskan untuk menggelapkan ujung-ujungnya F , jadi masalah ini tidak akan memiliki efek yang nyata.
- Seperti disebutkan di atas, korelasi silang memiliki fitur yang tidak menyenangkan: secara umum, filter cahaya dapat memberikan respons yang kuat di area putih gambar, bahkan jika mereka tidak bertepatan di area yang kontras. Masalahnya tidak terbatas pada ini. Bahkan satu piksel yang cocok dengan nilai yang sangat positif atau sangat negatif dapat mengganggu filter jika sampel secara keseluruhan kontras rendah. Untuk memperlancar efek ini, transformasi piksel gambar non-linier harus dimasukkan dalam preprocessing, yang akan "menekan" area yang terlalu terang dan terlalu gelap ke tengah. Karena hal ini, kebetulan area yang kontras ini memberikan kontribusi yang lebih kuat untuk metrik. Artikel ASEF dan MOSSE menggunakan logaritma:
I= logI+1
dimana pikselnya I dari 0 hingga 255. Menurut saya, ini terlalu keras, dan mengabaikan masalah respons yang kuat dari filter gelap di area hitam . Skema seperti itu berfungsi lebih baik:I=masuk(I−127) sqrt|I−127|
Kemudian muncul normalisasi, dan ternyata sebagian besar elemen berpusat di sekitar nol.
- Bagaimana algoritma seperti itu menentukan bahwa objek yang dilacak telah menghilang dari bingkai? Analisis yang lebih terperinci tentang respons yang diterima dari kerangka berikutnya akan membantu di sini. Pembuat MOSSE menawarkan indikator PSR - Peak to Sidelobe Ratio. Biarkan gmaks - elemen maksimum G sesuai dengan posisi objek yang baru (x,y) . Kami mengecualikan kuadrat dari pertimbangan 11 kali11 sekitar maksimum ini. Kami menghitung rata-rata dan standar deviasi untuk piksel yang tersisa ( musl, sigmasl ) Lalu
PSR= fracgmax− musl sigmasl
Jika nilai ini di atas ambang tertentu, maka deteksi dianggap berhasil. Ambang biasanya diambil di wilayah antara 3 dan 10. Untuk deteksi percaya diri, PSR biasanya disimpan di atas 20.
(perhatikan bahwa di sini PSR tidak berarti sama sekali apa yang biasanya berarti dalam teori pemrosesan sinyal; jadi jangan google, tidak ada yang baik akan keluar) - Algoritma ini sangat sederhana. Prosedur pelacakan pada Core-i7 pada gambar dengan 320x400 menggunakan implementasi OpenCV memakan waktu 0,5 hingga 2 milidetik, tergantung pada ukuran objek yang dilacak.
Algoritma MOSSE
Menyatukan semuanya.
Kondisi umum:Filter Frekuensi Matriks:
hatWMatriks bantu untuk menghitung frekuensi filter:
A,BMatriks frekuensi dari respons ideal yang diinginkan:
hatGKecepatan pelatihan selama pelacakan:
etaPersegi panjang dari posisi objek saat ini:
RJumlah Transformasi:
PAmbang Batas Respons:
PSRthrFungsi bantu:
Pelatihan . Input: Gambar
I kecepatan belajar saat ini
etasaatini- Anew:=0,Bnew:=0
- Sampai aku mengerti P transformasi:
- Terapkan transformasi affine acak kecil yang berpusat di tengah gambar. R
- Potong dari gambar persegi panjang dengan objek F
- Oleskan masker untuk membatalkan tepi dengan lancar
- Terjemahkan F dalam domain frekuensi: hatF
- Anew=Anew+ hatG odot hatF∗
- Bnew=Bnew+ hatF odot hatF∗
- Jika etacurrent geq1.0 lalu ganti A dan B pada Abaru dan Bbaru . Jika tidak:
B:= etaBnew+(1− eta)B
A:= etaAnew+(1− eta)A
- Hitung frekuensi filter:
hatW∗= fracAB
Inisialisasi . Input: Gambar
I persegi panjang di sekitar posisi objek
Rinit- R:=Rinit
- Persiapkan respons yang diinginkan G . Biasanya ini adalah matriks yang benar-benar nol dengan Gaussian kecil di tengah.
- Pelatihan : I , 1.0
- Terjemahkan G dalam domain frekuensi: hatG
Pelacakan : Input: Gambar
I- Potong persegi panjang F dari I untuk posisi objek yang ada sebelumnya R
- Oleskan masker untuk membatalkan tepi dengan lancar
- Terjemahkan F dalam domain frekuensi: hatF
- hatGresponse= hatW odot hatF∗
- Terjemahkan hatGresponse ke domain spasial: Gresponse
- Temukan maksimum Gresponse : gmaks,(x,y)
- Hitung daya respons PSR:= fracgmax− musl sigmasl
- Jika PSR<PSRthr keluar gagal
- Perbarui posisi R . Sesuaikan R jika melampaui gambar, atau diputuskan bahwa objek bertambah / berkurang.
- Pelatihan : I , eta
- Kembali R
Detail implementasi dapat bervariasi. Sebagai contoh
- Hanya bisa preprocess F , bukan keseluruhan gambar.
- G dapat diciptakan kembali untuk setiap transformasi gambar dengan fungsi dan lebar respons yang bervariasi.
- Anda dapat melatih beberapa filter berbeda secara bersamaan pada beberapa skala objek untuk mendeteksi pergerakan di kejauhan dan di sekitarnya.
Seperti apa bentuknya
Sebagai permulaan, beberapa contoh transformasi Fourier dua dimensi.
Beberapa contoh sederhanaBiarkan saya mengingatkan Anda bahwa hasil transformasi bernilai kompleks. Gambar di bawah ini menunjukkan grup "gambar - nilai absolut dari domain frekuensi pada skala normal - nilai absolut dari domain frekuensi pada skala logaritmik".
Garis vertikal:



Gambar berubah dari kiri ke kanan sama untuk posisi vertikal apa pun. Apalagi perubahan itu periodik, dengan periode yang jelas dan pola yang jelas. Oleh karena itu, dalam gambar frekuensi Anda hanya melihat frekuensi di sepanjang sumbu
x=0 .
Kandang:



Harap perhatikan bahwa ada serangkaian frekuensi yang diharapkan di sepanjang sumbu
x=0 dan
y=0 dan frekuensi palsu yang aneh. Mereka muncul karena fakta bahwa, pertama, gambar itu terbatas, sedangkan gambar Fourier diuraikan menjadi jumlah yang indah hanya untuk sinyal periodik tak terbatas. Kedua, Anda dapat melihat bahwa gambar tidak membentuk periode tepat di tepinya.
Garis miring:



Sekali lagi, kedua frekuensi yang sesuai dengan arah utama dan frekuensi palsu terlihat.
Garis miring plus distorsi:



Gambar frekuensi menunjukkan beberapa arah karakteristik, tetapi sudah menjadi sulit untuk secara intuitif menampilkan gambar pada mereka.
Untuk gambar dari dunia nyata, bahkan lebih sulit untuk membayangkan gambar di kepala dengan frekuensinya:



(frekuensi di tengah ditutup sehingga mereka tidak "menerangi" sisa spektrum)
Sekarang mari kita beralih ke contoh pekerjaan nyata:
Bungkus gambarGambar dengan objek bertanda:

Potong dan pra-proses objek, spektrumnya dalam skala biasa dan logaritmik (
F,| hatF|, log| hatF| ):



Respon yang Diinginkan (
G ):

Saring frekuensi pada skala reguler dan logaritmik (
W,| hatW| ):


Berat filter eksplisit (tanpa transformasi)
F ):

Harap dicatat bahwa mereka tidak berpartisipasi dalam algoritma di mana pun - mereka hanya dapat dihitung demi kepentingan. Perhatikan juga bahwa
filternya terlihat seperti itu . Orang akan berharap bahwa filter akan menjadi sesuatu yang mirip dengan gambar asli, tetapi ini tidak selalu benar. Filter yang mirip dengan gambar itu sendiri tidak akan memberikan respons Gaussian yang diinginkan.
Respons dari frame berikutnya:

Meskipun tidak sebersih respons yang diinginkan, mudah untuk menentukan maksimum di atasnya.
Contoh yang sama dengan respons yang diinginkan lebih sempit:
Bungkus gambarSudah:
W :

Lebih banyak lagi:
W :

Dengan maksimum yang sangat sempit pada filter, bukannya bintik hitam, mata menjadi terlihat jelas.
W untuk tiga kasus sebelumnya
G saat digunakan untuk pelatihan 16 transformasi gambar input:
Banyak gambarLebar maksimum:

Maksimum rata-rata:

Maksimum sempit:

Semakin banyak transformasi, semakin sedikit filter melekat pada elemen acak. Terlihat jelas bahwa bintik hitam dan putih acak dari tengah menghilang
W . Di sisi lain, untuk Gaussian yang sempit, pelatihan dalam beberapa gambar dapat memainkan minus: lihat "dering" yang terbentuk di filter di sekitar mata.
Jika Anda ingin melihat tampilannya secara langsung, unduh
dari sini repositori pengujian saya dengan implementasi MOSSE dengan output gambar debugging. Anda dapat menemukan lebih banyak
opsi MOSSE
di github. Selain itu, ada di
OpenCV .
Kesimpulan
Terima kasih atas perhatian Anda, Habrovsk. Pelacakan MOSSE dan ASEF bukan algoritma yang paling kompleks di dunia. Semakin mudah tidak hanya untuk menerapkannya secara efektif, tetapi juga untuk memahami bagaimana pencipta mereka dibimbing. Saya harap penjelasan saya telah membantu Anda menjadi kepala peneliti, untuk mengikuti jalan pikiran mereka. Ini bisa bermanfaat: pembelajaran mesin bukanlah bidang ilmu yang statis; ada tempat untuk kreativitas dan penelitian. Cobalah untuk menggali lebih dalam ke beberapa algoritma yang sudah mapan: memotong anggota tubuh yang tidak perlu untuk akselerasi atau menambahkan pasangan untuk membuatnya bekerja lebih baik dalam kasus khusus Anda. Anda akan menyukainya!
Artikel ini ditulis dengan dukungan DSSL.