APP下载

SSD算法推理过程的探析

2018-04-26郭叶军汪敬华吉明明

现代计算机 2018年5期
关键词:尺度卷积维度

郭叶军,汪敬华,吉明明

(1.英特尔亚太研发有限公司,上海 200241;2.上海工程技术大学,上海 201620)

0 引言

SSD(Single Shot Multibox Detector)算法[1]是端到端的图像目标检测方法,和Faster RCNN[2]相比,最主要的不同是不再需要RPN(Region Proposal Network)来生成候选区域ROIs,因此,SSD算法从输入图像开始,到最后的输出结果,一气呵成,很好地改善了检测速度,从而更能满足目标检测的实时性要求。

SSD有多种网络模型,例如SSD300和SSD500等,分别表示支持的待检测图像的大小是300×300和500×500。本文根据SSD作者的基于Caffe[3]的SSD实现项目[4]中的示例代码[5-6],用SSD300的网络模型deploy.prototxt[7],分析了SSD对图片fish-bike.jpg[8]的推理过程(inference)。

1 算法探析

1.1 SSD算法的网络模型和多尺度特征提取

SSD算法在训练(train)时,固定输入图像的大小,因此,待检测图像首先要缩放到固定大小,在SSD300中,其图像大小为300×300,即图像的高和宽都是300像素。如图1所示,待检测图像输出为1×3×300×300,它是由Caffe定义的在层之间传递的基础数据结构[3],表示1幅彩色图像,包括红绿蓝这3个通道,图像大小是 300×300。

SSD网络一开始部分基于VGG16模型[4,9]来提取图像特征,为获取更多大尺度下的特征信息,VGG网络模型被分成part1和part2两部分,其中,part1输出的feature map的尺度是 38×38(图中的 1×512×38×38表示 batch size为 1,有 512个 feature map,每个 feature map的大小是38×38),经过规格化层后,保持尺度不变,传递至SSD特有网络,记为变量conv4_3_norm;part2输出变量 fc7,feature map的尺度是 19×19,传递至SSD特有网络。为获取更多小尺度下的图像特征信息,在VGG网络之后,又依次增加了卷积网络6、卷积网络7、卷积网络8、卷积网络9,这里每个网络包括两个卷积层和两个RELU层。其输出的feature map的尺度分别为 10×10、5×5、3×3和 1×1,也都传递至 SSD 特有网络。补充说明:这里规格化层的引入,是为了使不同尺度下的数据具有可比性[10]。

在SSD特有网络中,有三个生成网络:mbox_priorbox生成网络、mbox_loc生成网络和mbox_conf_flattern生成网络,它们都分别接受以上6个尺度下的特征信息,然后生成 mbox_priorbox,mbox_loc和 mbox_conf_flattern,再一起传递给结果整合层,由结果整合层输出最后结果,即目标所在的位置、目标所属的类别和置信度等信息,将在后面详述。特别指出的是,mbox_priorbox生成网络,除了接受6个尺度下的特征信息外,还需要将待检测图像的大小(即300×300)作为输入。

1.2 目标位置(Bounding Box)

目标检测,需要确定图像中目标所在的位置,因此神经网络的输出应包含目标的位置信息,被称为Bounding Box。在SSD算法中,最终的Bounding Box是由Prior Box和Box Location组合而成,可将Prior Box理解为一个粗略的预定义矩形,可根据已确定的网络模型参数计算得到;而Box Location则是对预定义矩形Prior Box的坐标调整参数,是网络经过训练后的输出。两者组合,即得到最终的目标位置结果,根据参数不同,有多种组合算法,详细代码实现可参考文献[11]。下面先重点解析SSD特有网络中的三个生成网络。

1.3 mbox_priorbox生成网络

mbox_priorbox生成网络的功能是得到prior box的坐标数据,本质上可事先根据已确定的网络模型参数计算得到,为了更好地描述网络模型,这里采用了PriorBox层进行计算得到,如图2所示。PriorBox层分别独立处理输入的每个尺度,最后在mbox_priorbox层汇总输出,当然PriorBox层的参数会有所区别。

图2 mbox_priorbox生成网络的方框图

PriorBox层有两个输入,分别是图像特征信息和待检测图像,实际上,它并不会用到输入的具体数值,只是用到了图像特征的尺度和原始图像的大小。以图中最左侧的PriorBox层为例,它只是用到了1×512×38×38中的尺度 38×38,和 1×3×300×300中的图像大小300×300。PriorBox层还有诸如min_size和aspect_ratio等参数,根据这些参数可以计算出num_priors_,此值代表每个特征点会生成的prior box的数量,具体的生成方法,是从特征点回溯到原图相应区域,并经过缩放等操作得到多个区域,这样得到的多个区域就是prior box的坐标。需要注意的是,prior box的坐标会除以相应的原图宽高进行规格化,这样,待检测图像无论在事前还是事后进行何种等比例缩放,在每个缩放级别,都可以直接使用检测结果。

仍以图中最左侧的PriorBox层为例,尺度是38×38,num_priors_是 4,就会生成 38×38×4=5776个 prior box,每个box需4个坐标,则共生成5776×4=23104个数据,因此在图2中,该层输出的数据维度就是1×2×23104。其中,前23104个数据是生成的所有prior box的坐标数据,后23104个数据则是相应缩放系数[12],在目前的代码实现中缩放系数是固定值,在最后根据prior box和box location计算得到最终的bounding box时被用作缩放因子。其他5个尺度的输入也用同样的方法处理。

在mbox_priorbox层中,将输入的6组数据进行简单的维度组合,输出的数据维度为1×2×34928,这是因为23104+8664+2400+600+144+16=34928,对应着一共34928/4=8732个prior box的坐标和缩放因子。这样的维度组合,将输入的多个变量表示为一个变量的形式,主要是为了后面计算bounding box时易于编程处理。

1.4 mbox_loc生成网络

mbox_loc生成网络的功能是得到prior box的坐标调整参数,即box location。每个尺度的数据分别经过相同的处理,最后在mbox_loc进行简单的维度合并,如图3所示。为图示简洁,只画出了三个尺度(即38×38、10×10和 1×1)的详细过程,另三个尺度(即 19×19、5×5和3×3)的处理过程用一个方框略之。

以图3中最左侧的输入conv4_3_norm为例,其数据维度是1×512×38×38,首先经过卷积层 conv4_3_norm_mbox_loc,因为卷积参数 kernel size是 3,pad是1,stride是1,所以输出的feature map大小还是38×38;而卷积参数num_output是16,因此,这个卷积层的输出的数据维度是 1×16×38×38。16个 feature map,分别依次对应着4个prior box的调整参数,而每个prior box需要4个调整参数。这里和mbox_priorbox生成网络中Prior Box层的参数num_priors_是一一对应的。例如,处理conv6_2的卷积层的num_output参数是24,对应着相应Prior Box层中值为6的num_priors。在卷积过程中,feature map的大小并没有发生变化,因此,实现了box location和prior box的一一对应关系。

仍以图3中最左侧的输入conv4_3_norm为例,经过卷积层后,还要依次经过层conv4_3_norm_mbox_loc_perm和conv4_3_norm_mbox_loc_flat,这两层也是为了后面计算bounding box时便于编程处理而引入的。其中,conv4_3_norm_mbox_loc_perm层重排了数据的内存布局,使得数据从头排列依次为第一个prior box的4个调整参数,第二个prior box的4个调整参数,直到最后一个prior box的4个调整参数。而conv4_3_norm_mbox_loc_flat层则只是换了一个视角来看待数据,不涉及任何内存拷贝,这种新视角便于后续编程处理。

在mbox_loc层中,将输入的6组数据进行简单的维度组合,输出的数据维度为1×34928,这是因为23104+8664+2400+600+144+16=34928。这里将输入的多个变量表示为一个变量的形式,主要也是为了后面计算bounding box时方便编程处理。

1.5 mbox_conf_flattern生成网络

mbox_conf_flattern生成网络的方框图如图4所示,为图示简洁,同样也只画出了三个尺度的详细过程,另三个尺度的处理过程用一个方框略之。mbox_conf_flattern生成网络的功能是得到最终的bounding box属于某个类别的可能性,即置信度(confidence)。本网络模型基于20个类别训练而成,再加上背景,一共有21个分类。所以,最终得到的是每个bounding box分别属于21个分类的可能性得分。

mbox_conf_flattern生成网络的前面思路和mbox_loc生成网络非常类似,六个尺度的数据分别独立处理后在mbox_conf进行简单的维度合并。唯一不同的是,对每个box,需要生成21个数据,代表属于21个分类的可能性得分,而不是表示调整参数的4个数据。因此,卷积层的num_output参数值是相应的Prior-Box层的num_priors_的21倍,而不是4倍。

图3 mbox_loc生成网络的方框图

图4 mbox_conf_flattern生成网络的方框图

考虑到属于21个分类的可能性得分的总和应该是1,所以增加了mbox_conf_softmax层做归一化处理,而mbox_conf_reshape层则是调整看待数据的视角,以满足mbox_conf_softmax层的要求。

最后,mbox_conf_flattern层重新恢复了看待数据的视角,方便后续结果整合层的编程处理。mbox_conf_flattern层的输出维度是1×183372,这是因为8732×21=183372,即对应着8732个box的属于21个分类的得分,这与前面的mbox_priorbox生成网络和mbox_loc生成网络的输出实现了对应。

1.6 结果整合层

本层首先根据输入的prior box和box location计算得到8732个bounding box的准确位置,然后使用NMS(non-max suppress)算法,根据得分概率mbox_conf和bounding box的重叠情况,最终给出本图像中的目标位置和目标类别。其输出维度是1×1×N×7,其中N就是最终输出的bounding box的个数,每个bounding box对应7个数据,分别是:image_id(SSD算法可同时处理多个图像)、label(所属类别的标号)、confidence(置信度,介于0和1之间),以及bounding box的4个坐标值(即左上和右下坐标xmin、ymin、xmax和ymax,它们在PriorBox层就已做规格化处理,介于0和1之间)。

2 结语

本文从SSD图像目标检测算法的网络模型出发,介绍了SSD算法整体的网络模型及其特有三个生成网络层,重点阐明网络层之间的输入输出数据维度的变化和对应关系,以及它们的主要参数和功能,以此来探析SSD算法不同于其他算法的关键,也为后续深入研究提供了一种新视角。

参考文献:

[1]Wei Liu.Dragomir Anguelov,Dumitru Erhan,Christian Szegedy,Scott Reed,Cheng-Yang Fu,Alexander C.Berg.SSD:Single Shot MultiBox Detector.[EB/OL][2016-12-29/2017-9-20].URL:https://arxiv.org/pdf/1512.02325.pdf.

[2]Shaoqing Ren,Kaiming He,Ross Girshick and Jian Sun.Faster R-CNN:Towards Real-Time Object Detection with Region Proposal Networks[J].IEEE Transactions on Pattern Analysis and Machine Intelligence,2017,39(6):1137-1149.

[3]Y.Jia,E.Shelhamer,J.Donahue,S.Karayev,J.Long,R.Girshick,S.Guadarrama,and T.Darrell.Caffe:Convolutional Architecture for Fast Feature Embedding[J].Proceedings of the 22nd ACM International Conference on Multimedia,2014:675-678.

[4]K.Simonyan,A.Zisserman.Very Deep Convolutional Networks for Large-Scale Image Recognition[C].International Conference on Learning Representations,2015.

[5]Wei Liu.SSD.[EB/OL][2017-5-28/2017-11-15].URL:https://github.com/weiliu89/caffe/tree/ssd.

[6]Wei Liu.ssd_detect[CP/OL][2016-7-11/2017-10-15].URL:https://github.com/weiliu89/caffe/blob/ssd/examples/ssd_detect.ipynb.

[7]models_VGGNet_VOC0712_SSD_300x300.tar.gz[EB/OL][2017-10-4].URL:https://drive.google.com/file/d/0BzKzrI_SkD1_WVVTSmQxU0dVRzA/view

[8]Wei Liu.Fish Bike Example Image.[EB/OL][2014-6-9/2017-9-24].URL:https://github.com/weiliu89/caffe/blob/ssd/examples/images/fish-bike.jpg

[9]Wei Liu,Dragomir Anguelov,Alexander C.Berg.ParseNet:Looking Wider to See Better[C].International Conference on Learning Representations,2016.

[10]Wei Liu.Why normalization Performed Only for conv4_3?[EB/OL][2016-10-24/2017-10-16].URL:https://github.com/weiliu89/caffe/issues/241

[11]Wei Liu.bbox_util.[CP/OL][2016-11-26/2017-10-18].URL:https://github.com/weiliu89/caffe/blob/ssd/src/caffe/util/bbox_util.cpp#L355

[12]Wei Liu.Variance in Priorbox Layer.[EB/OL][2016-8-30/2017-10-12].URL:https://github.com/weiliu89/caffe/issues/155.

猜你喜欢

尺度卷积维度
理解“第三次理论飞跃”的三个维度
基于3D-Winograd的快速卷积算法设计及FPGA实现
一种并行不对称空洞卷积模块①
认识党性的五个重要维度
财产的五大尺度和五重应对
浅论诗中“史”识的四个维度
从滤波器理解卷积
基于傅里叶域卷积表示的目标跟踪算法
宇宙的尺度
9