convolution:
卷積(Conv)算子的計算復雜度通常取決于多個因素闻镶,包括輸入的維度(input_batch,input_h、input_w弧械、input_channel)、卷積核的大锌彰瘛(kernel_h, kernel_w)刃唐、步長(stride_h、stride_w)和填充(padding_h, padding_w)界轩。
conv算子的輸出shape 計算方式為: O = (W-K+2P)/S + 1
其中:
O 是輸出的大小 W 是輸入的大小 K 是卷積核的大小 P 是填充 S 是步長
一般來說画饥,卷積操作總的計算復雜度為:
O(n) = N * M * O * O * K * K * C
其中:
N 是批量大小
M 是輸出的通道數
O 是輸出的寬/高
K 是卷積核的寬/高
C 是輸入的通道數
這個公式假設我們在每個位置都進行了卷積操作,即步長為1浊猾。如果步長大于1抖甘,那么計算復雜度會相應減少。
復雜度對模型的影響
時間復雜度決定了模型的訓練/預測時間与殃。如果復雜度過高单山,則會導致模型訓練和預測耗費大量時間,既無法快速的驗證想法和改善模型幅疼,也無法做到快速的預測米奸。
空間復雜度決定了模型的參數數量。由于維度詛咒的限制爽篷,模型的參數越多悴晰,訓練模型所需的數據量就越大,而現實生活中的數據集通常不會太大逐工,這會導致模型的訓練更容易過擬合铡溪。
當我們需要裁剪模型時,由于卷積核的空間尺寸通常已經很欣岷啊(3x3)棕硫,而網絡的深度又與模型的表征能力緊密相關,不宜過多削減袒啼,因此模型裁剪通常最先下手的地方就是通道數哈扮。
如果卷積操作中包含了 dilation(擴張),那么計算復雜度的計算方式會有所不同蚓再。在這種情況下滑肉,卷積核的實際大小會變?yōu)?K' = K + (K-1)*(D-1),其中 D 是 dilation 系數摘仅。
因此靶庙,如果考慮 dilation,那么卷積操作的計算復雜度可以表示為:
O(n) = N * M * O * O * K' * K' * C
其中 K' 是考慮了 dilation 的卷積核大小娃属。其他的參數含義與之前相同六荒。
需要注意的是护姆,雖然 dilation 可以增加卷積核的感受野,但并不會增加卷積操作的計算量恬吕,因為 dilation 只是改變了卷積核中非零元素的分布签则,而非零元素的總數仍然是 K*K。
https://blog.csdn.net/john_bh/article/details/105508642
Depthwise Convolution的計算非常簡單铐料,它對輸入feature map的每個通道分別使用一個卷積核渐裂,然后將所有卷積核的輸出再進行拼接得到它的最終輸出
因為卷積操作的輸出通道數等于卷積核的數量,而Depthwise Convolution中對每個通道只使用一個卷積核
深度可分離卷積钠惩,其實只對常規(guī)卷積做了一個很小的改動柒凉,但是帶來的確實參數量的下降,這無疑為網絡的輕量化帶來了好處篓跛。對于來自上一層的多通道特征圖膝捞,首先將其全部拆分為單個通道的特征圖,分別對他們進行單通道卷積愧沟,然后重新堆疊到一起蔬咬。深度可分離卷積主要分為兩個過程,分別為逐通道卷積(Depthwise Convolution)和逐點卷積(Pointwise Convolution)沐寺。
深度可分離卷積的優(yōu)點:
1)減少參數林艘。可以看出運用深度可分離卷積比普通卷積減少了所需要的參數混坞。
2)實現了通道和區(qū)域的分離狐援。重要的是深度可分離卷積將以往普通卷積操作同時考慮通道和區(qū)域改變成,卷積先只考慮區(qū)域究孕,然后再考慮通道啥酱。
深度可分離卷積的缺點:
DW完全是在二維平面內進行。卷積核的數量與上一層的通道數相同厨诸,這種運算對輸入層的每個通道獨立進行卷積運算镶殷,沒有有效的利用不同通道在相同空間位置上的feature信息。
深度可分離卷積(Depthwise Convolution)的計算復雜度比標準的卷積要低微酬。這是因為在深度可分離卷積中绘趋,每個輸入通道都有一個獨立的卷積核,而不是所有輸入通道共享一個卷積核得封。
深度可分離卷積的計算復雜度可以用以下公式表示:
O(n) = N * M * O * O * K * K * C
其中:
N 是批量大小
M 是輸出的通道數
O 是輸出的寬/高
K 是卷積核的寬/高
C 是輸入的通道數
這個公式與標準卷積的計算復雜度公式看起來很相似埋心,但是在深度可分離卷積中指郁,M通常等于C忙上,因為每個輸入通道都有一個對應的輸出通道。
因此闲坎,深度可分離卷積的計算復雜度通常比標準卷積的計算復雜度要低疫粥,這使得它在資源受限的環(huán)境中(如移動設備或嵌入式系統(tǒng))非常有用茬斧。