目标定位
我们可以使用一个向量来表示这个车再图像当中的位置,以及它的种类
比如上图:
我现在神经网络只能认出来四种东西:
- 行人
- 车
- 自行车
- 其他东西我认为都是背景
y是一个向量,从上到下认识一下内部参数:
Pc —> 现在这个框框里面有没有东西? 有 ⇒ 1 没有 ⇒ 0
bx,by,bh,bw 用来标识一个框框,这个框框的中心位置&宽高可以唯一的标识一个物体
然后用one-hot编码来认定这个东西是什么
c1=0 因为 不是行人
c2=1 因为 是汽车
c3=0 因为 不是自行车
那么loss怎么计算呢?
分成两种情况: Pc =0 (判定当前图片当中没有目标,都是背景), Pc =1 (发现目标)
Pc =1时,loss计算如下图所示:
其中,y就是真值,是人工标注的。而y^是预测值,是模型生成的。
Pc =0时,loss计算如下图所示:
容易理解,因为除了**Pc**之外其他的数值没有意义
特征点检测
特征点 == 我想要的一些图片当中的关键点
比如说:我要获取到人的眼角、我要获取到人的躯干信息–>等同于我要获取到人体关节信息。
应用:抖音特效–>小黑换脸
目标检测
思路一、滑动窗口
计算成本问题。
思路二、在卷积上面用滑动窗口
用conv代替FC
缺点:框出来的东西不太准确
思路三、YOLO
yolo算法一开始会把图像分成若干个小格子(上面的这幅图使用的是33的)
每一个小格子都可以使用一个vector来表示其位置以及里面有什么东西。
针对上面的这样一个33的图,那么将这些个vector组装起来,变成一个338的矩阵,用来作为这个图像的标签。
这张图解释了,为什么分了格子之后,他那个框框还能够跨格子。
就是因为bx,by,bh,bw能够标识这个框框。 但是它是按照比例来的。
就是一个框框,它左上角的坐标是(0,0),右下角的坐标是(1,1)
拿右边的这个车子来举例,那么他的
bx = 0.4 by = 0.3
bh = 0.9 bw = 0.5 注意: bh和 bw是能够大于1的,所以他这个框框能够跨越多个框框的界限。
交并比
可以用来评价对象检测算法
一般约定 IoU>0.5就可以说检测正确。
NMS 非极大值抑制
用来确保算法对每个对象只检测一次。
为什么需要它?
按照上面的那种方式,就能生成好几个框框,但是这些个框框都指向了同一个目标,得删一删。
删的原则是什么呢?
比如我这里聚集了好几个框框,那么我这里有一个0.9,那周围和0.9框框IOU值高的框框都删掉了。
那要是 人、自行车、狗三者重叠到一起了,怎么搞呢?
anchor box.
Anchor Boxes
就是一个向量拉长一点,里面copy一份。
这种anchor box的形状需要人工来进行设置。
but yolo算法能够实现anchor box 的自动化。