《Tiny SSD: A Tiny Single-shot Detection Deep Convolutional Neural Network for Real-time Embedded Object Detection》
(Tiny SSD:一种基于微小的单点探测深度卷积神经网络的实时嵌入式目标检测)
(一)待解决的问题:
如今,目标检测网络越来越成熟,但面临的一个重要问题就是,如何将这样的具有很高的计算能力和内存要求的深度神经网络,广泛地应用到嵌入式系统中;
因此,本文主要致力于将SSD改造成一个小的深度神经网络,就像TinyYOLO和SqueezeNet(文章中写成了SqueezeDet,哈哈哈)一样;
这里借鉴了SSD的宏观结构和SqueezeNet的微观架构,实现了网络参数比Tiny YOLO小26倍、在VOC 2007数据集上的mAP却高了4.2%的成绩;
(二)SSD 的宏观结构:
2.1 论文地址:
《SSD: Single Shot MultiBox Detector》
2.2 SSD 原理及其源码详解:
SSD算法是一种直接预测目标类别和bounding box的多目标检测算法;与faster rcnn相比,该算法避免了ROI Pooling的过程,并且提出了可以利用不同的特征层针对不同大小的目标这,极大提高了检测速度;
更具体的解析可以看我写的这两篇,这里就不多介绍了;
SSD目标检测算法详解 (一)论文讲解
SSD目标检测算法详解 (二)代码详解
(三)SqueezeNet 的微观架构:
3.1 论文地址:
《SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <0.5MB
model size》
3.2 Squeeze Net 的核心思想:
Squeeze Net 提出了优化结构和压缩模型的策略:
- 大量使用 大小的卷积核,代替 大小的卷积核,从而减少参数;
- 在 大小的卷积核相应的卷积层之前,使用 大小的卷积降维,从而减小 卷积核的通道数;
- 基于ShuffleNet的理论,通过延迟下采样(即 的卷积层或池化层),保持较大的 从而提升准确率;
3.2 Fire Module:
Squeeze Net 最核心的结构就是Frie Module:
如图所示,每个Frie Module都由一个squeeze layer和一个expand layer构成;
其中参数 是squeeze layer中 大小的卷积核的数目; 和 分别是expand layer 大小和 大小的卷积核的数目;
一般而言,有: ,从而起到降维和减小参数的作用;
(四)Tiny SSD 的核心思想:
TinySSD 的想法就是在满足较高准确率和实时检测(比如较少参数和较快检测速度)之间寻找一个平衡,于是将SSD与SqueeNet的Fire Module结合起来;
这里将原本SSD用于特征提取的VGG-16(或VGG-19)的卷积层,由较大的
大小的卷积核,替换成了Fire Model,从而在压缩模型的参数量的同时,保证了特征层的提取;
(五)Tiny SSD 的网络结构:
每层Fire Module的参数表示为:
其中:
- 表示Squeeze Layer中 大小卷积核的数目;
- 表示Expand Layer中 大小卷积核的数目;
- 表示Expand Layer中 大小卷积核的数目;
(六)实验结果: