Konvolüsyon çekirdeğini ayıran nedir? Nasıl 2B filtre çekirdek o zaman ayrılabilen bir rank
1 sahipse o ayrılabilir parçaları 2D konvolüsyon yerine>Evrişimin ayrılabilir olup olmadığını nasıl belirleyebilirim?
Teşekkür
Konvolüsyon çekirdeğini ayıran nedir? Nasıl 2B filtre çekirdek o zaman ayrılabilen bir rank
1 sahipse o ayrılabilir parçaları 2D konvolüsyon yerine>Evrişimin ayrılabilir olup olmadığını nasıl belirleyebilirim?
Teşekkür
iki 1D helezonlar yapmak için nelerdi söylemek mümkün olacaktır. Bunu örn. Matlab veya Octave:
octave-3.2.3:1> sobel = [-1 0 1 ; -2 0 2 ; -1 0 1];
octave-3.2.3:2> rank(sobel)
ans = 1
octave-3.2.3:3>
Ayrıca bakınız: http://blogs.mathworks.com/steve/2006/11/28/separable-convolution-part-2/ - Bu ayrılabilir 2B çekirdeğinden iki 1D tanelerini ayıklamak için SVD
(tekil değer ayrışımı) kullanılarak kapsar.
DSP.stackexchange.com Ayrıca bu sorunun bakınız: Fast/efficient way to decompose separable integer 2D filter coefficients
da daha büyük bir 2d konvolüsyonlar etkili olabilir simetrik ve eğri parça ve ayrı her bir kısım içine matris split.
Netleştirmek için örnek verebilir misiniz? – mrgloom
2d matrisinizi xy '+ u.v'' vektör ürünü olarak düzenleyebiliyorsanız, 2d konvolüsyonunun yerine 1d dizileri ve sütunlar dizisi yapabilir, sadece 4N çarpma/ekleme gereksinimi vardır N-^2. Eğer 'u.v' daha küçük bir boyuta sahipse, azalma daha büyüktür. Bu genellikle, ayırmayı kolaylaştırmak için matrisin yapısını önceden bildiğinizi varsayar. Ayrıca, hesaplama motorunuza da bağlı olacaktır - bir GPU başka bir yapıyı tercih edebilir. –
SVD buradan gitmek için bir yoldur. Ayrılabilir (yani sıra 1) çekirdekler çok spesifiktir ve SVD, çekirdeğinizi (küçük) ayrılabilir olanların toplamına yaklaşmanızı sağlar. –