輕量級網絡模型shuffleNet

推薦一下看到的比較好的文章:

『高性能模型』輕量級網絡ShuffleNet_v1及v2https://www.cnblogs.com/hellcat/p/10318630.html

CNN模型之ShuffleNet:https://zhuanlan.zhihu.com/p/32304419

輕量化網絡ShuffleNet MobileNet v1/v2 解析:https://zhuanlan.zhihu.com/p/35405071

縱覽輕量化卷積神經網絡:SqueezeNet、MobileNet、ShuffleNet、Xception:https://zhuanlan.zhihu.com/p/32746221

 

個人理解與MoblieNet之間的區別在於分組卷積後的操作

MobileNet包括depthwise convolution和pointwise convolution兩部分,depthwise convolution將輸入特徵分組卷積,減少每組卷積特徵通道數,從而減少參數量和計算量;pointwise convolution表示將分組後的卷積特徵整合。

ShuffleNet顧名思義就是有重組的過程,具體是在分組卷積特徵提取後不同分組特徵整合部分,不再是採用MobileNet中的1*1卷積而是採用打亂整合的思想。

這個打亂整合也不是真的隨機打亂,而是有規律的。例如分組卷積得到特徵爲N*C,N是分組數,C是每個分組的通道數,這時特徵數:batch_size*(N*C)*W*H,將N*C維度拆分爲N*C數組,這時特徵數batch_size * N *C * W *H(這裏是五維),再對N*C進行轉置得到C*N矩陣,最後reshape回N*C。

import numpy as np
inputs=np.arange(15).reshape(3, 5)
input_t = np.transpose(inputs)
output = input_t.reshape(15)
 print(inputs)
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]]

print(input_t)
[[ 0  5 10]
 [ 1  6 11]
 [ 2  7 12]
 [ 3  8 13]
 [ 4  9 14]]

print(output)
[ 0  5 10  1  6 11  2  7 12  3  8 13  4  9 14]

這裏N=3,表示分3組,C=5,表示每組5通道,輸出仍是3*5,達到了分組特徵之間交換的目的。

相比MobileNet中的1*1*N*C卷積,ShuffleNet減少了計算量和參數量。

因爲比較懶,還沒實現,其中遇到的問題還不知道,希望交流指正,由於硬件條件不允許,想試一試顯存小的網絡

有個疑問,輕量級網絡結構對小數據集友好麼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章