目标检测
1 目标定位
对象定位
图片分类问题已经很熟悉了,构建神经网络的另一个问题,就是定位分分类问题:部基金要判断图中是不是一辆汽车,还要在图中标记处它的位置。
假设是一个区分行人,汽车和摩托车的分类任务。
p c , b x , b y , b w , b h , c 1 , c 2 , c 3 p_c,b_x,b_y,b_w,b_h,c_1,c_2,c_3 pc,bx,by,bw,bh,c1,c2,c3
p c p_c pc代表的是图片中是否存在待识别得物体,若没有 p c = 0 p_c=0 pc=0,其他项均不作考虑
b
x
,
b
y
b_x,b_y
bx,by是物体的中心点坐标
b
h
,
b
w
b_h,b_w
bh,bw是长度和宽度
其他的和以前的一样。
接下来就是损失函数的设计:
∑ 1 n ( y ^ i − y i ) 2 \sum_1^n{(\hat{y}_i-y_i)^2} ∑1n(y^i−yi)2
分情况讨论:
p
c
=
1
时
p_c=1时
pc=1时,其他七个元素的平方差之和
p c = 0 时 p_c=0时 pc=0时,仅仅是该项的平方差
2 特征点检测
同上,要有一位用作表示是否存在人脸,而后:
假设采集64个面部特征点:
那么
l
1
x
,
l
1
y
,
.
.
.
,
l
64
x
,
l
64
y
l_{1x},l_{1y},...,l_{64x},l_{64y}
l1x,l1y,...,l64x,l64y
需要注意的是,特定的数值对表示的一定是同一个特征点的坐标。
3 目标检测
基于滑动窗口的检测算法:
顾名思义,该算法检测小于图片大小的窗口区域是否存在目标物体,滑动检测
那么,为了更好的检测,我们把训练集中的图片假设都输入的是最大程度剪切且完整包含汽车的图片。
在检测的过程当中,选取一定大小的窗口按一定步幅扫描整个图片进行检测,若没有
在进行一次,选择一个更大的窗口。
第三次选用更大的窗口,重复上述操作。
以此类推。
很明显的缺点:昂贵的计算成本
滑动窗口的卷积实现
![](https://i-blog.csdnimg.cn/blog_migrate/c9e01700db4c82eea4bbb8603f1bd93d.png)
上面的滑动窗口的卷积方式有着巨大的计算成本:
如何做呢?
如下图所示:每一步都按一定长宽一定步长的过滤器进行卷积,在卷积和池化的过程后,FC的第一层的第一个格子,就等同于一次滑动窗口卷积的结果。
Bounding Box 预测
上述的方法还是不能实现精准的画出边界框
结合了Bounding Box,而后在 p c = 1 p_c=1 pc=1的时候,输出 n x , n y , n w , n h n_x,n_y,n_w,n_h nx,ny,nw,nh
交并比
如何检测对象检测算法运作良好?
交并比公式: I o U = 预 测 边 框 和 实 际 边 框 的 交 集 预 测 边 框 和 实 际 边 框 的 并 集 IoU = \frac{预测边框和实际边框的交集}{预测边框和实际边框的并集} IoU=预测边框和实际边框的并集预测边框和实际边框的交集
一般约定,0.5是阈值用于判断边界框是否准确,大于意味着准确,也可以定的高一些
非极大值抑制
首先选一个阈值,抛弃所有 p c p_c pc低于该阈值的格子。
而后选取 p c p_c pc值最大的格子保留
再依次计算交并比,其值超过设定阈值的格子抛弃。
而后在剩下的边框里一直循环往复的重复上述操作,直到不再抛弃盒子停止。
Anchor Boxes
在以上的方法会出现多个对象分配到同一个格子
的情况,anchor boxes就是处理这种情况的。
那就是设置几个(一般是5-10个)不同形状的anchor boxes,而后扩展y向量,比如原来y是 19 ∗ 19 ∗ 8 19 * 19 * 8 19∗19∗8 那么就顺位复制成 $ 19 * 19 * 16$
![](https://i-blog.csdnimg.cn/blog_migrate/14a67455541efe628d3377522333c2bd.png)
左矩阵则是图示情况。
右矩阵则是行人走开后的情况。
YOLO算法
得到输入
经过卷积层和池化层,不再单纯的进行滑动窗口,而是结果不再是 1 ∗ 1 ∗ n 1*1*n 1∗1∗n的形状,而是 N ∗ N ∗ n N*N*n N∗N∗n
N是图片被划分的格子的长或宽
识别出是否有物体,是哪种物体,就得出了 p c , c 1 , c 2 , c 3 p_c,c_1,c_2,c_3 pc,c1,c2,c3的值
那么就要进行边框检测了,评测标准先是 p c p_c pc
设置 p c p_c pc的阈值,小于的去除
选出 p c p_c pc值最大的
设立与最大的交并比的阈值,大于的去除
在剩余的集合当中重复以上操作
这样就划分了边框
那么还要解决同一格子多个标记的问题,采用n(5-10)个不同形状的anchor boxes,相应扩展y向量。
遇到还表示不了的,或者设置的anchor boxes还是没覆盖的(虽然很少)采用某种强制的默认策略对表现性能影响不大。