Faster RCNN带来的问题是:
- 对小目标检测效果差。
- 模型大,检测速度慢。
个人认为SSD更像是去掉了RPN和ROI的Faster RCNN,和yolo v1还是不像的。
1. SSD结构
SSD的结构为三大部分组成:
1.提取特征的卷积池化层;
2.用于产生default box、分类参数、回归参数的检测层;
3.softmax和bounding box regression层。
1.1 提取网络的卷积层
图1-1 VGG16在SSD中用了5块卷积块
- SSD使用了VGG16中的前5块卷积层在backbone中编号为Conv1,Conv2,Conv3,Conv4,Conv5。其中VGG16中的第4块卷积层的第3个卷积核即Conv4_3为第一个预测层。
- SSD后面分别将VGG16的全连接层FC6和FC7转换成3x3的卷积层Conv6和1x1的卷积层Conv7。
图1-2 SSD VS. YOLO v1
1.2 用于产生default box、分类参数、回归参数的检测层
图1-3 SSD具体结构
- 由图1-3可以观察到SSD获得不同尺度的feature map,同时在不同feature map上进行预测,SSD在增加运算量的同时可能会提高检测的精度。浅层输出的feature map具备边缘信息,深层输出的feature map具备复杂特征、语义信息。
我们进一步探究得到feature map后做了什么操作:
图1-4位置和分类
- 由第四个检测层生成的feature map分成了3条线,如图1-4所示,第一条线生成该feature map的所有default box,第二条线生成用于位置回归参数矩阵(5,5,24),第三条线生成用于分类的参数矩阵(5,5,126)。后续一层通过softmax分类+bounding box regression即可从default box中预测到目标。
有多少个default box,有多少个类别和边界回归参数?
假设feature map中每个点有k个default box,每个default box有c个类别(包括背景类别,Pascal VOC 的话,c=21),那么feature map一个点类别有c×k。每个default box有4个边界框参数(x,y,h,w),那么feature map一个点位置参数有4×k。
1.3 SSD与Faster RCNN
图1-5 SSD VS. Faster RCNN
- 不同:由图1-5,对Faster RCNN而言,用RPN在最后一层feature map每个点生成9个Anchor;对SSD而言,每个预测层的feature map生成6个或4个bounding box,最后将这所有的bounding box进行NMS处理。SSD的default box细节如表1-1所示。
- 相同:个人认为,SSD的后续softmax分类和bounding box回归操作是一样的,连损失函数都一样。
表1-1 Default box的尺寸和数量细节
以上的操作都是在特征图上的操作,如果映射到原始图像上,会获得一个密密麻麻的bounding box集合。如图1-6所示:
图1-6 SSD的Default boxes
2. 损失函数
SSD的损失函数与Faster RCNN的损失函数基本一致,包括类别损失和定位损失。
类别损失:,前景为1,背景为0。为第个预测框对类别的预测概率。为第个预测框对类别(即背景类别)的预测概率。
定位损失:定位损失只针对正样本进行损失计算。,是预测的第i个正样本的回归参数。(帽)是第i个正样本相对于其匹配的第j个ground truth的回归参数,其计算方法如下。