SSD算法原理介绍(一)
SSD算法介绍
SSD属于one-stage检测方法,主要通过了直接回归目标类别和位置的方式。在进行预测时也正是由于通过不同尺度的特征层上进行预测,所以在图像低分辨率时也能很好的对目标进行检测,保证其精度。在训练的过程中采用了端到端的方式进行训练。
SSD网络结构
基础网络使用了VGG16的网络结构,然后通过对基础网络的改进,并增加了几个不同大小的卷积层来进行不同尺度特征图的提取(改进:去掉了VGG16网络中的两个FC层,并增加了4个卷积层)。(图中的6条线就代表了6个不同大小的特征图,这6个不同的特征图讲用于后期的预测网络中进行分类预测)。在提取不同特征图的方法上主要通过下采样的方式进行尺寸的变化。
基础网络中除了可以使用VGG16的网络结构外,还可以通过ResNet(更优秀)、MobileNets(更加的轻量级,可以压缩训练中的时间和计算量)等网络进行代替。
因此,SSD的网络结构可以简化为:image→CNN→预测网络→NMS。
上述的是CNN网络中所做的变化,而在后面的预测网络中还包含了prior box层的提取过程(这里所说的prior box层相当于R-CNN中所说的anchor box)。提取过程为以feature map的每个cell为中心,通过等比的方法找到它在原图像中的位置,并以这个点为中心来提取不同尺度的bounding box。每一个prior box都会分别预测相应的类别概率和坐标值。每个feature map中的点都会对应不同的prior box。
假设共有C个类别,则每个prior box就会有C+4个参数,如果当前的Feature map的尺寸为N*M,则就会存在N*M个cell,每个cell可以提取K个prior box,因此当前的Feature map的输出就是(C+4)*K*N*M。(具体的计算公式可以参考文章https://www.cnblogs.com/sddai/p/10206929.html)
6种default box就是5+1,5种不同的长宽比和增加的一种scale