推薦一下看到的比較好的文章:
『高性能模型』輕量級網絡ShuffleNet_v1及v2:https://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減少了計算量和參數量。
因爲比較懶,還沒實現,其中遇到的問題還不知道,希望交流指正,由於硬件條件不允許,想試一試顯存小的網絡
有個疑問,輕量級網絡結構對小數據集友好麼