算是一篇梳理backbone的总结笔记,前面部分不少内容都是照搬 reference 2 的,稍微总结了一下里面的内容,后面增加了其中遗漏的以及今年新出的网络(FPN,Hourglass,ResNeXt,DCN,DPN,SENet,MobileNet v3),用了很多网图,联系侵删;
Reference:
1. https://arxiv.org/pdf/1908.03673.pdf,19年8月的目标检测硬核综述;
2. https://www.cnblogs.com/silence-cho/p/11620863.html,backbone总结的很细致了,强烈推荐;
下图是目标检测的发展历程,可以看到其中backbone对于其发展起到了至关重要的作用,大多数milestone都有在backbone上有新的创新。
其发展方向主要有三种类型:
1. 深度:网络层数增加,VGG -> ResNet -> ResNeXt
2. 模块化:GoogLeNet系列,ResNeXt(Inception 结构)
3. 轻量:MobileNet系列,ShuffleNet;
一些比较早的网络结构大致了解一下即可。
- LeNet-5:
- 结构简单,主要是卷积和全连接;
- AlexNet:
- 分为上下两部分卷积,因算力不足分别放在两块GPU上;
- 使用ReLU替代Sigmoid,有效缓解了梯度消失问题;
- 使用局部相应归一化;
- 使用数据增广和dropput防止过拟合;
- ZFNet:
- 将AlexNet起始的卷积由(11x11,stride 4)修改为 (7x7,stride 2)
- 增加中间卷积核的通道数;
- VGGNet:
- 结构简洁,5层卷积,3个全连接,softmax作为输出,层之间用max-pooling分开,隐层采用ReLU激活函数;
- 采用小卷积核(3x3)和多卷积核,减少参数也增加了非线性映射(增强表达能力);
- 结论:局部响应归一化无增益;网络层数加深性能变好;多个小卷积核由于单个大卷积核;
- GoogLeNet(Inception) v1:
- 引入inception结构,性能和vgg差不多但参数量少很多:既保持网络结构的稀疏性(减少参数,减轻过拟合),又能利用密集矩阵的高计算你性能,Inception网络结构的主要思想是寻找用密集成分来近似最优局部稀疏连接;
- 加深的基础上加宽,使用稀疏的网路结构又能产生稠密的数据;
- 采用不同大小的卷积核获得不同大小的感受野,最后在channel上拼接实现不同尺度特征融合;
- 采用1x1卷积接一个ReLU,既减少计算量增加了非线性能力;
- 采用 average pool 替代全连接层;
- GoogLeNet(Inception) v2:
- 用两个3*3卷积代替一个5*5卷积,降低参数量;
- 将滤波器大小nxn的卷积分解为1xn和nx1卷积的组合(7x7卷积相当于首先执行1x7卷积,然后在其输出上执行7x1卷积(在中度大小的特征图上效果较好,featuremap size 在12-20之间);
- 将池化和卷积并行执行再合并,保持特征表示并降低计算量;
- GoogLeNet(Inception) v3:
- 采用 RMSProp优化器;
- Factorization into small convolution: 将7x7分解成两个一维的卷积(1x7,7x1),3x3也是一样(1x3,3x1),加速计算同时加深网络,提高