ssd系列算法总结(二)
上一篇介绍了ssd算法的网络结构及一些令人迷惑的细节问题,比如8732个先验框如何设置,offset指的是什么,编码与解码过程。理解ssd算法之后,然后再去理解改进算法就会非常容易。
这一篇接着上一篇,主要介绍几种改进算法的主要思想
参考论文:
DSSD: Deconvolutional Single Shot Detector
FSSD:Feature Fusion Single Shot Multibox Detector
RefineDet: Single-Shot Refinement Neural Network for Object Detection
RfbNet:Receptive Field Block Net for Accurate and Fast Object Detection
M2Det: A Single-Shot Object Detector based on Multi-Level Feature Pyramid Network
Pelee:Pelee: A Real-Time Object Detection System on Mobile Devices
1、DSSD
先上结构图:
图片来自原始论文DSSD算法着眼于ssd对于小目标物体的检测效果依然不够理想,分析原因,就是浅层的特征图虽然比较容易定位小目标,但是浅层的特征图没有包含充分的语义信息,很难对定位出的目标进行分类。
因而,利用反卷积将特征图进行上采样,与原始的特征图进行融合,然后混合后的特征图输入感知器网络进行预测(感知器网络就是几层卷积层,输出为特定的维度,维度与位置与类别有关)。
将原始特征图与上采样后的特征图进行融合的方法一般有堆叠(concat)与求和(element-wise sum),但是这里作者经过实验说明在这种结构下(element-wise product)矩阵点积的效果比element-wise sum更好。
2、FSSD
先上结构图:
图片来自原始论文同样考虑到ssd算法独立的利用浅层与深层的特征图进行预测,对小物体的鲁棒性较差,提出了一种特征融合的方式,将vgg16产生的不同尺度的特征图,利用双线性插值变换为conv4-3层的特征图尺度大小,然后concat所有特征图,利用得到的特征图重新进行下采样得到不同的特征图尺度,输入感知器网络进行预测。
3、RfbNet
先上结构图
上述图片来自原始论文2018年eccv的一篇文章,作者受人眼视觉感知的偏心率的与影响,利用inception与atrous convolution相结合提出 感受野模块(receptive filed block),将rfb应用于ssd算法的特征图的头部,然后对处理后的特征图进行预测,结构简单,效果非常好。
4、M2Det
图片来自原始论文M2Det时2019AAAI的一片文章,作者认为之前的FSSD、DSSD等算法对于多尺度特征图的融合使用的策略过于简单,不能很充分的利用各层的特征,然后作者设计了一种特征融合的方式,对ssd算法的特征图进行融合,效果还行。
5、RefineDet
先上结构图
图片来自原始论文这是cvpr2018的一篇文章,之所以放在最后,是因为此算法对于ssd的修改最多,而且这中算法看起来好像是目标检测一步法与两步法的结合算法。
这篇文章对于ssd的改进点与前边几篇文章的思路均不一样,更像是对目标检测一步法的改进,通过对ssd算法的prior box进行二次的refine,来提升算法的效果。
主要就是利用两步法的思想先对先验框进行一次分类(二分类,仅区分前景与背景)与回归,解决样本极不均衡的问题,提高准确率;同时利用FPN对不同的特征图进行融合,提高对小物体检测的鲁棒性。
整体来看该网络和tow stage的结构很像(都可以概括为two-step cascaded regression),一个子模块(**anchor refinement module (ARM))**对先验框进行二分类与回归,类似于RPN的功能,另一个子模块类似于SSD(object detection module (ODM))。在RefineDet中是先通过ARM部分生成refined anchor boxes(类似RPN网络输出的propsoal),然后在refined anchor boxes基础上进行回归,所以能有更高的准确率,而且得益于特征融合(**transfer connection block (TCB))**这个模块基本是是一个FPN,该算法对于小目标物体的检测更有效。
这篇文章应该好好读一下,前边的几篇文章很简单,很容易理解
自己看过的几篇ssd系列的文章在此总结梳理一下,ssd算法是一个具有非常优秀的算法,近几年很多算法都是在ssd算法上进行改进,看明白这个系列算法与学习R-CNN系列算法一样重要。
上一篇文章评论区有朋友推荐了pelee这篇文章,回去看了一下,这里写出一些这篇文章的主要思想及创新点
pelee
这篇文章主要立足于设计能够在移动端运行的实时性的算法网络,之前的轻量化网络(例如mobilenet,shufflenet,mobilenet v2)均采用了深度可分离卷积进行设计,文章作者提出不一定要依赖于深度可分离卷积设计轻量化网络,利用传统的卷积也可以设计轻量化的网络
这个网络的网络结构采用了densenet与googlenet的网络结构思想,设计了2-way dense layer
将densenet第一个stem block中的7×7 卷积利用3×3卷积进行替换,效果更好。
在bottleneck层的输出通道依据输入尺寸的大小是可变的,而不是像densenet一样输出为输入的通道数的4倍,这样很大程度上减小了计算量
利用conv-bn的post-activation,这样也加速了计算速度(不明白为什么)
对于ssd算法的感知特征图没有采用38×38的特征图,仅仅采用了后边的几层特征图
19×19的特征图设置两个不同大小的默认框,后边的特征图设置一个默认框
在每个感知特征图后面预测之前,利用残差模块进行处理
在预测部分的卷积核利用1×1的卷积替代3×3的卷积,减小模型的参数,提高速度