基于深度学习的对象检测时,我们主要分享以下三种主要的对象检测方法:

  • Faster R-CNN(后期会来学习分享)
  • 你只看一次(YOLO,最新版本YOLO3,后期我们会分享)
  • 单发探测器(SSD,本节介绍,若你的电脑配置比较低,此方法比较适合)

打开网易新闻 查看更多图片

R-CNN是使用深度学习进行物体检测的训练模型; 然而,这种技术很难理解,难以实施,并且难以训练。

如果我们只追求速度,那么我们倾向于使用YOLO,因为这个算法要快得多,但是识别物体位置精准性差,召回率低

R-CNN 与YOLO各有自己的优缺点,由谷歌开发的SSD是两者之间的平衡。

MobileNets:高效(深层)神经网络

在构建对象检测网络时,通常使用现有的网络架构,例如VGG或ResNet,然后在对象检测管道中使用它。问题是这些网络架构可能非常大,大约为200-500MB。

相反,我们可以使用MobileNets,Google在2017年提出的适用于手机端的神经网络模型。我们将这些网络称为“MobileNets”,因为它们专为资源受限的设备而设计。MobileNets与传统CNN的区别,主要使用了深度可分离卷积Depthwise Separable Convolution 将卷积核进行分解计算来减少计算量

引入了两个超参数减少参数量和计算量

宽度乘数(Width Multiplier): [减少输入和输出的 channels ]

分辨率乘数(Resolution Multiplier):[减少输入输出的 feature maps 的大小]

可以将一个标准卷积核分成一个深度卷积depthwise convolution 和 一个1X1的卷积(叫作逐点卷积pointwise convolution)。如下图所示

打开网易新闻 查看更多图片

( 左)具有批量标准化和ReLU的标准卷积层。(右)深度可分的卷积与深度和点的层,批量标准化和ReLU

结合MobileNets和Single Shot Detectors,实现快速,高效的基于深度学习的物体检测

mobilenet_ssd caffe模型可视化地址:
http://ethereon.github.io/netscope/#/gist/5b1ffa5d22f6ac1f25f30fbd24a716be

conv13是骨干网络的最后一层,作者仿照VGG-SSD的结构,在Mobilenet的conv13后面添加了8个卷积层,然后总共抽取6层用作检测,貌似没有使用分辨率为38*38的层,可能是位置太靠前了吧。

提取默认框的6层为conv11, conv13, conv14_2, conv15_2, conv16_2, conv17_2,该6层feature map 每个cell产生的默认框个数分别为3,6,6,6,6,6。也就是说在那6层的后边接的用于坐标回归的3*3的卷积核(层名为conv11_mbox_loc……)的输出个数(num output)分别为12,24,24,24,24,24,24。

那6层后边接的用于类别得分的3*3卷积核(层名为conv11_mbox_conf……)的输出个数为3*21(类别为21类,3个默认框) = 63,126, 126, 126, 126, 126。

如果我们将MobileNet架构和SSD CAFFE框架结合起来,我们就可以实现快速,高效的基于深度学习的对象检测方法。

MobileNet SSD模型数据: COCO dataset

在图像中检测到20个对象(背景类为+1),包括飞机,自行车,鸟类,船,瓶,公共汽车,汽车,猫,椅子,奶牛,餐桌,狗,马,摩托车,人,盆栽植物,绵羊,沙发,火车和电视监视器。

使用OpenCV进行基于深度学习的对象检测