深度学习——目标检测[12]

1. 目标定位

图像分类定位:一般图像中只有一个对象

对象检测:一般有多个对象

分类定位问题:识别出图像中的对象属于哪一类,且给出一个边界框来表示它在图像中的位置。所以,最后输出的地方再加上四个参数来表示位置

注:bx, by是图中对象所在位置的中心点

对象有三种,如果是background,表示没有任何对象

定义输出的label y

y中包含了8个值,第一个pc表示是否有对象,如果有则为1,没有为0(也就是只有背景)

如果只有背景,则其它结果就不重要了,"don't care"

扫描二维码关注公众号,回复: 925711 查看本文章

定义loss函数,是对8个结果分别求差平方和(也可以每个参数用不同函数来进行误差估计)。当pc=0时(也就是没有对象时),只关注pc的结果是否正确,loss也就只计算pc的结果

2. 特征点检测landmarkh

识别一个对象,可以通过让神经网络输出一些关键点(landmark)位置来表示。下面是一些例子

注:关键点label的表示在每张图上要一致,比如总是用l1来表示左侧的眼角

3. 基于滑动窗口的对象检测

训练集:对图像进行适当裁剪,把剪后的部分输入,判断是否包含车

用一个框(窗口),移动遍历图像的各区域,把框内的图像作为ConV网络的输入进行计算

问题:计算的代价太大。以前会采用简单一点的分类方法,但是现在用网络计算的话,计算量变大

4. 滑动窗口的实现——解决计算量大的问题

如何把FC转成卷积层

第一行是窗口的大小,也就是以14x14x3的大小作为滑动窗口卷积网络的输入

第二行是训练数据为16x16x3的输入的例子,第三行是28x28x3的输入

这里它不再需要遍历输入图像的各区域作为输入进行计算,因为有很多数据计算是共享的

结果的位置是对应的,和上面slide有什么关系????

一个实际例子,但仍有一个缺点:窗口的大小位置并不一定那么准确

5. bounding box预测

上面的缺点无法获得精确的边界

YOLO算法:you look only once

基本思想:把图片分成3x3(或许更多),然后对每个格子执行图像分类和定位方法,每个格子有一个输出label(8个值)

label中标记一个物体属于一个格子是以物体的中心点为准,中心点在哪个格子,它就属于哪个格子。如果一个格子中不包含物体的中心点,即使有很多部分落在其中,也认为该格子不包含物体

一个格子包含多个物体?:也就是格子中有多个物体的中心点。实际上,会使用19x19,划分得更精细,这种情况就会更少一些

每个格子都要执行一次?:利用卷积,只要单次卷积即可完成。YOLO的执行速度很快,甚至可以达到实时检测

如何定义物体位置:物体的位置是相对于它所在的单元格来说,而不是整个图像

7. 如何评价物体检测算法是否正确

交并比:intersection over union,就是两个区域交集与并集的比,一般规定0.5以上就说明结果是正确的,也可以定得更高

8. 一个物体被多次检测的问题

问题:如果对一个图像划分19x19格,每个格子都有可能说自己包含了一个对象(如车子),也就是一个车子被多个格子检测

non-max suppersion:非最大抑制算法

只检测一个物体的情况(如果有多种物体则每种执行一次non-max)

先对19x19个格子执行算法得到结果,然后找出Pc(包含一个物体的概率)先是把没有达到限值的删除,然后在找出最大的,把与该格子交叉很多的框删除,重复上述操作

9. anchor box

解决一个格子中检测到多个物体的问题(一个格子包含了多个物体的中心点)

基本思想:定义多种anchor box形状,在输出标签中就包括了这些anchor box,检测到一个物体的话,既要看它的中心点位置,还要看它和哪个anchor box的IOU最高来决定

问题:如何选择anchor box的类型; 如果给了两个anchor box,但是有三种形状的话,算法效果不好;事实上,如果格子多一下,一个格子有多个物体的问题就会少一些

10. YOLO算法全部

定义输出标签:用两个anchor box

训练

用non-max移除多余的框

11 R-CNN:region with CNN

在计算机视觉领域用的比较多

思想:先对图像进行分割,然后从中选取部分区域执行算法,而不是对整个图像所有区域计算

缺点:速度太慢了

猜你喜欢

转载自www.cnblogs.com/coolqiyu/p/8724473.html