基于深度学习的对象检测时,我们主要分享以下三种主要的对象检测方法:
- 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进行基于深度学习的对象检测
caffe prototxt 与caffemodel模型已经共享百度网盘:
回复:MobileNet SSD
即可领取
在本节中,我们将使用 OpenCV中的MobileNet SSD +深度神经网络( dnn)模块来构建我们的对象检测器
待我们的神经网络检测完成后,我们遍历检测模型,得到检测对象的尺寸box与label
使用训练好的模型,我们简单的使用便可以实现对象检测,一共代码20多行,再次感谢Google团队对MobileNet SSD模型的研究以及训练(如何训练自己的模型,我们后期分享)
微&信搜索:启示AI科技
可以体验不同的AI工具
本文暂时没有评论,来添加一个吧(●'◡'●)