SSD系列算法的优化和扩展笔记
DSSD
SSD算法对小目标不够鲁棒的最主要的原因是浅层feature map的表征能力不够强。由此进行以下的改进:
- 加入上下文信息
- 更好的基础网络(ResNet)和Deconvolution层,skip连接来给浅层feature map更好的表征能力
DSOD:
在改进深度学习目标检测算法模型时,通常会强调不同组件的优化和改进。对于很多算法都会在训练时都会采用预训练模型作为初始化。而DSOD则强调我们在训练模型时不需要预训练模型,而且效果还可以和fine-tune的模型媲美。
SSD+DenseNet=DSOD
核心思想:
- 可以从0开始训练得到一个好的目标检测网络嘛?
- 如果可以i,设计这样的网络有没有什么原则可以遵守?
预训练模型优点:
- 开源模型多,可以直接将他们用于目标检测
- 可以快速得到最终的模型,需要的训练数据也相对较少
预训练模型缺点:
- 预训练模型大,参数太多,模型结构灵活性差,难以改变网络结构,计算量也大,限制其应用场合。
- 分类和检测任务的损失函数和类别分布和 类别分布是不一样的,优化空间存在差异
- 尽管微调可以减少不同目标类别分布的差异性,但是差异太大时,微调效果仍然不理想
因此作者考虑是否可以不使用预训练模型就完成一个好的模型设计,并且这种设计需要遵循哪些创新点。
DSOD设计原则:
- 基于候选区域提取的方法无法从0开始训练,不收敛,只有proposal-free方法可以从零开始训练并且收敛(也就是说只有像SSD这种one stage的算法才可以从0开始训练。作者猜测原因可能是因为两阶段存在ROI Pooling,导致需要得到一些比较好的proposal,如果不采用预训练模型可能会得到一些比较差的ROI Pooling的输出所以导致不收敛)
- DenseNet中更多的skip connections(跳连) 实现supervised signals(监督信号)传递
- 增加dense blocks数量区别原先的固定数量
- Stem Block 优化(3个3*3卷积层和1个2*2最大池化层)
- 6个尺度特征图进行目标检测,再融合(如何利用特征图)
FSSD:
FSSD设计原则:
借鉴了FPN的思想,重构了一组pyramid feature map,使得算法的精度有了明显的提升,速度也没有太降、
- 把网络中某些feature调整为同一尺度的size再contact,得到一个像素层,以此层位base layer来生成pyramid feature map
- Feature Fusion Module
RSSD:
RSSD设计原则:
- rainbow concatenation方式(pooling加deconvolution)融合不同层的特征,在增加不同层之间feature map关系的同时也增加了不同层的feature map个数。
- 这种融合方式不仅解决了传统SSD算法存在的重复框问题,同时一定程度上解决了small object的检测问题。