机器学习系列 (7)
目标检测之YOLO算法原理及Python实现
目标检测:
1.目标分类
2.目标定位
3.特征点检测
4.滑动窗口检测
5.卷积的滑动窗口实现
YOLO算法:
1.什么是YOLO
2.边界框(Bounding Box)回归
3.交并比(IOU)
4.非极大抑制(NMS)
5.Anchor box
6.候选区域(Region proposals)(optional)
7.YOLO算法总结
YOLO的Python实现:
见文章内容
申明
本文原理解释及公式推导部分均由LSayhi完成,供学习参考,可传播;代码实现部分的框架由Coursera提供,由LSayhi完成,详细数据及代码可在
github查阅。 https://github.com/LSayhi/Neural-network-and-Deep-learning (https://github.com/LSayhi/Neural-network-and-Deep-learning)
一、目标检测
1.目标分类:
目标分类即对图像中的物体进行识别分类,是目标检测的第一阶,只要求分辨出对象的类别,常用卷积神经网络(CNN)实现。例如在自动驾驶应用
中,目标分类的作用是识别出图片中的物体属于哪一个类别,属于是行人、汽车、自行车、红绿灯、护栏等。
2.目标定位:
目标定位即对图像中的物体进行位置识别,是目标检测的第二阶,要求输出对象的坐标信息,坐标常用中心点和长宽来表示。例如在自动驾驶中,
目标定位的作用是确定图片中的行人、汽车等物体的具体位置。
3.特征点检测:
特征点检测即要对物体的某些特征进行识别,这可以通过神经网络输出相应特征点的坐标来实现,只需要把网络的输出改为特征点的坐标。例如在
人脸识别应用中,识别出多组人脸特征点的信息,并根据识别出的特征点信息对此次检测的人脸进行识别。
4.滑动窗口检测:
滑动窗口检测即是要通过“滑动”检测窗口,对每一个窗口图像分别输入CNN进行识别,窗口大小可根据实际取值,例如图片像素为6286283,则可
取正方形窗口边长为小于628的整数,然后滑动窗口到其它位置,按一定顺序遍历整张图片,输出每一次窗口里是否有物体,是什么物体,性能依
赖于窗口大小的选取及滑动的步长,由于CNN需要一个个处理窗口图像,若步长和窗口较小,检测的精度提高,但需要很长的时间;如果步长和窗
口较大,虽然时间减小,但可能会降低检测精度。
Figure 1 : 滑动窗口检测示意图
5.滑动窗口的卷积实现:
滑动窗口的卷积实现是为了解决滑动窗口检测中的矛盾而提出的一种检测方式。为了构建滑动窗口的卷积实现,首先要将CNN最后的全连接层转化
成卷积层,举个例子看一下:假设用来做分类任务的CNN的输入大小是 的tensor,滤波器的大小是 ,最大池化 ,再经过两
层全连接层,输出为softmax层的大小为4(对应四种检测对象,如行人、汽车、摩托车、背景),那么通过把全连接层替换为卷积层,亦可实现和同
样的效果,只不过此时的输出的是 的tensor,过程如下图所示。
14
∗
14
∗
3
5
∗
5
∗
16
2
∗
2
1
∗
1
∗
4