作者:jliang
https://blog.youkuaiyun.com/jliang3
《深度学习工程师-吴恩达》03卷积神经网络—目标检测 总结
1.重点归纳
1)目标定位
(1)只是检测图像类型时,只需要使用softmax输出每种类型的概率即可。当需要检测图像类型并且其在图像中的位置时,还需要输出被检测对象的边界框参数bounding box。
(2)输出label定义(图像中只有一个对象的情况)
- 第一个值是pc,表示是否包含对象,如果包含行人/汽车/摩托车任意一种对象时,pc=1;否则如果只有背景时,pc=0。
- bx, by, bh, bw为边界参数bounding box,分别是对象的中心位置x和y坐标,对象的高和宽。图像的左上角为坐标零点。
- c1、c2、c3为三种类别的概率。
- 如果图像中没有对象时,pc=0,此时我们不关注bx, by, bh, bw, c1, c2, c3的结果。
(3)损失函数
- y1-y8为上面提及的输出(pc, bx, by, bh, bw, c1, c2, c3)
- 公式中所有输出值都使用平方误差函数,实际应用中,不太可能对c1, c2, c3和softmax激活函数应用对数损失函数并输出一个元素值。通常做法是对边界坐标bx, by, bh, bw应用平方误差类似的方法,对pc应用逻辑回归函数。
2)特征点检测(Landmark detection)
(1)输出特征改成多输出,第一个值代表是否包含目标,第2至n个输出值为需要检测的目标周围的坐标。
(2)例子:眼睛检测(眼角4个特征点,共1+2*4=9个输出值)、人脸部轮廓检测(64个特征点)、头部检测、人体姿势检测等
3)基于滑窗的目标检测
(1)训练:把图片中的目标对象剪切处理,然后输入网络训练。
(2)预测:使用上面训练模型的输入大小作为窗口,以某步幅在输入图片中进行滑动,滑动的小图像输入卷积网络进行预测,即判断红色框(窗口内)有没有目标对象(汽车)
(3)缺点,就是计算成本太大
- 滑窗移动剪切出太多小方块,卷积网络要一个一个地处理
- 使用小步幅可以精确定位对象,但是检测次数很大;使用大步幅可以减少待检测小图片数量,但是可能会影响性能。
4)使用卷积网络实现滑动窗口以减少检测次数
(1)把FC(全连接层)转化成卷积层,它和全连接层时一样的,因为卷积后输出的n个节点中的每一个节点都有一个5*5*16(池化层输出大小)维度的过滤器,每个值都是上一层这些5*5*16激活值经过某个任意线性函数的输出结果。
(2)通过卷积实现滑动窗口对象检测算法
- 输入为14*14*3,测试集图片为16*16*3,神经网络在测试集图片上进行滑动(此处步长为2),滑窗大小就是神经网络的大小14*14*3
- 上面使用的滑动窗口检测对象,需要对图片进行4次卷积检测,实际上这4次卷积操作中有很多计算是重复的。滑动窗口的卷积应用,使得卷积网络在这4次操作过程中共享已经进行过的计算
- 最终输出的4个子方块中(图中第二行),蓝色的是图像左上角部分14*14的输出,其它3个分别是滑窗滑过时其它三个卷积输入的输出
(3)算法的缺点就是边界框的位置可能不够准确
5) Bounding Box
(1)YOLO算法:使用卷积网络实现滑动窗口加上上面的目标定位方法来解决边界框不准确的问题,对于每一个滑窗小图像指定一个标签y,y是8维向量,最终的输出数量是3*3*8。
(2)YOLO算法可以输出精确的边界框并且运行速度非常快(可以到达实时识别)。
(3)bounding box位置信息:约定每个滑窗(不是整个图片)的左上角为零点(0,0),滑窗的右下角是(1,1),所以bounding box的信息是相对格子尺度的比例。bx, by值必须在0-1之间,但是bh和bw可以大于1(但目标跨度多个格子时大于1)。
6)交并比
(1)交并比(IOU)计算两个边界框(同时检测到目标的边界框)交集和并集之比,按照约定,如果IOU大于或等于0.5时,就是检测正确。IOU更高则边界框精确更高,所以这是衡量定位精确度的一种方