SSD目标检测系统

作者: 月见樽 | 来源:发表于2018-11-04 22:12 被阅读16次

首发于个人博客

系统结构

system.png

SSD识别系统也是一种单步物体识别系统,即将提取物体位置和判断物体类别融合在一起进行,其最主要的特点是识别器用于判断物体的特征不仅仅来自于神经网络的输出,还来自于神经网络的中间结果。该系统分为以下几个部分:

  • 神经网络部分:用作特征提取器,提取图像特征
  • 识别器:根据神经网络提取的特征,生成包含物品位置和类别信息的候选框(使用卷积实现)
  • 后处理:对识别器提取出的候选框进行解码和筛选(NMS),输出最终的候选框

神经网络

network.PNG

该系统的网络结构如上图所示基本网络为VGG-16网络,VGG-16网络由一系列3x3卷积顺序连接构成,在conv5_3层卷积之前,共有4个stride=2的最大值池化,因此该层的输出的长和宽比原始输入缩小16倍,在SSD300网络中输入图像的尺寸被归一化到300x300,因此该层的输出长和宽为[300/2^4] = [18.75] = 19​,channel为512,即基础网络VGG-16的输出尺寸为512x19x19。

在基础网络之后,还有如下的网络结构:

名称 输入 kernel尺寸 stride padding 输出 是否输出
conv6 512x19x19 1024x512x3x3 1 1 1024x19x19 N
conv7 1024x19x19 1024x1024x1x1 1 0 1024x19x19 Y
conv8_1 1024x10x10 256x1024x1x1 1 0 256x10x10 N
conv8_2 256x10x10 512x256x3x3 2 1 512x10x10 Y
conv9_1 512x10x10 128x512x1x1 1 0 128x10x10 N
conv9_2 128x10x10 256x128x3x3 2 1 256x5x5 Y
conv10_1 256x5x5 128x256x1x1 1 0 128x5x5 N
conv10_2 128x5x5 256x128x3x3 1 0 256x3x3 Y
conv11_1 256x3x3 128x256x1x1 1 0 128x3x3 N
conv11_2 128x3x3 256x128x3x3 1 0 256x1x1 Y

其中,是否输出一栏标为Y的均将其输出送到识别器,即最终识别器接受不同大小的feature map共(5+1)=6个(5个额外的输出层和1个基础网络输出),分别为10x10,5x5,3x3,1x1和两个19x19,

识别器

识别器使用卷积层构成,其卷积尺寸为(box\_num \times (4 + class\_num) ) \times in\_channel \times 3 \times 3,其中box_num为feature map上一个格点所产生的识别框数量,class_num为类别数量(包括背景类),具体如下所示:

default_box.PNG

图中是一个4x4的feature map,共4 \times 4 = 16个格点,每个格点上有3个候选框,即box_num=3,类别信息中共有p个数据,即共有p类物品以供判断(p中含有背景类),class_num=p。另外的4个数据为loc后的位置微调信息。一个C \times W \times H的feature map经过识别器处理后,变为(box\_num \times (4 + class\_num) ) \times W \times H的Tensor,共包含W \times H \times box\_num个候选框。

后处理

第一步后处理是解析候选框中的数据,每一个候选框由4+class_num个数据构成:4个位置信息x,y,w,h和class_num个类别信息。解析方式与anchor box几乎相同,如下所示:
G_x = P_w \times \frac{P_x + sigmoid(x)}{F_x} \\ G_y = P_h \times \frac{P_y + sigmoid(y)}{F_y} \\ G_w = P_w \times (D_w \times e^{sigmoid(w)}) \\ G_h = P_h \times (D_h \times e^{sigmoid(h)})
其中,G_x,G_y,G_w,G_h分别是识别出的物品的中心点的宽度坐标,高度坐标和物品的高度和宽度。P_w,P_h分别是输入图像的宽度和高度,P_x,P_y为候选框所在格点的坐标,取值范围分别为0~F_x - 1和0~F_y-1,如上图中有P_x = 3,P_y=2F_x,F_y为候选框所在的feature map的宽度和高度,如上图有F_x=F_y=4D_w,D_h分别是对应default box的默认归一化宽高。对于类别信息,取其中最大的即可:
cls = argmax_{i \in class\_id}(class\_feature_i) \\ conf = max(class\_feature_i)
第二步后处理是使用NMS(非极大值抑制)对候选框进行筛选:当两个候选框的IOU超过一个阈值时,丢弃置信度conf低的候选框。

网络训练

网络训练分为了两个部分:

  • 建立label:一般的物体检测的label为物体的位置信息,为了实现训练需要将label转移到default box上
  • 代价函数:反向传播的起点,标记训练任务

标签建立

default box生成

在每个feature map的格点上,default box的面积是一个定值,长宽比为几种可选的值,如下所示:
s_k = s_{min} + \frac{k-1}{m-1} \times (s_{max} - s_{min}),k \in \{1,2,...m\}\\ w_k^a = s_k \times \sqrt{a_r} \\ h_k^a = \frac{s_k}{\sqrt{a_r}} \\ a_r \in \{2,3,\frac{1}{2},\frac{1}{3}\}
其中,s_k为第k个feature map的归一化尺寸参数(实际尺寸与图片尺寸的比),s_{min} = 0.2,s_{max} = 0.9,即k=1时(F_x ,F_y最大的feature map),尺寸参数为图片尺寸的0.2倍,k=m时(F_x ,F_y最小的feature map),尺寸参数为图片尺寸的0.9倍。w_k^a,h_k^a分别为第k个feature map下不同长宽比的default box的默认归一化宽和高。除了以上所述4个default box之外,每个feature map的格点default box还有两个长宽比为1的框,其尺寸系数分别是:
s_k' = \sqrt{s_{k-1}\times s_k} \\ s_k'' = \sqrt{s_k \times s_{k+1}}
综上所述,每个feature map的格点共对应6个default box

label匹配

对一个default box进行label匹配时,遍历这张输入图片的物体信息label,若该物品和这个default box的IOU超过某个阈值时,认定这个default box用于识别这个物体,按如下建立label:

  • 对于位置信息:根据以上后处理所示的公式进行反处理,则可以获得位置信息的label
  • 对于类别信息:将物品类别对应位置的置信度置1,其他置0

按以上方法遍历所有default box,即生成了对于一张输入数据的label

代价函数

代价函数由两个部分构成,分别对于定位准度和分类精度:
L(x,c,l,g) = \frac{1}{N}(L_{conf}(x,c) + \alpha L_{loc}(x,l,g))
其中x为标记信息,x_{ij}^p=\{0,1\},当第i个default box被标记为属于类别p的第j个物体时,x_{ij}^p=1,否则该标记为0。代价函数分为两个部分,第一个部分是分类精度,使用softmax损失函数,如下所示。i \in Pos指该default box的在label中不属于背景(p>0),反之i \in Neg。c为网络输出中置信度有关的向量,c_i^p为SSD输出的第i个default box中属于类别p的置信度。
L_{conf}(x,c) = - \sum\limits_{i\in Pos}^N x_{ij}^p log(c_i^p) - \sum\limits_{i \in Neg} log(c_i^0) \\ c_i^p = \frac{exp(c_i^p)}{\sum_p exp(c_i^p)}
第二个部分为定位准确度,使用L1下的smooth函数作为代价函数:
L_{loc}(x,l,g) = \sum\limits_{i\in Pos}^N \sum\limits_{m \in \{x,y,w,h\}} x_{ij}^ksmooth_{L1}(l^m_i-g^m_j)

其他训练细节

正反例

保证正例:反例=1:3,由于一般正例远远少于反例,所以保留所有正例,并根据正例三倍的数量选择反例,选择的标准为置信度:即选择c^0高的反例。

图像预处理

输入图片随机选择进行以下处理:

  • 输入原始图像
  • 截取与物品IOU大于0.3,0.5,0.7或0.9的部分
  • 随机截取图片部分

进行完以上随机选择后,随机对处理后的图片做翻转处理

相关文章

  • SSD目标检测系统

    首发于个人博客 系统结构 SSD识别系统也是一种单步物体识别系统,即将提取物体位置和判断物体类别融合在一起进行,其...

  • C++ opencv-3.4.1 调用tensorflow训练好

    本文使用tensorflow的目标检测model zoo的ssd_mobilenet_v1_coco进行目标检测测...

  • texbox++_2018_华科白翔

    旋转文本检测,基于ssd 1、ssd目标检测算法 backboneVGG16,输入是固定大小的图像,输出是下采样的...

  • 搞定目标检测(SSD篇)(下)

    搞定目标检测(SSD篇)(上)主要分析了目标检测的基本原理和技术局限,本文将继续上集的未尽事宜,详解如何使用SSD...

  • [Caffe配置]SSD(Single Shot MultiBo

    1.SSD简介 SSD全称Single Shot MultiBox Detector,是一个用于目标检测的深度学习...

  • 目标检测之SSD

    SSD的网络分为两部分,前半部分是用于图像分类的标准网络(去掉了分类相关的层),后面的网络是用于检测的多尺度特征映...

  • 深度学习

    谁可以推荐几本关于ssd目标检测算法的书籍呀?

  • 找实习要准备的

    1.关于rcnn fastrcnn fasterrcnn maskrcnn ssd yolo 【目标检测】RCNN...

  • yolo9000

    这篇文章发表晚于ssd,因此文章涉及到和ssd的比较。 一、概述 通用目标检测存在的问题 小物体检测存在问题 物品...

  • 目标检测系列——SSD(上)

    一、SSD原理   本文记录一阶段目标检测模型SSD的学习笔记及代码复现过程。首先个人感觉SSD和YOLO相比稍微...

网友评论

    本文标题:SSD目标检测系统

    本文链接:https://www.haomeiwen.com/subject/tcndxqtx.html