推荐一下看到的比较好的文章:
『高性能模型』轻量级网络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减少了计算量和参数量。
因为比较懒,还没实现,其中遇到的问题还不知道,希望交流指正,由于硬件条件不允许,想试一试显存小的网络
有个疑问,轻量级网络结构对小数据集友好么