【深度学习笔记08】经典神经网络
一、目标定位
1.1 基本思想
目标定位是在图像分类的基础上发展而来的,而目标检测又是建立在目标定位的基础之上。
对于一张图片来说,我们可以通过卷积神经网络以及softmax函数实现图像的分类,例如人、车、自行车等。
如果我们想要定位目标在图像中的位置,我们可以让softmax函数多输出几个数字,例如多输出4个数字来描述边界框的位置(bx, by, w, h)。这样训练集就不仅是图像的分类数据了,还要包括图像中的边界框坐标。
1.2 标签的定义
根据上面的思想,我们可以将图像的标签定义为如下:
$y = [P_c, b_x, b_y, b_w, b_h, c_1, c_2, c_3]^T$
其中
- $P_c$:代表图像中是否有物体(区分物体与背景)
- $b_x, b_y, b_w, b_h$:边界框的中心坐标以及宽高
- $c_1, c_2, c_3$:图像中物体属于三类的概率
1.3 损失函数的设计
对于上面定义的标签,如果采用平方损失策略,则损失函数定义如下:
如果$y_1=1$,即图片中有目标物体:
$l(\hat y, y)=(\hat y_1-y_1)^2+(\hat y_2-y_2)^2+\dots+(\hat y_8-y_8)^2$
(由于标签中共有8个元素,因此从$y_1$到$y_8$)
如果$y_1=0$,即图片中没有目标物体:
$l(\hat y, y)=(\hat y_1-y_1)^2$
二、特征点检测
上面我们介绍了通过在标签中添加4个参数$b_x, b_y, b_w, b_h$来输出边界框的坐标。
特征点检测也是类似的原理。
加入我们出于某种原因,想要获取一个人的四个眼角在图像中的坐标,那么我们完全可以将其添加到标签中,事先标记好训练图像中每个人的眼角坐标,然后用神经网络进行训练。
$y = [P_c, l_{1x}, l_{1y}, l_{2x}, l_{2y}, \dots, l_{4x}, l_{4y}]^T$
其中
- $P_c$:代表图像中是否有人脸(图像分类)
- $l_{1x}, l_{1y}, \dots, l_{4x}, l_{4y}$:四个眼角的xy坐标
这与边界框的获取,图片的分类等等,都是同样的原理。
如果我们想更进一步,获取脸部表情,我们可以在人脸上设置多个特征点,然后再每一张图片上的人脸作标注,然后由神经网络来回归计算。
通过这种方式,就可以实现特征点的检测。
三、目标检测
目标检测的基础是图像分类。
3.1 滑动窗口法
以汽车检测为例:
首先在训练集来说,我们可以使用让汽车占满全部区域的图片来作为训练图片,可以通过在其他照片中裁减出来汽车所占据的区域。
对于一张给定图片,我们在图像上选取一个小窗口,将这个小窗口内的图像传入神经网络中,判断这个小窗口中的图像是不是一辆车,然后移动小窗口到下一个位置,继续检测。整幅图片遍历完成之后,再调整窗口的大小,重新遍历。
这种算法一般就被称为滑动窗口法。
这种算法的优点是算法设计简单,但也有很明显的缺点就是计算量太大,而且需要合理选择窗口大小和步幅,否则无法准确定位图像中的物体。
3.2 获取更精准的边界框
现有问题:使用滑动窗口法
- 如果步长较大,所标出的窗口经常不能很好的完全覆盖目标物体,如果步长较小,计算量又过大。
- 目标物体有时不是规则的正方形,使用正方形的滑动窗口,获得的边界框精度不够
解决思路
- 利用图像定位算法,将图片分割成9个网格,对每一个网格进行图像定位,使用类似于$y = [P_c, b_x, b_y, b_w, b_h, c_1, c_2, c_3]^T$的标签进行训练。
- 这样每一个格子都会获得一个输出,例如$y = [1, b_x, b_y, b_w, b_h, 0, 1, 0]^T$,这样综合来看,输出的维度就是3x3x8。3x3是格子数量,8是输出参数个数。
这样,相比于滑动窗口来说,滑动窗口是将覆盖范围最大的那个窗口,作为边界框输出。而这里则是将边界框作为四个参数作回归了。
优点:
- 由于使用卷积处理不同格子时,很多计算步骤是共享的,因此大大提高了计算效率
- 并且由于是卷积实现,所以计算速度非常快,可以达到实时识别
3.3 非极大抑制NMS(Non-Max Suppression)
问题:算法可能对同一个物体识别多次,我们需要采取某种措施使算法对每个对象只检测一次。
解决方法:
在输出结果中,找到识别结果概率最高的一个,例如图中的0.9,将与这个框交并比较大的其他框抑制掉,我们认为这个0.9的框就标出了一个对象。
然后找到剩余所有框中概率最高的一个,例如图中的0.8,将与这个框交并比较大的其他框抑制掉,得到预测结果。
交并比$IOU=\frac{交集区域}{并集区域}$
实现流程
- 将图片分为nxn个格子,对每个格子进行预测,获得包括物体存在概率,边界框位置大小等参数
- 删除所有物体存在概率小于0.6的边界框
- 对剩余的边界框
- 选取概率最高的边界框作为输出,认为其标出了某个物体,并将与此边界框重叠度高于50%的边界框删除
- 在剩余的边界框中在找概率最高的边界框作为输出,认为其中也标出了另一个物体,并将与此边界框重叠度高于50%的边界框删除
- 重复过程