轉載請註明出處,Writer:Zhonlihao鍾碩 @ 20190713
全尺度卷積算法的時間複雜度
全尺度卷積雖然有非常強的細節提取能力,但其是以大量增加運算量爲代價的,下面的僞代碼給出了其基本的運算過程:
for i = 尺度遍歷 n
for j = 時域遍歷 k
for m = 特徵遍歷 f
卷積核操作;
end
end
end
一個沒有經過優化的全尺度卷積算法的算法時間複雜度大概是O(n * k * f) ~O(n^3) 這無論對於電腦還是嵌入式cpu都是比較慢的,不利於算法的實時實現,細心分析下來,我們可以發現如果想實現快速算法,可以從特徵的組合出發去實現它們特定的卷積操作,這樣就會省下很多無謂的卷積掃描的時間耗費。
一種快速全卷積算法
如上圖所示,把機械的掃描轉化爲對特徵點事件的描述,從2個特徵點開始組合到全部特徵點的尺度,這是一個三角級別的算法展開:
for i = 特徵點個數遍歷 2~n
for j = 起始特徵點遍歷 1 : n - i
for k = 特徵點組內元素遍歷 j:j+i
卷積核掃描操作;
end
end
end
譬如m = 6,那麼這個事件展開就是
1 2,2 3,3 4,4 5,5 6
1 2 3,2 3 4,3 4 5 ,4 5 6
1 2 3 4,2 3 4 5,3 4 5 6
1 2 3 4 5, 2 3 4 5 6
1 2 3 4 5 6
這樣就把較大量的O(n^3)轉化爲一個小量的O(n^3)操作;下面說一下卷積核掃描操作的變化:
如上圖所示選取f1,f2兩點特徵爲這次分析的基本事件,s1,s2是其鄰近特徵,那麼,第一首先要確保窗的大小最小爲f2-f1距離觸發啓動這個事件,其次,窗的最大長度不能超過s2-s1以免把鄰近點納入形成了新的一個組合事件,滑動時窗口的右端點必須碰到f2,如果左端點離開f1,則結束整個掃描過程,因此這個方法可以從本質上省去很多無謂的過渡時間浪費。
算法時間對比
以下是舊算法在matlab中的時間消耗:
以下是新算法在matlab中的時間消耗:
大概快了30倍以上,得出的數據統計基本一致。